加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – SSE2内在函数存储结果在哪里?

发布时间:2020-12-16 10:15:03 所属栏目:百科 来源:网络整理
导读:我正在向C中的第一步迈进SSE2. Here’s我现在正在学习的内在: __m128d _mm_add_pd (__m128d a,__m128d b) 该文档说:在a和b中添加打包的双精度(64位)浮点元素,并将结果存储在dst中. 但我从未将dst传递给该功能.那么,如果我不传递它,它怎么能添加两个双I传递
我正在向C中的第一步迈进SSE2. Here’s我现在正在学习的内在:

__m128d _mm_add_pd (__m128d a,__m128d b)

该文档说:在a和b中添加打包的双精度(64位)浮点元素,并将结果存储在dst中.

但我从未将dst传递给该功能.那么,如果我不传递它,它怎么能添加两个双I传递(通过指针)到结果数组?

解决方法

描述“将结果存储在dst中”有点误导.内部函数将向量加法的结果作为__m128d类型的值返回.

__m128d arg1 = ...;
__m128d arg2 = ...;
__m128d result = _mm_add_pd(arg1,arg2);

如果您调用变量dst而不是result,那么您将拥有符合描述的代码. (但你可以随意调用它.)

底层SSE指令ADDPD将操作结果存储在其选择的XMM寄存器中.编译器将进行寄存器分配(甚至存储/重载C向量变量,如果它用完了寄存器,或者围绕一个破坏向量寄存器的函数调用).

Intrinsics对C变量进行操作,就像使用int或float类型一样.通常这些编译为对寄存器进行操作的asm指令(或者如果它结合了加载和添加内部函数,则可能是内存源操作数),但将所有这些留给编译器是使用内在函数的关键.

您确实希望编写代码以便可以高效编译:如果超过16个__m128变量一次“存活”,编译器将不得不溢出/重新加载它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读