Pergunta

processadores ARM mais recentes incluem as instruções PLD e PLI.

Eu estou escrevendo laços apertados internas (em C ++) que têm um padrão de acesso de memória não-seqüencial, mas um padrão que naturalmente meu código entende perfeitamente. Eu iria antecipar uma aceleração substancial se eu poderia prefetch o próximo local, enquanto o processamento do local de memória atual, e eu esperaria que isso seja rápido o suficiente para experimentar para valer a pena a experiência!

Eu estou usando novos compiladores caros da ARM, e não parece ser incluindo instruções PLD em qualquer lugar, muito menos neste loop especial que me interessa.

Como posso incluir instruções de pré-busca explícitas no meu código C ++?

Foi útil?

Solução

Deve haver algumas características específicas do compilador. Não há nenhuma maneira padrão para fazer isso para C / C ++. Confira você compilador Guia de Referência Compiler. Para RealView Compiler ver este ou este .

Outras dicas

Se você está tentando extrair desempenho verdadeiramente máximo destes loops, que eu recomendaria escrevendo toda a construção de loop em assembler. Você deve ser capaz de usar em linha de montagem, dependendo das estruturas de dados envolvidas em seu loop. Ainda melhor se você pode desenrolar qualquer peça de seu loop (como as partes envolvidos na realização do não-seqüencial de acesso).

Com o risco de perguntar o óbvio: você tem verificado arquitetura alvo do compilador? Por exemplo (humor mim), se por padrão, o compilador é direcionado para ARM7, você não indo para ver a instrução PLD.

Não é fora do reino da possibilidade de que outras otimizações como software pipelining e circuito desenrolando pode conseguir o mesmo efeito que a sua ideia pré-busca (escondendo a latência das cargas pela sobreposição com computação útil), mas sem a pressão de instrução-cache adicional causada pelas instruções extras. Eu mesmo ir tão longe para dizer que este é o caso mais frequentemente do que não, por presilhas internas apertadas que tendem a ter algumas instruções e pouco fluxo de controle. É o seu compilador fazendo estes tipos de otimizações tradicionais vez. Se assim for, pode valer a pena olhar para o diagrama de pipeline para desenvolver um modelo de custo mais detalhada de como funciona o seu processador, e avaliar quantitativamente mais se prefetching ajudaria.

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