我目前正在开发一个需要存储和处理大量变量的应用程序(浮动约 4gb)
由于单个变量的精度不那么重要(我知道它们是有界的),我看到我可以使用 OpenCL 的一半而不是浮点数,因为这确实会减少内存量。
我的问题是双重的。
使用 half 而不是 float 是否会对性能造成影响(我会为浮动操作构建图像图形卡)
在计算中混合浮点数和半数会影响性能吗?(即,浮动乘以一半。)
此致 Andreas Falkenstrøm Mieritz
ARM CPU 和 GPU 在其 ALU 中具有原生支持,half
因此您将获得接近双倍的速度,并大幅节省能源消耗。编辑: PowerVR GPU 也是如此。
桌面硬件仅支持half
加载/存储和纹理单元,AFAIK。即便如此,我希望half
纹理在任何 GPU 上的性能都优于float
纹理或缓冲区。特别是如果您可以巧妙地使用纹理过滤。
OpenCL 内核几乎总是受内存速度或 pci 速度限制。如果您要将相当大的数据块转换为半浮点数,这将能够更快地传输您的值。在任何平台/设备上几乎可以肯定更快。
就性能而言,half 很少比 float 差。我相当肯定任何支持半数的设备都会像使用浮点数一样快地进行计算。同样,即使这里有轻微的开销,您也将在您的超长传输时间中弥补它。