相关疑难解决方法(0)

在CUDA中使用全局与常量内存

嘿那里,我有以下代码:

#if USE_CONST == 1
    __constant__ double PNT[ SIZE ];    
#else
    __device__ double *PNT;
#endif
Run Code Online (Sandbox Code Playgroud)

稍后我有:

#if USE_CONST == 0
    cudaMalloc((void **)&PNT, sizeof(double)*SIZE);
    cudaMemcpy(PNT, point, sizeof(double)*SIZE, cudaMemcpyHostToDevice);
#else
    cudaMemcpyToSymbol(PNT, point, sizeof(double)*SIZE);
#endif
Run Code Online (Sandbox Code Playgroud)

point在之前的代码中定义的地方.当处理USE_CONST=1所有事情按预期工作时,但在没有它的情况下工作,而不是工作.我通过我的内核函数访问数组

PNT[ index ]

这两种变体之间的问题在哪里?谢谢!

memory cuda

5
推荐指数
1
解决办法
4503
查看次数

CUDA 中的全局内存与共享内存

我有两个 CUDA 内核可以计算类似的东西。一种是使用全局内存(myfun是一种从全局内存读取大量数据并进行计算的设备函数)。第二个内核将该数据块从全局内存传输到共享内存,以便数据可以在块的不同线程之间共享。我使用全局内存的内核比使用共享内存的内核快得多。可能的原因有哪些?

loadArray仅复制d_xto的一小部分m

__global__ void mykernel(float *d_x, float *d_y, int *d_z, float *d_u, int N, int K, int D)
{

  int tid = blockIdx.x*blockDim.x + threadIdx.x;
  int index = 0;
  float max_s = 1e+37F;


  if (tid < N)
    {

      for (int i = 0; i < K; i++)
        {

          float s = myfun(&d_x[i*D], d_y, tid);

          if (s > max_s)
            {
              max_s = s;
              index = i;
            }
        }

      d_z[tid] = index;
      d_u[tid] …
Run Code Online (Sandbox Code Playgroud)

c++ cuda gpu-shared-memory

2
推荐指数
1
解决办法
5531
查看次数

标签 统计

cuda ×2

c++ ×1

gpu-shared-memory ×1

memory ×1