【问题标题】:CUDA - dynamic shared memory triggers thrust::system::system_errorCUDA - 动态共享内存触发推力::system::system_error
【发布时间】:2016-03-23 10:51:53
【问题描述】:

我刚开始通过 Udacity 学习 CUDA 编程。即使尝试使用动态共享内存,我也收到以下错误。

CUDA error at: main.cpp:55
invalid argument cudaGetLastError()
terminate called after throwing an instance of thrust::system::system_error'
what():  unload of CUDA runtime failed

We are unable to execute your code. Did you set the grid and/or block size correctly?

我搜索了很多,但仍然不知道这里哪里出错了。有趣的是,如果我将最后两行更改为

    compact_kernel<<<numBlocks, numThreadsPerBlock, sizeof(int)*1000>>>(d_inputVals, d_inputPos, d_outputVals, d_outputPos, numElems, 0);   
    compact_kernel<<<numBlocks, numThreadsPerBlock, sizeof(int)*1000>>>(d_inputVals, d_inputPos, &d_outputVals[numElems/2], &d_outputPos[numElems/2], numElems, 1); 

,运行代码时没有抛出错误。但是,它没有任何意义,因为动态内存分配的空间不应限制为常量。也许这不是我的代码,而是 Udacity 上的设置?我写的代码如下。任何帮助将不胜感激。

__global__ void compact_kernel(unsigned int* const d_inputVals,
    unsigned int* const d_inputPos,
    unsigned int* const d_outputVals,
    unsigned int* const d_outputPos,
    const size_t numElems,
    const size_t refBit)
{
    const size_t tid = blockIdx.x * blockDim.x + threadIdx.x;

    // predicate
    const bool predicate = (d_inputVals[tid] & 1) == refBit;
    extern __shared__ int s[];   
}

void your_sort(unsigned int* const d_inputVals,
    unsigned int* const d_inputPos,
    unsigned int* const d_outputVals,
    unsigned int* const d_outputPos,
    const size_t numElems)
{ 
    const size_t numBlocks = numElems/512;
    const size_t numThreadsPerBlock = 256;
    compact_kernel<<<numBlocks, numThreadsPerBlock, sizeof(int)*numElems>>>(d_inputVals, d_inputPos, d_outputVals, d_outputPos, numElems, 0);   
    compact_kernel<<<numBlocks, numThreadsPerBlock, sizeof(int)*numElems>>>(d_inputVals, d_inputPos, &d_outputVals[numElems/2], &d_outputPos[numElems/2], numElems, 1); 

}`

编辑: numElems 的值为 220480。这个数字对于动态内存分配来说是否太大?

【问题讨论】:

  • numElems的值是多少?
  • 共享内存限制为每个线程块 48 KB。您的数量超出了此限制。
  • @havogt 非常感谢。这就对了。 :D 你能发表你的评论作为答案吗?
  • “谢谢”应该去@talonmies,因为他已经暗示了这个答案。

标签: c++ cuda shared-memory


【解决方案1】:

根据programming guide,对于所有当前 CUDA 设备,共享内存限制为每个线程块 48 KB

【讨论】:

    猜你喜欢
    • 2014-07-01
    • 2014-09-16
    • 2011-06-29
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2013-10-12
    相关资源
    最近更新 更多