C++-如何在C++中进行单指令多数据流计算?

发布于 2016-12-24 00:03:51 字数 77 浏览 1249 评论 2

我们x86体系的CPU指令集大多都是SIMD指令,在汇编中可以直接操作寄存器进行单指令多数据流的编程,我想知道在C++如何不依赖寄存器实现?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

归属感 2017-09-04 00:57:16

基本方法是这样的,你可以不用汇编的方式而用C的方式调用这些指令,VC++提供了一些内置的inline函数,叫做Compiler Intrinsics,直接用高级语言使用这些指令。可参考http://msdn.microsoft.com/zh-cn/library/bb892950.aspx

虐人心 2017-01-23 11:46:07

一般的代码: (当然,输出数组也可以是另外一个数组,下同)

view plain
uint8 a[10000];
for (int i=0;i<10000;++i)
a[i]=a[i]>>1;

使用SIMD思路的代码(4路数据流同时计算):
view plain
uint8 a[10000];
uint32* a32=(uint32*)a; //实际代码可能需要考虑内存访问对齐和边界处理问题,下同
for (int i=0;i<2500;++i){
uint32 c=a32[i]&0xFEFEFEFE;
a32[i]=c>>1;
}

这种是更高效的处理方式。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文