Sto scrivendo un programma utilizzando Intel intrinsics. Voglio usare _mm_permute_pd
intrinsico, che è disponibile solo su CPU con AVX. Per le CPU senza AVX posso usare _mm_shuffle_pd
ma secondo le specifiche è molto più lento di _mm_permute_pd
. Fare i file di intestazione per intrinseche Intel definiscono le costanti che mi permettono di distinguere se AVX è supportato in modo che io possa scrivere sth come questo:Come verificare con Intel intrinsica se le estensioni AVX sono supportate dalla CPU?
#ifdef __IS_AVX_SUPPORTED__ // is there sth like this defined?
// use _mm_permute_pd
# else
// use _mm_shuffle_pd
#endif
? Ho trovato this tutorial, che mostra come eseguire un controllo di runtime, ma ho bisogno di fare un controllo statico, in fase di compilazione per la macchina corrente.
'_mm_permute_pd' (' vpermilpd') non è più veloce di 'shufpd dest, same, same', a meno che non permetta a un operando di una sorgente di memoria di piegarsi nell'istruzione. Vedi http://agner.org/optimize/ per le tabelle di istruzioni, ecc. –