Pergunta

Os registros SSE são compartilhados ou duplicados entre os processadores lógicos (hiper threading)? Posso esperar o mesmo tipo de aceleração da paralelização de um programa SSE pesado como para um programa normal (a Intel reivindica 30% para processadores com hiper threading)?

Foi útil?

Solução

Não está claro para mim a partir da documentação da Intel se os processadores de hiperthreading compartilharem o arquivo de registro entre threads ou tiverem dois diferentes (eu acho que eles são de fato distintos, pois, caso contrário, o tempo de alternância entre os threads HT seria bastante alto, mas isso é puramente um palpite).

Quanto à aceleração - isso dependerá do seu mix de instruções e programação. Lembre -se de que uma CPU HT não possui recursos de execução extras (ALUS, unidades de carga/loja etc.), a melhoria do desempenho se deve à melhor utilização desses recursos, uma vez que o código típico, especialmente em um processador moderno, passa uma quantidade razoável de tempo bloqueado em espera por cargas e lojas de memória serem concluídas antes que a execução possa continuar. O HT permite que essas cargas e lojas sejam intercaladas para que uma de um thread em uma leitura, a outra possa ser alterada e começar a usar os recursos de execução que anteriormente estavam ociosos.

Eu acho que o tipo de aumento de desempenho você veria com o multithreading de um programa SSE dependerá da proporção de operações de memória para operações aritméticas. Se, por exemplo, seu programa SSE carregar 4 registros SSE da memória, executar 10.000 operações de SSE neles e depois gravar os 4 registros de volta, é provável que você não veja muita vantagem de HT sendo capaz de sobrepor acesso à memória porque 99% dos seus programas O tempo de execução será gasto no SIMD ALUS e não no acesso à memória.

Por outro lado, se o seu programa for muito pesado, o seu programa multithread poderá melhorar bastante o desempenho em processadores multicore e proporcionar a você uma melhoria muito melhor do que uma melhoria de 30%, pois nesse caso seu código poderia acessar todos os recursos de execução de execução de vários núcleos de uma só vez.

Outras dicas

Eles são logicamente duplicados - cada thread recebe seu próprio estado. Fisicamente, eles podem ser compartilhados - depende da sua implementação de hiperthreading.

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