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

c – SSE2内在函数存储结果在哪里?,第1张

概述我正在向C中的第一步迈进SSE2. Here’s我现在正在学习的内在: __m128d _mm_add_pd (__m128d a, __m128d b) 该文档说:在a和b中添加打包的双精度(64位)浮点元素,并将结果存储在dst中. 但我从未将dst传递给该功能.那么,如果我不传递它,它怎么能添加两个双I传递(通过指针)到结果数组? 描述“将结果存储在dst中”有点误导.内部函数将向量加法的结 我正在向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变量一次“存活”,编译器将不得不溢出/重新加载它们.

总结

以上是内存溢出为你收集整理的c – SSE2内在函数存储结果在哪里?全部内容,希望文章能够帮你解决c – SSE2内在函数存储结果在哪里?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1218674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存