gpt4 book ai didi

c++ - 多 GPU 环境中单应用线程的 CUDA 5.0 上下文管理

转载 作者:行者123 更新时间:2023-11-28 07:46:14 24 4
gpt4 key购买 nike

网络上的大多数教程、指南、书籍和问答似乎都涉及 CUDA 3 和 4.x,所以这就是为什么我专门询问 CUDA 5.0。对于这个问题...

我想为具有两个 CUDA 设备的环境编程,但只使用一个线程,以使设计简单(特别是因为它是原型(prototype))。我想知道以下代码是否有效:

float *x[2];
float *dev_x[2];

for(int d = 0; d < 2; d++) {
cudaSetDevice(d);
cudaMalloc(&dev_x[d], 1024);
}

for(int repeats = 0; repeats < 100; repeats++) {
for(int d = 0; d < 2; d++) {
cudaSetDevice(d);
cudaMemcpy(dev_x[d],x[d],1024,cudaMemcpyHostToDevice);

some_kernel<<<...>>>(dev_x[d]);

cudaMemcpy(x[d],dev_x[d],1024,cudaMemcpyDeviceToHost);
}
cudaStreamSynchronize(0);
}

我想具体了解测试之前的 cudaMalloc(...) 是否持续存在,即使 cudaSetDevice() 发生在相同的情况下线。另外,我想知道与上下文相关的对象是否也会发生同样的情况,例如 cudaEvent_tcudaStream_t

我问它是因为我有一个这种风格的应用程序不断出现一些映射错误,如果缺少内存泄漏或错误的 API 使用,我找不到它是什么。

注意:在我的原始代码中,我会检查每个 CUDA 调用。为了代码的可读性,我没有把它放在这里。

最佳答案

这只是一个拼写错误吗?

for(int d = 0; d < 2; d++) {
cudaSetDevice(0); // shouldn't that be 'd'
cudaMalloc(&dev_x, 1024);
}

请检查所有API调用的返回值!

关于c++ - 多 GPU 环境中单应用线程的 CUDA 5.0 上下文管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14838571/

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