gpt4 book ai didi

c++ - 使用cuda直接访问全局内存

转载 作者:太空宇宙 更新时间:2023-11-04 13:33:11 25 4
gpt4 key购买 nike

q1-可以说我已经使用 cudaMemCpyAsync 通过 stream1 将一个数组复制到设备上;我能否在不同的流中访问该数组的值,比如 2?

cudaMemcpyAsync(da,a,10*sizeof(float),cudaMemcpyHostToDevice,stream[0]);
kernel<<<n,1,0,stream[0]>>>(da);
kernel<<<n,1,0,stream[1]>>>(da){//calculation involving da} ;

q2-我是否必须在内核调用中包含指向全局内存数组的指针作为参数?我不能直接从内核访问它吗?

__global__ void kernel() {out[threadidX.x]=2*input[threadIdx.x];  }

代替

__global__ void kernel(float * out,float input){out[threadidX.x]=2*input[threadIdx.x];  }

q3-可以说我在一个函数中有所有 malloc 和 memcpy,在另一个函数中有内核调用,在另一个函数中有 cuda 免费,当我调用这些函数时,它们给出了无效参数错误?

最佳答案

q1- lets say i have copy one array onto device through stream1 using cudaMemCpyAsync; would i be able to access the values of that array in different stream say 2?

是的,数组 da 可以在您展示的两个内核中访问。然而,一个重要的问题是前面的 cudaMemcpyAsync 操作是否完成(或保证完成):

cudaMemcpyAsync(da,a,10*sizeof(float),cudaMemcpyHostToDevice,stream[0]);
kernel<<<n,1,0,stream[0]>>>(da);
kernel<<<n,1,0,stream[1]>>>(da){//calculation involving da} ;

在上述第一个内核启动的情况下,cudaMemcpyAsync 操作保证完成。在第二种情况下,事实并非如此。发出到相同流的操作保证被序列化,即按发出顺序执行。这保证了 cudaMemcpyAsync 操作将在内核启动到同一流之前完成。发布到不同流的 CUDA 事件可能会重叠,因此不能保证内核发布到与前面的 cudaMemcpyAsync 操作不同的流会等到该操作完成。

q2- would i have to include pointer to global memory array as argument in kernel call? can't i directly access it from the kernel?

这似乎是一个完全独立的问题。 动态分配 全局内存数组(即那些使用 cudaMalloc 分配的数组)将要求您将指向分配给内核的指针传递给内核,如果您想在内核中使用该数据.但是静态分配的数组:

__device__ int data[SIZE];

具有文件作用域,您不需要(也不应该)将data 指针作为内核参数传递。 data 指针可以直接在内核中使用,而无需将其作为内核参数显式传递。 (请注意,您不使用 cudaMemcpy 来填充这样的数组。)

q3- lets say i have all malloc and memcpy in one function and kernel call in another function and cuda free in another when i call these function they gave invalid argument error?

除非您提供MCVE,否则我不认为可以回答这个问题。 .所以 expects您为“1.寻求调试帮助的问题(“为什么这段代码不起作用?”)”提供 MCVE

关于c++ - 使用cuda直接访问全局内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30694054/

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