首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CUDA 6管理内存的推力问题

CUDA 6管理内存的推力问题
EN

Stack Overflow用户
提问于 2014-07-10 00:11:48
回答 1查看 494关注 0票数 1

我遇到了一个问题,在尝试使用cudaMallocManaged()和在同一个CUDA 6应用程序推力中插入失败时,即使推力没有使用任何托管内存。仅仅拥有一个未使用的托管变量就足以导致推力失败。我已经创建了以下复制器,我正在运行CUDA6.0的NVIDIA TK1上进行测试:

代码语言:javascript
运行
复制
#include "thrust/device_ptr.h"
#include "thrust/sort.h"

__global__ void calculate_hash(uint *hash_values, uint *particle_ids, int length)
{
    int i = blockIdx.x*blockDim.x + threadIdx.x;

    if(i >= length)
        return;

    hash_values[i] =  1;
    particle_ids[i] = i;
}

void hash_particles_gpu(uint *d_hash_values, uint *d_particle_ids, int length)
{
    int block_size = 256;
    int num_blocks = ceil(length/(float)block_size);

    calculate_hash<<<num_blocks, block_size>>>(d_hash_values, d_particle_ids, length);  

    cudaDeviceSynchronize();

    thrust::device_ptr<uint> keys(d_hash_values);
    thrust::device_ptr<uint> values(d_particle_ids);
    thrust::sort_by_key(keys, keys+length, values);
}

int main(int argc, char *argv[])
{
    int length = 15;
    int bytes;

    #ifdef BROKE
    int *m_int;
    cudaMallocManaged((void**)&m_int, sizeof(int));
    #endif

    // Allocate uint hash value array
    bytes = length*sizeof(unsigned int);
    unsigned int * hash_values;
    cudaMalloc((void**)&hash_values, bytes);    

    // Allocate uint particle ID array
    bytes = length*sizeof(unsigned int);
    unsigned int *particle_ids;
    cudaMalloc((void**)&particle_ids, bytes);

    hash_particles_gpu(hash_values, particle_ids, length);
}

当我编译和运行:

代码语言:javascript
运行
复制
$ nvcc -DBROKE -DTHRUST_DEBUG example.cu -o broke.exe
$ nvcc -DTHRUST_DEBUG example.cu -o fixed.exe
$ ./fixed.exe
$ ./broke.exe
terminate called after throwing an instance of 'thrust::system::system_error'
  what():  synchronize: RakingReduction: unknown error
Abort

在此之前,我已经检查过了,以确保没有任何错误,并且在调用sort_by_key之前一切看起来都很好。知道怎么回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-11 23:51:45

谢谢你的评论。我刷新了Tegra的最新Linux ( 19.3 ),现在它可以使用Cuda 6.0了。看上去NVIDIA与L4T 19.2有一个驱动问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24665615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档