gpt4 book ai didi

casting - CUDA 和 cuBLAS 中的类型转换

转载 作者:行者123 更新时间:2023-12-02 18:33:27 25 4
gpt4 key购买 nike

我正在用cuda编写一个程序,我试图减少数据传输的开销。我使用 cuBLAS 库进行矩阵乘法,我必须发送 30.000.000 个数字,其值范围为 0-255。

现在我将它们作为 float 发送,因为我希望我的最终产品是一个 float ,考虑到它们可以装入一个字节,这最终会变得相当昂贵。

有没有办法在使用 cuBLAS 库或任何其他快速数学库时将它们作为字节发送并将它们类型转换为 float ?或者告诉 GPU 以某种方式将它们对齐为 float ?

最佳答案

您可以从主机到设备cudaMemcpy一个unsigned char数组,还可以使用在设备上分配一个float数组>cudaMalloc。然后编写一个自定义内核,将字节数组复制到 float 组:

__global__ void byteToFloat(float *out, unsigned char* in, int n)
{
int i = threadIdx.x + blockIdx.x * blockDim.x;

for (; i < n; i += gridDim.x * blockDim.x)
out[i] = in[i];
}

如果主机上的数据已经存储为 float ,那么这可能比复制 float 慢。尝试一下看看。但是,如果您的数组已经是 unsigned char 类型,那么您无论如何都需要在某处进行此转换,因此上述方法可能会很有效。

请注意,为了获得最佳性能,如果可能的话,您可能应该尝试重叠复制和计算(但这超出了问题的范围:有关cudaMemcpyAsync的信息,请参阅 CUDA 最佳实践指南和编程指南。)

关于casting - CUDA 和 cuBLAS 中的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9153861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com