当前位置:  开发笔记 > 小程序 > 正文

CUDA中的原子操作?要包含哪个头文件?

如何解决《CUDA中的原子操作?要包含哪个头文件?》经验,为你挑选了1个好方法。

对于在CUDA中使用原子操作,是否需要包含一些CUDA头文件?CUDA编程指南似乎对此非常紧张.

下面给出的代码glmax.cu给出了以下编译错误.

gaurish108 MyPractice: nvcc glmax.cu -o glmax
glmax.cu(11): error: identifier "atomicMax" is undefined

1 error detected in the compilation of "/tmp/tmpxft_000010fa_00000000-4_glmax.cpp1.ii".

这是代码.它基本上是使用原子操作计算GPU上阵列的最大值atomicMax.由于我是CUDA的新手,因此我确信这是一个非常简单的代码,但我写这篇文章是为了帮助自己理解原子操作.

#include
#include
#include

__global__ void global_max(int* values, int* gl_max)
{

  int i=threadIdx.x + blockDim.x * blockIdx.x;
  int val=values[i];

  atomicMax(gl_max,val);

}


int main(void)
{
  int array_size=5;
  int num_bytes=array_size*sizeof(int);
  int *device_array=0;
  int *host_array=0;

  int *device_max=0;
  int *host_max=0;

  //Allocate memory on the host
  host_array=(int*)malloc(num_bytes);

  //Allocate memory on the device
  cudaMalloc((void**)&device_array,num_bytes);
  cudaMalloc((void**)&device_max,sizeof(int));


  //If either memory allocation failed, report an error message
  if(host_array == 0 || device_array == 0)
  {
    printf("couldn't allocate memory\n");
    return 1;
  }

  //Assign a random integer in the  interval [0,25] to host_array members
  for(int i=0;i>>(device_array,device_max);

  //Transfer the maximum value so calculated into the CPU and print it
  cudaMemcpy(host_max,device_max,sizeof(int),cudaMemcpyDeviceToHost);
  printf("\nMaximum value is %d\n",*host_max);


  // deallocate memory
  free(host_array);
  cudaFree(device_array);
  cudaFree(device_max);
  return 0;
}

Jared Hobero.. 15

我不相信有#include必要."Compute Capability"1.0(sm_10)设备上没有原子操作,这是您要求nvcc编译的(默认情况下).

atomicMax在代码中使用,请至少-arch=sm_11在命令行中指定:

$nvcc -arch=sm_11 glmax.cu -o glmax

为了将来参考,您可以参考"CUDA C编程指南"的附录F,了解有关特定计算能力平台上可用的原子操作的信息.

当然,您需要一个sm_11兼容的GPU才能执行代码.我的印象是,这些现在很常见.



1> Jared Hobero..:

我不相信有#include必要."Compute Capability"1.0(sm_10)设备上没有原子操作,这是您要求nvcc编译的(默认情况下).

atomicMax在代码中使用,请至少-arch=sm_11在命令行中指定:

$nvcc -arch=sm_11 glmax.cu -o glmax

为了将来参考,您可以参考"CUDA C编程指南"的附录F,了解有关特定计算能力平台上可用的原子操作的信息.

当然,您需要一个sm_11兼容的GPU才能执行代码.我的印象是,这些现在很常见.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有