Ich schreibe ein Programm mit Intel intrinsics. Ich möchte _mm_permute_pd
intrinsisch verwenden, die nur auf CPUs mit AVX verfügbar ist. Für CPUs ohne AVX kann ich _mm_shuffle_pd
verwenden, aber laut den Spezifikationen ist es viel langsamer als _mm_permute_pd
. Haben die Header-Dateien für Intel-Spezifika-Konstanten definieren, die mir erlauben, zu unterscheiden, ob AVX unterstützt wird, so dass ich sth so schreiben kann:Wie überprüft man mit Intel-Intrinsics, ob AVX-Erweiterungen von der CPU unterstützt werden?
#ifdef __IS_AVX_SUPPORTED__ // is there sth like this defined?
// use _mm_permute_pd
# else
// use _mm_shuffle_pd
#endif
? Ich habe this tutorial gefunden, die zeigt, wie man eine Laufzeitprüfung durchführt, aber ich muss eine statische Kompilierzeitprüfung für die aktuelle Maschine durchführen.
'_mm_permute_pd' (' vpermilpd') ist nicht schneller als 'shufpd dest, selbe, selbe', es sei denn, es kann ein Speicherquelloperand in die Anweisung eingefügt werden. Siehe http://agner.org/optimize/ für Anweisungstabellen usw. –