Pergunta

Estou a escrever algum código e tentando acelerá-lo usando SIMD intrínsecos SSE2 / 3. Meu código é de tal natureza que eu preciso carregar alguns dados em um registro XMM e agir sobre ela muitas vezes. Quando eu estou olhando para o código assembler gerado, parece que GCC mantém liberando os dados de volta para a memória, a fim de recarregar outra coisa em XMM0 e XMM1. Estou compilando para x86-64 então eu tenho 15 registros. Por que é GCC usando apenas dois eo que posso fazer para pedi-lo a usar mais? Existe alguma maneira que eu puder "pin" algum valor num registo? Eu adicionei o "registo" palavra-chave para a minha definição de variável, mas o código assembly gerado é idêntico.

Foi útil?

Solução

Sim, você pode. Reg Vars conversas explícitas sobre a sintaxe que você precisa para pin um variável para um registo específico.

Outras dicas

Se você está chegando a um ponto onde você está especificando registos individuais para cada intrínseco, assim como você pode escrever apenas o diretório de montagem, especialmente dado péssimo hábito de gcc de pessimizing intrínsecos desnecessariamente em muitos casos.

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