首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCL中的mul_hi函数:“高半”是什么意思?

问OpenCL中的mul_hi函数:“高半”是什么意思?
EN

Stack Overflow用户
提问于 2020-10-26 00:22:55
回答 2查看 78关注 0票数 1

我正在尝试调试我在OpenCL中运行的一个并行程序,在那里我获得了在线代码。我不理解的函数是mul_hi和mad_hi。OpenCL规范本身相当模糊,因为它说mul_hi(a,b)计算a和b的乘积的上半部分。

他们说的高半身是什么意思??

谢谢你的帮助,阿敏

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-26 00:44:49

高半部分指的是32位整数的高16位。您可以单独使用整数的4个字节(或2个半字节)。这对于ARGB颜色来说是这样的,例如,阿尔法、红色、绿色和蓝色的4个字节分别上移了8比特。

代码语言:javascript
复制
int high = ...; // 16-bit range
int low  = ...; // 16-bit range
int x = high<<16|(low&0xFF); // combine high and low: shift high 16 bits left, zero the upper 16 bits from low with bit mask 0xFF and combine the two with logical or

所以c=mul_hi(a,b);计算c=(a*b)>>16;:a和b相乘,结果的高部分被下移并返回。d=mad_hi(a,b,c);等同于d=mul_hi(a,b)+c;

票数 1
EN

Stack Overflow用户

发布于 2021-10-22 08:00:26

mul_hi(a,b)计算a*b的双宽度数据类型计算的上半部分。这意味着它会计算任何溢出原始数据类型的内容。

因此:

代码语言:javascript
复制
char a = 16;                  // 0b0001'0000

assert(a*a == 0);             // 0b0001'0000 * 0b0001'0000 = 0b0000'0000

assert(mul_hi<char>(a,a)==1); // 0b0001'0000 * 0b0001'0000 
                              // = upper half of (0b0000'0001'0000'0000)
                              // = 0b0000'0001

因此,对于任何类型T,mul_hi可能输出值的范围仍然是数据类型的整个范围,而不是@ProjectPhysX建议的half数据类型的范围。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64526014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档