gpt4 book ai didi

cuda - 使用 cudaMallocHost 分配内存时,cudaFreeHost 是否关心哪个设备处于事件状态?

转载 作者:行者123 更新时间:2023-12-04 07:42:45 25 4
gpt4 key购买 nike

我正在使用 Cuda SDK 4.0,但遇到了一个问题,我花了 2 天时间才将其缩减为以下代码。

#include <cuda.h>
#include <cuda_runtime.h>
void main (int argc, char ** argv) {

int* test;
cudaError_t err;

err = cudaSetDevice( 1 ); err = cudaMallocHost(&test, 1024*sizeof(int));
err = cudaSetDevice( 0 ); err = cudaFreeHost(test);
}

这在调用 cudaFreeHost 时会引发以下错误:
First-chance exception at 0x000007fefd96aa7d in Test.exe: Microsoft C++ exception: cudaError_enum at memory location 0x0022f958..

错误值为 cudaErrorInvalidValue
此变体发生相同的错误:
err = cudaSetDevice(   0   ); err = cudaMallocHost(&test, 1024*sizeof(int));    
err = cudaSetDevice( 1 ); err = cudaFreeHost(test);

以下变体不会引发错误:
err = cudaSetDevice(   0   ); err = cudaMallocHost(&test, 1024*sizeof(int));    
err = cudaSetDevice( 0 ); err = cudaFreeHost(test);


err = cudaSetDevice(   1   ); err = cudaMallocHost(&test, 1024*sizeof(int));    
err = cudaSetDevice( 1 ); err = cudaFreeHost(test);

我的印象是,如果您想在特定 GPU 上分配内存,您只需要调用 cudaSetDevice。在上面的例子中,我只在 CPU 上分配固定内存。

这是一个错误还是我错过了手册中的某些内容?

最佳答案

我发现了问题。 cudaHostAlloc 和 cudaMallocHost 不一样 .

对于遇到此问题的任何人,解决方案是使用

cudaHostAlloc(&test, 1024*sizeof(int),cudaHostAllocPortable);

代替
cudaMallocHost(&test, 1024*sizeof(int));

关于cuda - 使用 cudaMallocHost 分配内存时,cudaFreeHost 是否关心哪个设备处于事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591577/

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