cudaDeviceProp prop;
for
(i =
0
; i < count; i++
) {
if
(cudaGetDeviceProperties(&prop, i) ==
cudaSuccess) {
if
(prop.major >=
1
) {
break
;
if
(i ==
count) {
printf(
"
找不到支持CUDA的设备!\n
"
);
return
false
;
cudaGetDeviceProperties(
&prop,
0
);
printf(
"
GPU is: %s\n
"
, prop.name);
cudaSetDevice(
0
);
printf(
"
CUDA initialized success.\n
"
);
return
true
;
//
使用指针相加
__global__
void
addNumber(
double
a,
double
b,
double
*
c);
int
main(){
//
检测GPU
if
(!
CheckCUDA()){
cout
<<
"
No CUDA device.
"
;
return
0
;
cout
<<
"
*************************************************************************************************************
"
<<
endl;
double
h_a, h_b, h_c;
//
在CPU上定义三个变量
double
*d_c;
//
定义一个将指向GPU的指针
h_a =
2.2
;
h_b
=
3.3
;
cudaMalloc((
void
**)&d_c,
sizeof
(
double
));
//
为指针在GPU上分配内存空间
//
调用核函数并启用一个线程块和一个线程
addNumber<<<
1
,
1
>>>(h_a, h_b, d_c);
//
只是单独的两个数相加,不是两个数组相加,只需使用单线程,数组相加可以使用多线程
cudaMemcpy(&h_c, d_c,
sizeof
(
double
), cudaMemcpyDeviceToHost);
//
将GPU上计算好的结果返回到CPU上定义好的变量
//
setw(10)表示输出10个空格,需添加 #include <iomanip>
cout << setw(
10
) << h_a <<
"
+
"
<< h_b <<
"
=
"
<< h_c <<
endl;
cout
<< endl <<
endl;
system(
"
pause
"
);
return
0
;
__global__
void
addNumber(
double
a,
double
b,
double
*
c){
*c = a +
b;
显示结果如下