/* 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作为指针然后填写它们的值,但如果我这样做,程序将无法编译?我在这里俯瞰什么?
答案 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的设备”。所以我猜网络中的某些东西不能正常工作,或者我没有所有的权限。
更新:网络管理员更改了一些设置,现在一切正常。