gpt4 book ai didi

cuda - 使用cudaMalloc分配矩阵

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

我使用 cudaMalloc 和 cudaMemcpy 分配一个矩阵并将向量数组复制到其中,如下所示:

float **pa;    
cudaMalloc((void***)&pa, N*sizeof(float*)); //this seems to be ok
for(i=0; i<N; i++) {
cudaMalloc((void**) &(pa[i]), N*sizeof(float)); //this gives seg fault
cudaMemcpy (pa[i], A[i], N*sizeof(float), cudaMemcpyHostToDevice); // also i am not sure about this
}

我的指示有什么问题吗?提前致谢

附注A[i] 是一个向量

<小时/>

现在我正在尝试将矩阵从设备复制到主机的矩阵:

假设我的设备中有 **pc,而 **pgpu 在主机中:

cudaMemcpy (pgpu, pc, N*sizeof(float*), cudaMemcpyDeviceToHost);
for (i=0; i<N; i++)
cudaMemcpy(pgpu[i], pc[i], N*sizeof(float), cudaMemcpyDeviceToHost);

= 错了....

最佳答案

pa位于设备内存中,因此 &(pa[i])没有做你所期望的事情。这会起作用

float **pa;
float **pah = (float **)malloc(pah, N * sizeof(float *));
cudaMalloc((void***)&pa, N*sizeof(float*));
for(i=0; i<N; i++) {
cudaMalloc((void**) &(pah[i]), N*sizeof(float));
cudaMemcpy (pah[i], A[i], N*sizeof(float), cudaMemcpyHostToDevice);
}
cudaMemcpy (pa, pah, N*sizeof(float *), cudaMemcpyHostToDevice);

即。在主机内存中构建指针数组,然后将其复制到设备。 我不确定您希望从 A 中读到什么内容,但我怀疑内心 cudaMemcpy可能没有按照你写的那样做。

预先警告,从性能角度来看,指针数组在 GPU 上并不是一个好主意。

关于cuda - 使用cudaMalloc分配矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5885195/

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