c - 将整数数组加载到 AVX 寄存器中

标签 c simd avx

我目前正在研究 AVX Intrinsics 以并行化我的代码。 至于现在,我想编写一个基准测试,看看我可以获得多少加速。

void randomtable (uint32_t crypto[4][64])
{
    int k = 1;
    for (int i=0;i<4;i++)
    {
        k++;
        for (int j=0;j<64;j++)
        { crypto[i][j]= (k+j)%64; }
    }
}
int main (void)
{
uint32_t crypt0[4][64];
randomtable(crypt0);
__m256i ymm0 = _m256_load_si256(&crypt0[0][0]);
}

我的问题是如何将数组的前 8 个元素加载到 ymm0 中?

我正在用 gcc -mavx -march=native -g -O0 -std=c99 编译

编译错误:错误:使用类型“int”初始化类型“__m256i”时类型不兼容

最佳答案

此行有错字,缺少转换:

__m256i ymm0 = _m256_load_si256(&crypt0[0][0]);

应该是:

__m256i ymm0 = _mm256_load_si256((__m256i *)&crypt0[0][0]);

请注意,如果您想对数据做任何进一步的操作(即整数运算等),您可能需要使用 AVX2,因此您应该使用 -mavx2 进行编译。

关于c - 将整数数组加载到 AVX 寄存器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25764016/

相关文章:

c - 难以理解,尤其是在输入方面

windows - 通用调用约定如何处理 AVX 寄存器?

macos - g++:AVX 没有这样的指令

c - alloca有什么应用?

c - 确定存储输入所需的数组长度

c++ - 针对交叉模式访问的 SIMD 优化

x86 - 为什么我的 AVX2 水平加法功能不比非 SIMD 加法快?

从 SIMD 指令捕获 SIGFPE

c - 在 VS 2017 中编写管道优化的 C AVX 代码

c - mbsctows 计算数组中宽字符的数量