Pergunta

Estou escrevendo um aplicativo altamente paralelo que é multithread. Eu já tenho uma aula de thread acelerada da SSE escrita. Se eu escrevi uma classe de encadeamento acelerada do MMX, executou os dois ao mesmo tempo (um thread SSE e um thread MMX por núcleo) o desempenho melhoraria visivelmente?

Eu acho que essa configuração ajudaria a ocultar a latência da memória, mas eu gostaria de ter certeza antes de começar a derramar tempo nela.

Foi útil?

Solução

Os conjuntos de instruções SSE e MMX compartilham o mesmo conjunto de unidades de execução de processamento de vetores na CPU. Portanto, a execução de um thread SSE e um encadeamento MMX terá os mesmos recursos disponíveis a cada thread, como se executando dois threads SSE (ou dois threads MMX). A única diferença está nas instruções que existem no SSE, mas não no MMX (já que o SSE é uma extensão do MMX). Mas, nesse caso, o MMX provavelmente será mais lento, porque não possui essas instruções mais avançadas disponíveis.

Portanto, a resposta é: não, você não veria uma melhoria de desempenho em comparação com a execução de dois threads SSE.

Outras dicas

SSE e MMX usam os mesmos registros, por isso não importa qual dos dois você usa (além da sucção do MMX e SSE ser útil, é claro)

A melhor pergunta é como o SSE é implementado na sua CPU de destino. Ele tem uma unidade SSE por núcleo? (Provavelmente) se assim for, você também pode executar instruções SSE em todos os threads.

Se tiver uma unidade SSE compartilhada entre núcleos, diferentes encadeamentos estarão lutando por isso, para que não haja muita coisa executando as instruções SSE em vários threads. (Não sei se alguma CPUS realmente compartilhe a unidade SSE entre os threads, então tome isso como um caso hipotético)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top