我遇到了下面这样使用 avx 的数据类型的方法 __m256d VPFX_vx0[1]; double *vx0 = VPFX_vx0; 这样的代码在 C 中编译通过产生一个 warning ,但是在 C++中却无法通过编译( C 使用 clang ,C++使用 clang++)。 现在正在迁移一个使用了上面这种方式调用 avx 的程序,很好奇这样是什么样的用法,已经可以确定的是这样的行为在原始程序中能够正常工作并且产生预期行为。 avx, vpfx_vx0, clang, 使用
@shizukupr __m256d 相当于 double[4],这里 warning 我猜是从 m256d*转换到 double*产生的,C++的类型转换更严格,可以写成 double *vx0 = reinterpret_cast(VPFX_vx0)。 但是注意,AVX 有自己的 load/store 指令和对应的寄存器,例如_mm256_add_pd ,而不能简单 cast 成 double[]并往里面读写。