我有這樣的AVX C代碼,在Visual Studio 2010下編譯得很好:
#include <immintrin.h>
#include <iostream>
int main() {
float data[] = {0, 1, 2, 3, 4, 5, 6, 7};
__m256 ymm0 = _mm256_loadu_ps(data);
// ..
float r0 = ymm0.m256_f32[0];
float r4 = ymm0.m256_f32[4];
std::cout << r0 << " " << r4 << std::endl;
}
但是,GCC會出現以下錯誤:
foo.cpp:8:18: error: request for member ‘m256_f32’ in ‘ymm0’, which is of non-class type ‘__m256 {aka __vector(8) float}’
foo.cpp:9:18: error: request for member ‘m256_f32’ in ‘ymm0’, which is of non-class type ‘__m256 {aka __vector(8) float}’
我做了一些研究,似乎ymm0.m256_f32是Microsoft特定的指令,用于從長AVX暫存器中提取單個浮點數.但是我可以用gcc / linux做同樣的事情呢?
uj5u.com熱心網友回復:
GCC可以用C語言索引向量,但不能用C語言索引.您可以考慮將代碼的一小部分重寫為C.另一種選擇是明確使用shuffle,extract和conversion內在函式 – _mm256_shuffle_pd,_mm256_extractf128_pd,_mm_cvtsd_f64.
uj5u.com熱心網友回復:
我也遇到同樣問題。請問解決了嗎,怎么解決的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/144276.html
標籤:其他技術討論專區
