使用intel編譯器,如果用戶使用#pragma ivdep
確認沒有依賴關係,則循環仍然可以被矢量化。GCC向量化Pragma
我發現了一個在GCC #pragma GCC ivdep
,卻得到了一個錯誤如下:
warning: ignoring #pragma GCC ivdep [-Wunknown-pragmas] #pragma GCC ivdep
使用intel編譯器,如果用戶使用#pragma ivdep
確認沒有依賴關係,則循環仍然可以被矢量化。GCC向量化Pragma
我發現了一個在GCC #pragma GCC ivdep
,卻得到了一個錯誤如下:
warning: ignoring #pragma GCC ivdep [-Wunknown-pragmas] #pragma GCC ivdep
「的#pragma ivdep」 完全支持從GCC4.9開始。
您使用哪個GCC版本?至少在2013年之前,#pragma ivdep在海灣合作委員會中尚未得到官方支持。
我不確定2013年到2014年間其他GCC4.x子版本的官方支持情況,儘管我已經看到有一些部分補丁版本4.9之前的ivdep支持。
在ICC(你也在問題標籤中提到過)#pragma ivdep在很久以前(至少最近5年)得到支持。
對於其他編譯器:Microsoft支持從MSVS 2013開始的「#pragma loop ivdep」。從20世紀90年代開始,Cray和其他一些「老派」編譯器可能會支持它,但我不確定。
最後,如果您尋找跨平臺和標準化解決方案,請查看OpenMP4.x #pragma omp simd。雖然它是不同的sematic,也只有GCC4.9 + ICC/IFORT的支持,它可能在未來更有利,因爲(與ivdep相反) - pragma omp simd是真正的標準,所以所有編譯器廠商都會或多或少必須在未來支持它,並且必須支持相同的語法。