OpenCL 24位mul_hi内置函数

OpenCL 24位mul_hi内置函数,opencl,long-integer,unsigned-integer,Opencl,Long Integer,Unsigned Integer,我用我的GPU执行很多整数运算mul24()和mad24()对于获得显著的整数性能提升非常有用。不幸的是,我的一些内核需要超过24位的整数,这迫使我使用编译器生成的代码,这并不总是最优的。如果我可以访问相当于mul\u hi()的硬件指令,但对于24位整数,将其命名为mul24\u hi(),我将从我的GPU获得更好的性能 除了24位整数或任何模式/惯用语/变通方法来可靠地指示编译器发出指令外,是否有任何等效于mul\u hi()的指令?至少对于AMD GCN GPU,这样的指令肯定存在(uin

我用我的GPU执行很多整数运算
mul24()
mad24()
对于获得显著的整数性能提升非常有用。不幸的是,我的一些内核需要超过24位的整数,这迫使我使用编译器生成的代码,这并不总是最优的。如果我可以访问相当于
mul\u hi()
的硬件指令,但对于24位整数,将其命名为
mul24\u hi()
,我将从我的GPU获得更好的性能


除了24位整数或任何模式/惯用语/变通方法来可靠地指示编译器发出指令外,是否有任何等效于
mul\u hi()
的指令?

至少对于AMD GCN GPU,这样的指令肯定存在(uint的V\u mul\u hi\u 32\u U24),尽管我还没有看到任何关于如何生成它的解决方案,例如-您是否尝试过“显而易见”的方法,即使用显式截断的源操作数执行ulong乘法?e、 g.
ulong结果48=(ulong)(0xffffff&a)*(0xffffff&b)Clang和GCC倾向于识别这种生成32位乘法运算并获得64位结果的模式。我想知道,例如LLVM是否会对24->48位MUL执行同样的操作。@pmdj我有一个AMD GCN GPU。编译器最终会识别建议的模式,但不会发出所需的指令。我知道它正在识别它,因为当我用
0xFFFF
屏蔽操作数时,如果我要求乘法的高32位字,它就会变成noop。但是当我用
0xFFFFFF
屏蔽它们时,它会发出32位
mul_hi()
,而不是24位1.dam。试着直接联系AMD,我听说他们很擅长响应。FP核心不能被模仿吗?它们是空闲的吗?@huseyintugrulbuyukisik我不理解这个问题,但是是的,我所有的整数GPU功能用例都不使用浮点。