如何在C中使用多SIMD寄存器

问题描述

我想使用多个 ymm 寄存器来加快复制速度。这是我的代码片段。

        __m256 ymm[2];
        ymm[0] = _mm256_load_ps(_src1);
        ymm[1] = _mm256_load_ps(_src2);
        _mm256_store_ps(_dst1,ymm[0]);
        _mm256_store_ps(_dst2,ymm[1]);

但是visual studio的反汇编结果显示我只使用了ymm0寄存器,实际上我想使用更多的寄存器,比如ymm1、ymm2。有什么方法可以指定或给编译器一些提示吗?

        __m256 ymm[2];
        ymm[0] = _mm256_load_ps(_src1);
00007FF6E417EFA9  mov         rax,qword ptr [rbp+10h]  
00007FF6E417EFAD  vmovups     ymm0,ymmword ptr [rax]  
00007FF6E417EFB1  vmovups     ymmword ptr [rbp+0A0h],ymm0  
00007FF6E417EFB9  mov         eax,20h  
00007FF6E417EFBE  imul        rax,rax,0  
00007FF6E417EFC2  vmovups     ymm0,ymmword ptr [rbp+0A0h]  
00007FF6E417EFCA  vmovups     ymmword ptr [rbp+rax+40h],ymm0  
        ymm[1] = _mm256_load_ps(_src2);
00007FF6E417EFD0  mov         rax,qword ptr [rbp+18h]  
00007FF6E417EFD4  vmovups     ymm0,ymmword ptr [rax]  
00007FF6E417EFD8  vmovups     ymmword ptr [rbp+0C0h],ymm0  
00007FF6E417EFE0  mov         eax,20h  
00007FF6E417EFE5  imul        rax,1  
00007FF6E417EFE9  vmovups     ymm0,ymmword ptr [rbp+0C0h]  
00007FF6E417EFF1  vmovups     ymmword ptr [rbp+rax+40h],ymm0  
        _mm256_store_ps(_dst1,ymm[0]);
00007FF6E417EFF7  mov         eax,20h  
00007FF6E417EFFC  imul        rax,0  
00007FF6E417F000  mov         rcx,qword ptr [rbp+20h]  
00007FF6E417F004  vmovups     ymm0,ymmword ptr [rbp+rax+40h]  
00007FF6E417F00A  vmovups     ymmword ptr [rcx],ymm0  
        _mm256_store_ps(_dst2,ymm[1]);
00007FF6E417F00E  mov         eax,20h  
00007FF6E417F013  imul        rax,1  
00007FF6E417F017  mov         rcx,qword ptr [rbp+28h]  
00007FF6E417F01B  vmovups     ymm0,ymmword ptr [rbp+rax+40h]  
00007FF6E417F021  vmovups     ymmword ptr [rcx],ymm0  

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...