主机函数

时间:2017-07-22 14:20:44

标签: cuda gpu nvidia

当我运行需要opencv和CUDA支持的“Gipuma”项目时,问题就出现了。我的视频卡是GTX 750Ti,带有CUDA 8.0。

通过主机函数访问“__managed__ int”变量时出现“访问冲突”。通常,“__managed __”变量可以通过设备和主机读取和写入。我很困惑,我想可能有配置有问题吗?

变量在“gipuma.cu”中声明:

#ifndef SHARED_HARDCODED
__managed__ int SHARED_SIZE_W_m;
__constant__ int SHARED_SIZE_W;
__managed__ int SHARED_SIZE_H;
__managed__ int SHARED_SIZE = 0;
__managed__ int WIN_RADIUS_W;
__managed__ int WIN_RADIUS_H;
__managed__ int TILE_W;
__managed__ int TILE_H;
#endif  

和“gipuma.cu”中的主机功能:

int runcuda(GlobalState &gs)
{
    WIN_RADIUS_W = 0;//it gets wrong here,access violation.
    printf("test is %d\n", WIN_RADIUS_W);
    printf("Run cuda\n");

    if(gs.params->color_processing)
        gipuma<float4>(gs);
    else
        gipuma<float>(gs);

    return 0;
}

和错误消息:

0x000000013FA1DCBD has an unhandled exception (in gipuma.exe): 0xC0000005: An access violation occurred when writing to location 0x0000000000000000.

1 个答案:

答案 0 :(得分:1)

在计算能力之前的设备上6.0主机和设备可能无法同时访问__managed__内存,因为the driver needs an opportunity to programmatically copy the data between host and device

所以,正如Robert Crovella在他的评论中已经指出的那样,你需要在内核调用之后插入对cudaDeviceSynchronize()的调用,然后才能再次从主机访问__managed__内存。