GPU/CUDA程序初体验 向量加法

现在主要的并行计算设备有两种发展趋势:

(1)多核CPU。

  双核,四核,八核,。。。,72核,。。。,可以使用OpenMP编译处理方案,就是指导编译器编译为多核并行执行。

(2)多线程设备(GP)GPU。

  通用GPU,就是显卡,以nvidia公司的显卡为主。nvidia使用CUDA编程。

 

由于毕业的需要,现在开始学习CUDA编程。看了一段时间教程,目前环境已经配好,下面是一个简单的CUDA程序:

程序实现向量的加法操作,使用了一个block内部的512个线程。

 1 #include <stdio.h>
 2 #include<cuda_runtime.h>
 3
 4 //__global__声明的函数,告诉编译器这段代码交由CPU调用,由GPU执行
 5 __global__ void add(const int *dev_a,const int *dev_b,int *dev_c)
 6 {
 7     int i=threadIdx.x;
 8     dev_c[i]=dev_a[i]+dev_b[i];
 9 }
10
11 int main(void)
12 {
13     //申请主机内存,并进行初始化
14     int host_a[512],host_b[512],host_c[512];
15     for(int i=0;i<512;i++)
16     {
17         host_a[i]=i;
18         host_b[i]=i<<1;
19     }
20
21     //定义cudaError,默认为cudaSuccess(0)
22     cudaError_t err = cudaSuccess;
23
24     //申请GPU存储空间
25     int *dev_a,*dev_b,*dev_c;
26     err=cudaMalloc((void **)&dev_a, sizeof(int)*512);
27     err=cudaMalloc((void **)&dev_b, sizeof(int)*512);
28     err=cudaMalloc((void **)&dev_c, sizeof(int)*512);
29     if(err!=cudaSuccess)
30     {
31         printf("the cudaMalloc on GPU is failed");
32         return 1;
33     }
34     printf("SUCCESS");
35     //将要计算的数据使用cudaMemcpy传送到GPU
36     cudaMemcpy(dev_a,host_a,sizeof(host_a),cudaMemcpyHostToDevice);
37     cudaMemcpy(dev_b,host_b,sizeof(host_b),cudaMemcpyHostToDevice);
38
39     //调用核函数在GPU上执行。数据较少,之使用一个Block,含有512个线程
40     add<<<1,512>>>(dev_a,dev_b,dev_c);
41     cudaMemcpy(&host_c,dev_c,sizeof(host_c),cudaMemcpyDeviceToHost);
42     for(int i=0;i<512;i++)
43         printf("host_a[%d] + host_b[%d] = %d + %d = %d\n",i,i,host_a[i],host_b[i],host_c[i]);
44     cudaFree(dev_a);//释放GPU内存
45     cudaFree(dev_b);//释放GPU内存
46     cudaFree(dev_c);//释放GPU内存
47     return 0 ;
48 }

View Code

 程序输出:

时间: 2024-09-11 23:24:57

GPU/CUDA程序初体验 向量加法的相关文章

wxWidgets初学者导引(3)——wxWidgets应用程序初体验

wxWidgets初学者导引全目录   PDF版及附件下载 1 前言2 下载.安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith进行可视化设计附:学习材料清单 3 wxWidgets应用程序初体验 本文中所有的体验,在Code::Blocks中进行. 为了在Code::Blocks中编译运行C++写的wxWidgets程序,需要再做些设置. 首先,需要在环境变量里添加一个wxWidgets根目录环境变量.设置方法类似于2.3

微信小程序初体验(上)- 腾讯ISUX社交用户体验设计成员出品

微信小程序开放公测后一直很火,作为腾讯ISUX社交用户体验设计成员自然不能错过这样的好戏,下面就随ytkah一起来看看"小程序官方评测"吧,write by 腾讯ISUX练小习. 这段时间有幸加入了一个关于微信小程序的项目开发组,从无到有的根据文档自行学习了小程序的开发过程,前面已经有几位前辈的文章珠玉在前,我这里就先从前端界面的开发方面谈一谈小程序以及我所遇到的问题吧. 在结构和样式方面,小程序提供了一些常用的标签与控件,比如: view,小程序主要的布局元素,类似于html标签的d

C语言及程序设计初步例程-4 C语言程序初体验

贺老师教学链接  C语言及程序设计初步 本课讲解 让程序会计算:求a和b两个数之和 #include <stdio.h> int main( ) { int a,b,sum; scanf("%d %d", &a, &b); sum=a+b; printf("%d\n", sum); return 0; } 用户界面友好(或罗里罗嗦)的程序 #include <stdio.h> int main( ) { int a,b,sum

zephir-(2)安装和初体验

zephir-安装和初体验 前言 先在这里感谢各位zephir开源技术提供者 zephir主要是解决了PHP开发人员尝试编写和编译PHP拓展所能执行的代码的语言.这是一个支持动态/静态类型的语言,熟悉PHP开发人员可以很好的进行开发.zephir这个名字的主要来源是(Zend Engine/PHP/Intermediate),今天首先介绍zephir的安装,接着会对zephir进行一些语法上面的介绍,希望大家喜欢! 注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术 附上: 喵了个

新手RoR十分钟初体验Step By Step

http://yulimin.javaeye.com/blog/35929 关键字: rails   Ruby Rails RoR     新手RoR十分钟初体验Step By Step 声明一下,这是个新手启动的体验文章,高手不要看了...:) 1.安装RubyWindows用户去 http://rubyforge.org/ 的 http://rubyforge.org/projects/rubyinstaller/ 下载 One-Click Installer - Windows 安装即可,

Whidbey 初体验之局部类型 ( partial 类型)

Whidbey 初体验 之 局部类型 ( partial 类型) Visual Studio 2005 [Whidbey] 抢先体验版 [Express Beta 1 ] 出来有一段时间了,并且在微软的官方网站上有免费的下载(下载地址:http://lab.msdn.microsoft.com/vs2005/).就本人而言是非常喜欢c#这一新生的语言的.也许并不能说它是新生的,它是对以往各种语言的提炼,或许它是站在巨人的肩膀上的,所以才显得如此的优秀.伴随体验版而来的c# 2.0 给我们带来了新

Windows Phone 7开发教程(1)——Windows Phone开发工具初体验

这是为<程序员>4月期写的文章,是在<双重惊喜-- Windows Phone Developer Tools初体验>的基础上增加了一些内容, 包括WebBrowser空间.MediaPlayer空间,还有一个非常简单的XNA程序.希望对 Windows Phone开发有兴趣的朋友有一些帮助. Windows Phone开发工具在MIX 2010上火热登场了.Windows Mobile开发者们 压抑许久的热情终于爆发出来,对于Windows Phone的华丽转身,开发者们褒贬 不

Kotlin 初体验:主要特征与应用

Kotlin 是一种针对 Java 平台的新编程语言.它简洁.安全.务实,并且专注于与 Java 代码的互操作性.它几乎可以用在现在Java 使用的任何地方 :服务器端开发.Android 应用,等等.本文我们将详细地探讨 Kotlin 的主要特征. 本文选自<Kotlin实战>. Kotlin初体验 让我们从一个小例子开始,来看看 Kotlin 代码长什么样子.这个例子定义了一个 Person 类来表示"人",创建一个"人"的集合,查找其中年纪最大的人

Docker的Windows容器初体验

系列文章 第一篇 Docker的Windows容器初体验 - 本文 第二篇 阿里云Windows Server 2016环境Docker试用 最近微软发布了Windows Server 2016,其中最让广大开发者和运维同学期待的就是Docker对Windows容器的支持. Windows支持两种不同类型的容器,即 Windows Server 容器和 Hyper V 容器. 这两种类型的容器的使用方式相同,也支持相同的容器映像. 但是它们的实现机制不同,提供了不同的安全隔离级别 Windows