简单的CUDA代码不起作用

时间:2013-12-10 02:03:07

标签: cuda

/* Include Libs */
  #include <cuda.h>
  #include <cuda_runtime.h>
  #include <cuda_runtime_api.h>
  #include <stdio.h> 
  #include <stdlib.h>
  #include <iostream>


int main(void)
{

int a=1;
int c=2;
int *deva, *devc;

cudaMalloc( (void**)&deva, sizeof(int) ); 
cudaMalloc( (void**)&devc, sizeof(int) );

cudaMemcpy( deva, &a, sizeof(int), cudaMemcpyHostToDevice );
cudaMemcpy( devc, &c, sizeof(int), cudaMemcpyHostToDevice );

cudaMemcpy( &c, deva, sizeof(int), cudaMemcpyDeviceToHost );
cudaMemcpy( &a, devc, sizeof(int), cudaMemcpyDeviceToHost );

printf("\n%d %d\n", a, c); // Output (should be "2 1")

cudaFree( deva );
cudaFree( devc );

return 0;

}

这个简单的代码应交换a = 1和c = 2,产生输出“2 1”,但它什么都不做,这不是唯一一个基于教科书不能正常工作的“简单”例子,例子为什么所有教科书都说我可以初始化a和c作为指针然后填写它们的值,但如果我这样做,程序将无法编译?我在这里俯瞰什么?

2 个答案:

答案 0 :(得分:1)

拥有全局声明的内核线程

__global__ void swap(int *a,int *c)
{
 //Swapping using xor operator
 *a=*a^*c;
 *c=*a^*c;
 *a=*a^*c;
}

从主函数调用内核线程swap<<<N,1>>>(deva, devb, devc)

您可以从http://on-demand.gputechconf.com/gtc-express/2011/presentations/GTC_Express_Sarah_Tariq_June2011.pdf

进一步参考

答案 1 :(得分:1)

好的,我将this应用于我的代码的并行部分,结果是一条错误消息:“没有检测到支持CUDA的设备”。所以我猜网络中的某些东西不能正常工作,或者我没有所有的权限。

更新:网络管理员更改了一些设置,现在一切正常。