Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 从多个CPU线程调用CUDA内核(使用共享内存)_Multithreading_Cuda_Cpu_Shared Memory_Reduction - Fatal编程技术网

Multithreading 从多个CPU线程调用CUDA内核(使用共享内存)

Multithreading 从多个CPU线程调用CUDA内核(使用共享内存),multithreading,cuda,cpu,shared-memory,reduction,Multithreading,Cuda,Cpu,Shared Memory,Reduction,我编写了一个cuda内核,它使用共享内存执行缩减,以便在数组中找到最小值。这与此处的著名示例非常相似: 当我从单个CPU线程运行它时,它可以很好地处理每个块的任意数量的CUDA线程(最多可达我的设备的最大值:1024) 当我从一些(20)个CPU线程运行它时,每个块(256)有足够少的CUDA线程,它工作正常 但是一旦我增加了CUDA线程的数量和多CPU线程,一切都崩溃了 我尝试删除内核中执行缩减的行(因此在数组上只保留一些操作,但CUDA线程之间没有任何通信),并且它可以很好地处理任意数量的

我编写了一个cuda内核,它使用共享内存执行缩减,以便在数组中找到最小值。这与此处的著名示例非常相似:

当我从单个CPU线程运行它时,它可以很好地处理每个块的任意数量的CUDA线程(最多可达我的设备的最大值:1024)

当我从一些(20)个CPU线程运行它时,每个块(256)有足够少的CUDA线程,它工作正常

但是一旦我增加了CUDA线程的数量和多CPU线程,一切都崩溃了

我尝试删除内核中执行缩减的行(因此在数组上只保留一些操作,但CUDA线程之间没有任何通信),并且它可以很好地处理任意数量的CPU线程中每个块的任意数量的CUDA线程

你知道我的问题来自哪里吗?有没有办法解决这个问题?提前感谢您的帮助

PS:我使用的是一台GTX650


PS2:对不起,如果我的英语能力有点差,那不是我的母语……

Linux还是windows?您是否在主机代码中对所有cuda调用执行cuda错误检查?如果您可以发布一个完整的、可编译的示例,说明您正在做什么,并附上执行指令以使其崩溃,那就太好了。如果没有代码,我猜当您启动多个线程时,它们无法获得GPU,并且在没有分配GPU的情况下继续运行。为CUDA设备初始化放置一些断言并检查它。对于第二个测试(当您删除它工作的内核的某一行时),编译器可能会将内核优化为空内核,因为您可能没有写回全局内存。因此,不会发生错误。感谢您的回答,主机代码中的所有my cuda调用都是使用cutil库中的宏cuda_SAFE_调用或CUT_SAFE_调用执行的。正如您所建议的那样,我尝试将assert(cudaGetDevice(&device)==cudaSuccess)放入;就在执行内核之前,它传递了断言,但内核中还是崩溃了。我目前无法制作一个简单的示例来重现相同的错误,因为我使用Win32线程,并且我不能在cuda项目中包含MFC。在我的应用程序中,我将cuda suff构建在一个dll中,主要是一个使用此dll的win32控制台应用程序。该错误是否由共享内存不足引起?如果所有Win32线程都运行cuda内核,并且如果所有内核都在共享内存中创建自己的阵列实例,那么会导致共享内存溢出吗?还是我完全错了?如果是这样的话,你知道怎么解决吗?提前谢谢你的帮助