小编Mig*_*ggy的帖子

在每个主机线程上创建cuda流(多线程CPU)

我有一个多线程 CPU,我希望 CPU 的每个线程都能够启动单独的 CUDA 流。单独的 CPU 线程将在不同的时间执行不同的操作,因此它们有可能不会重叠,但如果它们确实同时启动 CUDA 内核,我希望它继续同时运行。

我很确定这是可能的,因为在 CUDA 工具包文档第 3.2.5.5 节中。它说“流是命令序列(可能由不同的主机线程发出)......”

所以如果我想实现这个我会做类似的事情

void main(int CPU_ThreadID) {
    cudaStream_t *stream;
    cudaStreamCreate(&stream);

    int *d_a;
    int *a;
    cudaMalloc((void**)&d_a, 100*sizeof(int));
    cudaMallocHost((void**)&a, 100*8*sizeof(int));
    cudaMemcpyAsync(d_a, a[100*CPU_ThreadID], 100*size(int), cudaMemcpyHostToDevice, stream);
    sum<<<100,32,0,stream>>>(d_a);

    cudaStreamDestroy(stream);
}
Run Code Online (Sandbox Code Playgroud)

这只是一个简单的例子。如果我知道只有 8 个 CPU 线程,那么我知道最多会创建 8 个流。这是执行此操作的正确方法吗?如果两个或多个不同的主机线程大约在同一时间到达此代码,这是否会同时运行?谢谢你的帮助!

编辑:

我更正了代码块中的一些语法问题,并按照 sgar91 的建议放入 cudaMemcpyAsync。

c c++ multithreading cuda

5
推荐指数
1
解决办法
6585
查看次数

标签 统计

c ×1

c++ ×1

cuda ×1

multithreading ×1