CUDA学习之使用GPU进行两个数相加
Posted 小小一步
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CUDA学习之使用GPU进行两个数相加相关的知识,希望对你有一定的参考价值。
在CPU上定义两个数并赋值,然后使用GPU核函数将两个数相加并返回到CPU,在CPU上显示
#include "cuda_runtime.h" #include "device_launch_parameters.h" #include <iomanip> #include <iostream> #include <stdio.h> using namespace std; //检测GPU bool CheckCUDA(void){ int count = 0; int i = 0; cudaGetDeviceCount(&count); if (count == 0) { printf("找不到支持CUDA的设备!\\n"); return false; } 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; }
显示结果如下
以上是关于CUDA学习之使用GPU进行两个数相加的主要内容,如果未能解决你的问题,请参考以下文章
CUDA学习之使用共享内存(shared memory)进行归约求和
numpy 学习之 np.c_[] 和 np.r_[] 的用法