J'ai hérité d'un code c hautement optimisé (SSE4), mais non commenté. Existe-t-il des outils ou utilitaires qui convertissent les intrinsèques SSE en code plus lisible ou en pseudocode? Ce serait principalement pour la lisibilité afin que je puisse mieux comprendre le code avant de creuser et de faire des changements.Convertir les intrinsèques SSE en code C/C++ lisible?
Répondre
Je ne connais aucun de ces outils.
Mais cela n'aiderait probablement pas beaucoup de toute façon. Si le code SSE est bien optimisé, la partie difficile ne décode probablement pas les intrinsèques. La partie difficile suit toutes les astuces pour améliorer la localité et éliminer les dépendances de données intra-itératives (stripmining, transformations de boucles polyédriques, etc.)
Je peux vous donner une suggestion pour l'avenir, cependant: Toujours avoir un scalaire bien commenté version de la même routine écrite de la manière la plus simple possible. Ce "code de référence" ne devrait porter que sur la lisibilité et la correction, pas sur la vitesse ... Il devrait donc avoir beaucoup d'assertions. Avoir également une suite de tests capable d'exercer à la fois la version scalaire et la ou les variantes optimisées.
Que ce soit en implémentant une routine pour la première fois ou en mettant à jour une routine existante, commencez toujours par le code de référence et la suite de tests. Pas nécessairement dans cet ordre.
Cette approche est plus coûteuse à l'avant, mais nettement moins chère à long terme.
+1 pour une idée sur le "code de référence". La plupart du temps, je ne comprends pas mon propre code quand je le lis plus tard en raison d'une sur-optimisation. Un code de référence lisible résoudra ce problème, j'espère. –
- 1. C++ SSE intrinsèques atan2
- 2. SSE intrinsèques vérifier zéro drapeau
- 3. Travailler avec les intrinsèques SSE SIMD d'Intel
- 4. compiler des instructions intrinsèques sse
- 5. Paralléliser le code sse fonctions intrinsèques c avec openmp
- 6. Opérateur virgule Visual C++ et intrinsèques sse
- 7. Intel SSE intrinsèques: Différence entre si64 si64x
- 8. Modification d'une fonction pour utiliser les intrinsèques SSE
- 9. SSE intrinsèques pour comparaison (_mm_cmpeq_ps) et opération d'affectation
- 10. Comment convertir ASM en code lisible?
- 11. Comment convertir un makefile en code lisible?
- 12. Convertir les symboles en lisible
- 13. SSE intrinsèques: masquage d'un flottant et utilisation de bitwise et?
- 14. Doutes OpenCL; comment convertir les intrinsèques en langage C simple?
- 15. SSE: convertir * const __m128 à const float *
- 16. convertir le code Hex en chaîne lisible en PHP
- 17. SQL Convertir la valeur de la variable en code lisible
- 18. Convertir l'horodatage en format lisible
- 19. Convertir une ligne javascript en code plus lisible
- 20. SSE: convertir un entier court en float
- 21. Optimisation du code SSE
- 22. Texte lisible en code dissemblé
- 23. Java convertir la date en forme lisible?
- 24. python: Convertir tcpdump en format lisible text2pcap
- 25. époque Convertir/temps unix en format lisible
- 26. Convertir SDDL en texte lisible dans .NET
- 27. Convertir/Créer un document lisible en xml
- 28. amCharts convertir unixtime en date lisible
- 29. La compilation échoue avec OpenMP sur Mac OS X Lion (memcpy et intrinsèques SSE)
- 30. php - convertir xml (millisecondes?) En date lisible
Cherchez ce que signifie alors dans le manuel de votre compilateur et écrivez-vous une feuille de triche de code standard équivalent? –
Aucun outil AFAIK, mais le code SIMD a tendance à utiliser un petit nombre de "patterns" généraux, donc plus vous lisez et comprenez le code, plus il devrait être facile. Préparez-vous à dessiner beaucoup de diagrammes, particulièrement s'il y a des opérations de voisinage (par exemple traitement d'image, filtres 2D, etc.) - le papier millimétré aide. –