Question

Les processeurs ARM les plus récents incluent les instructions PLD et PLI.

J'écris des boucles internes serrées (en C ++) qui ont un modèle d'accès à la mémoire non séquentiel, mais un modèle que, naturellement, mon code comprend parfaitement. Je prévois une accélération substantielle si je pouvais pré-localiser le prochain emplacement pendant le traitement de l'emplacement de mémoire actuel, et je m'attendrais à ce que cela soit assez rapide pour que l'essayer vaille la peine d'être expérimenté!

J'utilise de nouveaux compilateurs coûteux d'ARM, et cela ne semble inclure les instructions PLD nulle part ailleurs, encore moins dans cette boucle qui me tient à cœur.

Comment puis-je inclure des instructions de prélecture explicites dans mon code C ++?

Était-ce utile?

La solution

Il devrait y avoir des fonctionnalités spécifiques au compilateur. Il n'y a pas de méthode standard pour le faire en C / C ++. Consultez votre compilateur Guide de référence du compilateur. Pour le compilateur RealView, voir this ou this .

Autres conseils

Si vous essayez d'extraire vraiment les performances maximales de ces boucles, je vous recommande d'écrire l'intégralité de la construction en boucle dans l'assembleur. Vous devriez pouvoir utiliser un assemblage en ligne en fonction des structures de données impliquées dans votre boucle. Encore mieux si vous pouvez dérouler n’importe quelle partie de votre boucle (comme les parties impliquées pour rendre l’accès non séquentiel).

Au risque de poser l'évidence: avez-vous vérifié l'architecture cible du compilateur? Par exemple (humour moi), si par défaut le compilateur est destiné à ARM7, vous n'êtes jamais voir l'instruction PLD.

Il n'est pas exclu que d'autres optimisations, telles que les traitement en pipeline et le déroulement de la boucle peut produire le même effet que votre idée de prélecture (masquer la latence des charges en la chevauchant) calcul utile), mais sans la pression supplémentaire du cache d’instruction causée par les instructions supplémentaires. J'irais même jusqu'à dire que c'est le cas le plus souvent, pour des boucles internes serrées qui ont tendance à avoir peu d'instructions et peu de contrôle. Votre compilateur effectue-t-il plutôt ce type d’optimisation traditionnelle? Si tel est le cas, il peut être utile de consulter le schéma de pipeline pour développer un modèle de coût plus détaillé du fonctionnement de votre processeur et pour évaluer de manière plus quantitative si le préchargement aiderait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top