【问题标题】:CUDA memory does not return to hostCUDA 内存不返回主机
【发布时间】:2013-03-01 02:55:49
【问题描述】:

好的,我正在尝试为我以 15 美元购买的“新”FX 570 学习 CUDA;D 现在在代码中没有错误,array1_host 以正确的值开始,但是当我将内存从设备复制到主机时,值保持不变。 如果我取消第二个内核调用(在这个项目中尝试多个内核),也会发生同样的事情我很困惑,所以感谢您提供的任何帮助:)

#include <cuda_runtime.h>
#include <iostream>

#pragma comment (lib, "cudart")

#define N 5000

__global__ void addArray(float* a, float* b)
{
   a[threadIdx.x] += b[threadIdx.x];
}
__global__ void timesArray(float* a, float* b)
{
   a[threadIdx.x] *= b[threadIdx.x];
}

int main(){
   float array1_host[N];
   float array2_host[N];

   float *array1_device;
   float *array2_device;

   cudaError_t err;

   for(int x = 0; x < N; x++){
       array1_host[x] = (float) x * 2;
       array2_host[x] = (float) x * 6;
   }

   err = cudaMalloc((void**)&array1_device, N*sizeof(float));
   err = cudaMalloc((void**)&array2_device, N*sizeof(float));

   err = cudaMemcpy(array1_device, array1_host, N*sizeof(float),   cudaMemcpyHostToDevice);
   err = cudaMemcpy(array2_device, array2_host, N*sizeof(float), cudaMemcpyHostToDevice);

   dim3 dimBlock( N );
   dim3 dimGrid ( 1 );

   addArray<<<dimGrid, dimBlock>>>(array1_device, array2_device); 
   timesArray<<<dimGrid, dimBlock>>>(array1_device, array2_device);

   err = cudaMemcpy(array1_host, array1_device, N*sizeof(float), cudaMemcpyDeviceToHost);

   cudaFree(array1_device);
   cudaFree(array2_device);

   std::cout << cudaGetErrorString(err) << "\n\n\n\n\n\n";
   std::cout << array1_host;


   cudaDeviceReset();

   system("pause");
   return 0;
}

【问题讨论】:

  • 一些提示:如果有人解决了你的问题,你应该接受他的回答(绿色勾号,标记)。这将为您增加 2 点声望点,为提供帮助的人增加 15 点。

标签: c++ cuda gpu gpgpu nvidia


【解决方案1】:

您有一个错误,因为 N 是 5000,但块中的 threds 有限制 - 这取决于计算能力 link to features on wiki
试试这个代码:

#define K 200

....

dim3 dimBlock( K );
dim3 dimGrid ( N/K );

要调试您的代码,您可以在每次调用内核或其他函数后使用cudaGetLastError() 来了解错误的位置exaple about CUDA errors

【讨论】:

  • 谢谢你,这正是问题所在
猜你喜欢
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
  • 2014-06-18
  • 2017-10-29
  • 2021-11-02
  • 1970-01-01
相关资源
最近更新 更多