cudaMemcpy不复制任何数据

cudaMemcpy不复制任何数据,cuda,Cuda,我使用cuda gdb检查dcost的值,发现cudaMemcpy没有进行复制,即使它返回cudaSuccess 这是我的密码: #include<stdint.h> int main(){ int64_t nvtx_scale = ((int64_t)1)<<14; uint64_t* cost = (uint64_t*)malloc(sizeof(uint64_t)*nvtx_scale); for(int64_t i=0; i < nvtx_scale;

我使用cuda gdb检查dcost的值,发现cudaMemcpy没有进行复制,即使它返回
cudaSuccess

这是我的密码:

#include<stdint.h>

int main(){
int64_t nvtx_scale = ((int64_t)1)<<14;

uint64_t* cost = (uint64_t*)malloc(sizeof(uint64_t)*nvtx_scale);

for(int64_t i=0; i < nvtx_scale; i++)
    cost[i] = uint64_t(-1);

uint64_t* dcost;
cudaMalloc(&dcost, nvtx_scale*sizeof(uint64_t));

cudaError_t err;

err = cudaMemcpy(dcost, cost, sizeof(uint64_t)*nvtx_scale, cudaMemcpyHostToDevice);
return 0;
}
#包括
int main(){

int64_t nvtx_scale=((int64_t)1)以下代码的稍微修改版本:

#include<stdint.h>
#include<iostream>

int main(){
    int64_t nvtx_scale = ((int64_t)1)<<14;

    uint64_t* cost = (uint64_t*)malloc(sizeof(uint64_t)*nvtx_scale);

    for(int64_t i=0; i < nvtx_scale; i++)
        cost[i] = uint64_t(123456789);

    uint64_t* dcost;
    cudaMalloc(&dcost, nvtx_scale*sizeof(uint64_t));
    cudaMemcpy(dcost, cost, sizeof(uint64_t)*nvtx_scale, cudaMemcpyHostToDevice);

    memset(cost, 0, sizeof(uint64_t)*nvtx_scale);
    cudaMemcpy(cost, dcost, sizeof(uint64_t)*nvtx_scale, cudaMemcpyDeviceToHost);

    for(int i=0; i<10; i++) {
        std::cout << i << " " << cost[i] << std::endl;
    }

    return 0;
}

如果无法重现此问题,则说明CUDA安装有问题。

除非您能显示重现此问题的简短完整代码,否则我相信没有人能告诉您可能发生了什么wrong@talonmies完成:我没有做任何其他的事情,我觉得没有必要添加完整的代码你说你发布的代码不复制任何数据。但是你怎么知道呢?我在代码中没有看到任何可以确认复制是否有效的东西。这里可能也有使用错误。我不认为cuda gdb中的print命令可以用于在单步执行主机代码时显示设备变量的内容。我相信我必须停止打印命令之前的n个设备(内核)代码可用于显示设备上的数据内容。可能您正在使用打印命令(cuda gdb会话输出可能是问题的有用补充)显示变量。由于您发布的代码没有设备内核,因此您不可能在设备代码中。请尝试创建一个简单的内核,将其添加到代码中,在内核中设置断点,然后尝试检查设备内存。您可能还想查看。您是对的,我能够重现此情况,问题在于cuda gdb我正在打印valdcost[0]的ue,它显示0,我不知道为什么会发生这种情况。您可以尝试使用cuda调试器在cudaMemcpy之后打印dcost的值吗?无论如何,谢谢
C:\Users\talonmies>nvcc cudacopy.cu
cudacopy.cu
   Creating library a.lib and object a.exp

C:\Users\talonmies>cuda-memcheck a.exe
========= CUDA-MEMCHECK
0 123456789
1 123456789
2 123456789
3 123456789
4 123456789
5 123456789
6 123456789
7 123456789
8 123456789
9 123456789
========= ERROR SUMMARY: 0 errors