Как уже говорили другие, это полностью зависит от задачи.
Чтобы проиллюстрировать это, давайте посмотрим на реальный тест:
Это было взято из моей магистерской диссертации (в настоящее время недоступно онлайн).
Это показывает относительное ускорение 1 алгоритмов сопоставления строк (каждый цвет - это отдельный алгоритм). Алгоритмы были выполнены на двух четырехъядерных процессорах Intel Xeon X5550 с гиперпоточностью. Другими словами: всего было восемь ядер, каждое из которых может выполнять два аппаратных потока (= «гиперпотоки»). Таким образом, тест производительности тестирует ускорение до 16 потоков (это максимальное количество одновременных потоков, которые может выполнить эта конфигурация).
Два из четырех алгоритмов (синий и серый) масштабируются более или менее линейно по всему диапазону. То есть он извлекает выгоду из гиперпоточности.
Два других алгоритма (красный и зеленый; неудачный выбор для дальтоников) линейно масштабируются до 8 потоков. После этого они застаиваются. Это ясно указывает на то, что эти алгоритмы не выигрывают от гиперпоточности.
Причина? В данном конкретном случае это загрузка памяти; первые два алгоритма требуют больше памяти для расчетов и ограничены производительностью шины основной памяти. Это означает, что пока один аппаратный поток ожидает память, другой может продолжить выполнение; основной вариант использования для аппаратных потоков.
Другие алгоритмы требуют меньше памяти и не должны ждать шины. Они почти полностью связаны с вычислениями и используют только целочисленную арифметику (фактически, битовые операции). Следовательно, нет возможности для параллельного выполнения и нет пользы от параллельных конвейеров инструкций.
1 Т.е. коэффициент ускорения 4 означает, что алгоритм работает в четыре раза быстрее, чем если бы он был выполнен только с одним потоком. По определению каждый алгоритм, выполняемый в одном потоке, имеет относительный коэффициент ускорения 1.