【IT168 专稿】一个大任务通常可能被分解成许多可以一起处理的小任务,以便创建一个解决方案,这和粉刷房子的道理是一样的,在粉刷之前,假设你需要买5公升油漆和5把刷子,你可以自己一个人干完采购和粉刷的活,也可以请朋友或职业粉刷工人帮忙。

▲图 开始使用CUDA C

你可能想请人帮忙,为了节约时间,你出去购买油漆,另一个人去买刷子,然后你在4个人的帮助下,每人刷一面墙,这样并行进行,到任务完成时,你算一下,应该节省了大量的时间。

这个方法对计算机也适用,假设你想添加两个向量v(x,y,z)和u(x,y,z),这里v=(1,2,3),u=(4,5,6),那么v+u=(1,2,3)+(4,5,6)=(1+4,2+5,3+6)=(5,7,9),你自己可以算一下,一次计算一个,但正如你可能看到的,这个问题可以分解成多个更小的问题,你可以让一个“人”将x分向量一起加起来,另一个“人”将y分向量一起加起来,第三个“人”将z分向量一起加起来,如下表所示:

表中的每个人所有的工作都是一样的:a+b=c,但每个人使用的数字不一样,结果也不一样。

这并不是什么新概念,并行计算已经存在多年,PC使用多个CPU并行处理任务,提高不同应用程序的执行速度,你可以将上面提到的“人”看作一个进程或一个线程,计算机可以将每个进程分配给不同的处理器,接收到任务的所有处理器并行执行一个任务(计算)。

现在,大多数计算机拥有多颗可以处理多任务的处理器,大型应用程序使用计算机上的可用资源运行可以获得更好的性能,但如果应用程序需要增加功能会怎么样呢?你应该增加处理器,还是以某种方式升级系统?这取决于你应用程序的需求和采用的解决方案,其中一个可行的解决方案是使用GPU。

GPU是什么?GPU是图形处理单元(Graphics Processing Unit)的缩写,它处理所有桌面上或游戏中的图形,分担一些CPU负载,在游戏中,CPU要执行人工智能计算和冲突检测,任务非常繁重,因此任何帮助都是欢迎的,GPU本身采用了良好的并行架构,使算术运算和计算真正有效,它是CPU的好朋友。

▲图 CPU+GPU,让程序运行更高效

本文的目的是帮助你开始使用CUDA C语言在GPU上实现并行计算,CUDA C由nVidia创建,它是一种与C类似的编程语言,但它是专门为创建使用GPU执行并行计算的应用程序设计的,与之类似的还有OpenCL和DirectCompute(DirectX 11),但CUDA C是我懂得的唯一语言,因此本系列文章就选择了它。它们都基于相同的原则,因此你任意选择一种学习都可以。

先决条件

在开始写代码之前,我们先启动计算机,把CUDA运行起来先!你需要一个新的启用CUDA的GPU(2007年以后,带有256MB显存的应该都可以,如果你不确定,请移步到www.nvidia.com/cuda检查一下)。我使用的是Nvidia Geforce 480GTX,但最新的500系列看起来更好。

重要:确定也安装了最新的驱动!!

安装

在下载页面,找到CUDA工具包,根据你平台的实际情况选择下载32位或64位,下载完毕后,安装它。

可选步骤,但真的会给你带来方便:下载完软件后,再从CUDA工具包页面下载并安装GPU计算SDK代码示例。

▲ 图 安装GPU计算SDK

GPU计算SDK带有许多优秀的代码示例和文档,它们可以帮助你提高GPU计算技能。

CUDA工具包安装好后,你就可以使用你熟悉的文本编辑器编写CUDA C应用程序了,我使用的是记事本,如果要编译应用程序,你可以使用Visual Studio 2008命令提示符,或nvcc.exe编译。

▲图 Visual Studio 2008命令提示符

▲图 nvcc.exe

测试安装是否成功

让我们尝试一下吧,一个真正超级简单的CUDA应用程序,看起来和其它C代码没什么差别:

#include

int main( void )

{

printf( “Hello, World!” );

return 0;

}

这段代码可能会给你带来惊喜,实际上,你可以使用CUDA编写任何C应用程序,当我们开始决定在CPU上执行什么功能,在GPU上执行什么功能时,真正的奇迹发生了。

在你熟悉的文本编辑器中敲入上面的代码,然后将其保存为TestCUDA.cu。

接下来,我们开始编译和生成我们的应用程序,仍然是在控制台窗口,在你保存TestCUDA.cu相同的路径下,敲入下面的命令:

nvcc –o test.exe TestCUDA.cu

按下回车键,将创建一个test.exe可执行文件。

▲图 创建test.exe文件

现在如果你敲入test.exe,你的第一个CUDA C应用程序将会运行,并在屏幕上输出“Hello,World”,如下图所示:

▲图 运行test.exe

如果你在编译时遇到了问题,拷贝错误消息,在搜索引擎中搜索一下,可以获得大部分常见失误和错误的解决办法,祝你好运!(如果你下载的是64位CUDA工具包,试试将其卸载,然后换为32位版本测试一下)

c cuda 指定gpu_GPU并行编程:熟练使用CUDA C语言相关推荐

  1. Cuda异步计算并行编程设计和优化

    基于Cuda开发GPUGPU程序时,最重要的仍然是内核的设计,这是Cuda性能优化的难点,提供了不少岗位,养活了一大批工程师.这里以一个相对简单的的求平方和算法为例,从编程和优化,调试几个维度,介绍利 ...

  2. 【CUDA并行编程之八】Cuda实现Kmeans算法

    本文主要介绍如何使用CUDA并行计算框架编程实现机器学习中的Kmeans算法,Kmeans算法的详细介绍在这里,本文重点在并行实现的过程. 当然还是简单的回顾一下kmeans算法的串行过程: 伪代码: ...

  3. 一种基于CUDA标准的异构并行编程模型开发简介

    一种基于CUDA标准的异构并行编程模型开发简介 目录 一.绪论 1.1研究背景及意义 1.2目标平台体系结构简介 二.HPPA基本组成结构 三.编译工具链开发 3.1 拆分工具HPCufe开发 3.2 ...

  4. CUDA并行编程较有用的总结

    Cuda并行编程学习时候需注意的一些基本概念 1.Cuda的编程风格:spmp(单程序多数据)的并行编程风格. 2.在多GPU下,cudaMemcpy()不能用于GPU之间的数据复制 3.cudaMe ...

  5. CUDA并行编程概述

    前往我的主页以获取更好的阅读体验 CUDA并行编程概述 - DearXuan的主页https://blog.dearxuan.com/2021/11/15/CUDA%E5%B9%B6%E8%A1%8C ...

  6. 从头开始进行CUDA编程:Numba并行编程的基本概念

    作者 | CarlosCosta 编辑 | 极市平台 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[模型部署]技术交流群 后台回复[ ...

  7. 【Cuda并行编程之一】二分查找的探究以及Cuda的简单实现相关面试题介绍

    最近开始复习基础找工作,二分查找算是最基本而且十分重要的算法了,现在完整的解析一下,作为后面复习只用.内容分为几个部分: 一.二分查找的基本过程 折半查找技术,又称为二分查找.它的前提条件是线性表中的 ...

  8. CUDA 8混合精度编程

    CUDA 8混合精度编程 Mixed-Precision Programming with CUDA 8 论文地址:https://devblogs.nvidia.com/mixed-precisio ...

  9. 基于CUDA的GPU并行计算技术实现网课课表编排

    这篇文章是用来填这个坑的:https://blog.csdn.net/xinew4712/article/details/108276264 上篇文末设想的是用天灾和定向改造机制来提高排课运算的效率, ...

最新文章

  1. forward 方法详解 java_详解Java从后台重定向(redirect)到另一个项目的方法
  2. python测试运行快捷键_Python基于unittest实现测试用例执行
  3. logback日志pattern_@Slf4j 实现日志输入到外部文件
  4. java弱口令生成1001无标题,教你批量生成自动发卡平台需要的卡密数据
  5. [mystery]-加密解密整理
  6. hdu 1027 输出第m个全排列(next_permutation)
  7. QEMU/KVM PCI Passthrough(82599ES) DPDK 网络性能测试
  8. Spring MVC拦截器配置以及统一登陆校验实现
  9. SEO实战密码(第3版) 60天网站流量提高20倍-3
  10. 20162327WJH第一次实验——线性结构
  11. 网络历史之金融投资三剑客01
  12. office 宏病毒分析
  13. 【每日新闻】1.7万元起!华为发布首款5G折叠屏手机!
  14. 第二本书unit5 lvm管理
  15. perforce(p4) 使用
  16. 谈悲观、执著、超脱——周国平
  17. linux mint安装金山快盘
  18. jsp运行linux脚本,jsp页面调用哪个Linux的shell 脚本步骤
  19. 《数字电子技术课程设计》课程笔记(二)————multisim仿真模拟
  20. Matlab电力系统雷击过电压,雷电波折、反射对日常生活的影响研究

热门文章

  1. 表达式前后缀表达形式 [zz]
  2. 16福师计算机应用基础在线作业,16春季福师《计算机应用基础》在线作业二.doc...
  3. Vue 页面如何监听用户预览时间
  4. 知识图谱应用实战案例100篇(一)-阿里巴巴超大规模知识图谱预训练实践:商品分类
  5. flink sql设置并行度_《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍
  6. 知道接口地址 如何传数据_如何选显示器连接线?四种主流接口要知道
  7. 《鸿蒙理论知识04》HarmonyOS概述之系统定义
  8. WebCrack:网站后台弱口令批量检测工具
  9. 移动app显示远程服务器错误,KIS移动应用常见问题汇总
  10. php-5.2.6安装,php5.2.6安装openssl.o扩展,make时报错?