Math 16位产品吞吐量是否可以在没有具体说明的情况下加倍?

Math 16位产品吞吐量是否可以在没有具体说明的情况下加倍?,math,computer-science,Math,Computer Science,假定支持32位产品的特定CPU。该问题的应用是内存受限的,因此假设精度损失是有益的 我有两个32位的整数a和b,4个16位的整数c1,c2,d1,d2 让 从数学上讲,如果我只得到c,我可以从c得到c1*c2和d1*d2,而不用再计算它们一次,同时保持乘积的时间性能不太差 请注意,在现代CPU或GPU中,特定指令可能支持16位乘法。本讨论仅针对一般概念 是32位乘法的结果→ 64位或32位→ 32位?假设程序位于32位操作系统上。(提示:尝试分发产品a×b=(2⁶×c₁+D₁)×(2¹⁶×c₂+

假定支持32位产品的特定CPU。该问题的应用是内存受限的,因此假设精度损失是有益的

我有两个32位的整数a和b,4个16位的整数c1,c2,d1,d2 让

从数学上讲,如果我只得到c,我可以从c得到c1*c2和d1*d2,而不用再计算它们一次,同时保持乘积的时间性能不太差


请注意,在现代CPU或GPU中,特定指令可能支持16位乘法。本讨论仅针对一般概念

是32位乘法的结果→ 64位或32位→ 32位?假设程序位于32位操作系统上。(提示:尝试分发产品
a×b=(2⁶×c₁+D₁)×(2¹⁶×c₂+D₂))在这种情况下,可能需要64位乘法。这将使64位乘积得到16位乘积。如果操作系统不支持64位乘积,或者如果应用程序用于GPU,计算效率可能是:1)使用两条指令加上四个16->32约定,直接32位mul得到c1*c2,d1*d2。2)64位mul加上16->64转换,加上两班操作。因为在某些硬件(如Nvidia Tesla)中,64位mul效率可能是32位mul的一半,或者可能是性能的1/8(如某些Nvidia GTX)。这可能不是最好的解决方案。
c = a*b
 a = 2^16 * c1 + d1
 b = 2^16 * c2 + d2