Como outros já disseram, isso depende inteiramente da tarefa.
Para ilustrar isso, vamos analisar um benchmark real:
Isto foi retirado da minha tese de mestrado (não disponível online).
Isto mostra o aumento relativo 1 dos algoritmos de correspondência de strings (cada cor é um algoritmo diferente). Os algoritmos foram executados em dois processadores quad-core Intel Xeon X5550 com hyperthreading. Em outras palavras: havia um total de 8 núcleos, cada um dos quais pode executar dois encadeamentos de hardware (= “hyperthreads”). Portanto, o benchmark testa a aceleração com até 16 threads (que é o número máximo de threads simultâneos que essa configuração pode executar).
Dois dos quatro algoritmos (azul e cinza) escalam mais ou menos linearmente em todo o intervalo. Isto é, beneficia de hyperthreading.
Dois outros algoritmos (em vermelho e verde; escolha infeliz para pessoas daltônicas) escalam linearmente para até 8 threads. Depois disso, eles estagnaram. Isso indica claramente que esses algoritmos não se beneficiam do hyperthreading.
O motivo? Nesse caso específico, é a carga de memória; os dois primeiros algoritmos precisam de mais memória para o cálculo e são limitados pelo desempenho do barramento de memória principal. Isso significa que enquanto um encadeamento de hardware está aguardando pela memória, o outro pode continuar a execução; um caso de uso principal para encadeamentos de hardware.
Os outros algoritmos exigem menos memória e não precisam esperar pelo ônibus. Eles são quase inteiramente computados e usam apenas aritmética inteira (operações de bits, na verdade). Portanto, não há potencial para execução paralela e nenhum benefício de pipelines de instruções paralelas.
1 ou seja Um fator de aceleração de 4 significa que o algoritmo é executado quatro vezes mais rápido do que se fosse executado com apenas um thread. Por definição, então, todo algoritmo executado em um thread tem um fator relativo de aceleração igual a 1.