在GPU核函数中,为什么数值型变量可以和数组型变量相互赋值, CPU中不可以
2017-11-10 07:27
246 查看
/* * 源程序来自于 炼数成金教程 * 在GPU核函数中,为什么数值型变量可以和数组型变量相互赋值, CPU中不可以 * * */ #include <iostream> using namespace std; __global__ void global_scan(float* d_out,float* d_in){ int idx = threadIdx.x; float out = 0.00f; //声明一个float类型变量,并初始化 out = d_in[idx]; //d_in[idx]中随着idx改变d_in[idx]也改变,然而并没有覆盖out, //out也变成一个数组了,why???????????? __syncthreads(); d_out[idx] = out; __syncthreads(); } int main(int argc,char** argv){ const int ARRAY_SIZE = 8; const int ARRAY_BYTES = ARRAY_SIZE * sizeof(float); // generate the input array on the host float h_in[ARRAY_SIZE]; for(int i=0;i<ARRAY_SIZE;i++){ h_in[i] = float(i); } float h_out[ARRAY_SIZE]; // declare GPU memory pointers float* d_in; //声明为一个float型指针 float* d_out; // allocate GPU memory cudaMalloc((void**) &d_in,ARRAY_BYTES); cudaMalloc((void**) &d_out,ARRAY_BYTES); // transfer the array to GPU cudaMemcpy(d_in,h_in,ARRAY_BYTES,cudaMemcpyHostToDevice); // launch the kernel global_scan<<<1,ARRAY_SIZE>>>(d_out,d_in); // copy back the result array to the GPU cudaMemcpy(h_out,d_out,ARRAY_BYTES,cudaMemcpyDeviceToHost); // print out the resulting array for(int i=0;i<ARRAY_SIZE;i++){ cout<<h_out[i]<<" "; } // free GPU memory allocation cudaFree(d_in); cudaFree(d_out); return 0; }
/////////////////////////////////////////////////////////
结果如下:
/////////////////////////////////////////////////////////
0 1 2 3 4 5 6 7
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include<iostream> using namespace std; int main() { int a[3] = {1, 2, 3}; int b; int *c; //b = a; //这里把数组a赋值给变量b,会报错,但是在GPU内核函数中不会报错,为什么????? c = a; //把数组a的首地址给b cout<<" a[2]= "<<a[2]<<" c[2]= "<<c[2]<<endl; }
/////////////////////////////////////////////////////////
结果如下:
/////////////////////////////////////////////////////////
a[2]= 3 c[2]= 3
相关文章推荐
- C语言中,为什么字符串可以赋值给字符指针变量
- C语言_为什么字符串可以赋值给字符指针变量,字符串的属性及存放位置
- 为什么局部变量必须手动赋值?而全局变量不用手动赋值也可以初始化?
- 为什么需要专门出现GPU来处理图形工作,CPU为啥不可以?
- 为什么类中的成员变量可以不赋值就运算?
- 为什么结构体/类中,成员变量可以初始化不可以赋值?
- C/C++中,为什么字符串可以赋值给字符指针变量,单引号和双引号的区别
- C语言中,为什么字符串可以赋值给字符指针变量
- C/C++中,为什么字符串可以赋值给字符指针变量,单引号和双引号的区别
- C语言中两个相同类型的结构体变量之间是可以相互直接赋值的
- 结构类型变量相互赋值
- 为什么上面这段代码没有直接写的 function add (){...} 而是把function赋值给了变量add呢?
- 为什么不能用CPU而用GPU挖矿?
- FPGA为什么比CPU和GPU快
- runtime为什么可以动态添加变量和方法?
- 为什么 我 的myeclipse调试的时候,有时鼠标放在变量上就显示变量值,有时就没有,提示不可以显示
- 《为什么非静态内部类中不能有static属性的变量,却可以有static final属性的变量?》
- js为什么不可以相互继承?
- 为什么内部类使用的局部变量必须是final而全局变量可以是no-final
- 为什么数组可以不加“&”取它的地址,而普通变量必须要加“& ”才可以呢?