第二篇:CUDA 并行编程简介
前言
并行就是让计算中相同或不同阶段的各个处理同时进行。
目前有很多种实现并行的手段,如多核处理器,分布式系统等,而本专题的文章将主要介绍使用 GPU 实现并行的方法。
参考本专题文章前请务必搭建好 CUDA 开发平台,搭建方法可以参考上一篇文章。
GPU 并行的优缺点
优点:
1. 显存具有更大的内存带宽
2. GPU 具有更大量的执行单元
3. 价格低廉
缺点:
1. 对于不能高度并行化的工作,能带来帮助不大。
2. 对于绝大多数显卡型号,CUDA 仅支持 float 类型而不支持 double 类型运算,因此运算精度不高。
3. 目前还没有出现通用的 GPU 并行编程标准。
4. 处理前需要先将数据传输进显存,增加了一些时间开销。
5. 需要特定显卡型号(英伟达)的支持
较之 CPU ,GPU 适合一次性进行大量相同的工作,而 CPU 则比较有弹性,能同时进行变化较多的工作。
CUDA 结构
CUDA 是一种底层库,比 C/C++ 等语言以及 Open CV 之类的库更加底层,是附加在操作系统和这类程序之间的一层:
CUDA 程序架构
CUDA 架构下,程序分成两个部分:host 端和 device 端,前者在 CPU 部分执行,后者是在 GPU 部分执行。
具体的 CUDA 程序执行过程如下:
1. host 端程序先将待处理数据传递进显存
2. GPU 执行 device 端程序
3. host 端程序将结果从显存取回
如下图所示:
CUDA thread 架构
thread 架构分成三个等级:
1. 执行的最小单元是 thread
2. 多个 thread 可以组成一个 block,block 中的 thread 可并行执行且可存取同一块共享的显存。但要注意的是每个 block 中的 thread 是有数量限制的。
3. 多个 block 可以组成一个 grid,但 grid 中的 block 无法共享显存( 只能共享些别的信息 ),因此可合作度并不高。
如下图所示:
CUDA 程序执行模式
1. CUDA 程序利用并行化来替代内存 cache,即一个 thread 需要等待内存则 GPU 会切换到另一个 thread 执行。
2. CUDA 程序对于 "分支预处理" 的实现也是采用和 1 类似的方式。
小结
本文旨在对CUDA并行编程技术做一个感性而总体的介绍,该系列后续文章将具体讲解CUDA编程技术。
第二篇:CUDA 并行编程简介的更多相关文章
- CUDA 并行编程简介
前言 并行就是让计算中相同或不同阶段的各个处理同时进行.目前有很多种实现并行的手段,如多核处理器,分布式系统等.本专题的文章将主要介绍使用 GPU 实现并行的方法.参考本专题文章前请务必搭建好 CUD ...
- CUDA并行编程思维过程
CUDA并行编程思维过程 1)确定应用程序中需要且可以并行化的部分 2)将并行化代码中需要用到的数据分离出来,具体方法是用API函数在并行技术设备上分配内存空间 3)用API函数将数据传输到并行计算设 ...
- [3]第二章 C++编程简介
(本资料均从 internet 上进行收录整理,若要转载,请与原作者联系) 2.1 机器语言.汇编语言和高级语言 程序员用各种编程语言编写指令,有些是计算机直接理解的,有些则需要中间翻译(tranl ...
- [转]12篇学通C#网络编程——第二篇 HTTP应用编程(上)
本文转自:http://www.cnblogs.com/huangxincheng/archive/2012/01/09/2316745.html 我们学习网络编程最熟悉的莫过于Http,好,我们就从 ...
- cuda并行编程之求解ConjugateGradient(共轭梯度迭代)丢失dll解决方式
在进行图像处理过程中,我们常常会用到梯度迭代求解大型线性方程组.今天在用cuda对神秘矩阵进行求解的时候.出现了缺少dll的情况: 报错例如以下图: watermark/2/text/aHR0cDov ...
- Azure Databricks 第二篇:pyspark.sql 简介
pyspark中的DataFrame等价于Spark SQL中的一个关系表.在pyspark中,DataFrame由Column和Row构成. pyspark.sql.SparkSession:是Da ...
- 第二篇:从 GPU 的角度理解并行计算
前言 本文从使用 GPU 编程技术的角度来了解计算中并行实现的方法思路. 并行计算中需要考虑的三个重要问题 1. 同步问题 在操作系统原理的相关课程中我们学习过进程间的死锁问题,以及由于资源共享带来的 ...
- CUDA C++编程手册(总论)
CUDA C++编程手册(总论) CUDA C++ Programming Guide The programming guide to the CUDA model and interface. C ...
- 黑客编程教程(二)Win API编程简介
第二节 Win API编程简介 下面介绍一下WIN API. 我们需要自己编写一个工具时,必然会用到很多操作windows和控制windows的函数,这些函数就是windows API. API是Ap ...
随机推荐
- 微软的SQLHelper类(含完整中文注释)
using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collect ...
- C# 项目发布到IIS后不能用log4net写日志
在代码中正确配置了log4net后,IIS上仍然不能写日志的情况下,只需在写日志的目录添加 IIS_IUSRS 用户,并赋与读写权限即可.
- ASP.NET给DataGrid,Repeater等添加全选批量删除等功能
很多情况下,在管理或者查看列表的时候我们需要很需要“全选”这个功能,这在ASP.NET中是非常容易实现的,下面我就将演示一点小代码实现这一功能. 实现全选的还是js的一个小函数: [code] ...
- 公众号的TOKEN配置PHP代码
1.在后台添加好URL和TOKEN和生成43位随机码 注意域名URL需要备案 2.上传到服务器 3.公众号后台要点提交即可 error_reporting(0); $signature=$_REQU ...
- 值得分享的Bootstrap Ace模板实现菜单和Tab页效果(转)
Ace模板地址:http://code.google.com/p/ace-engine/wiki/AceTemplate(有时会打不开) Ace英文官网:http://wrapbootstrap.co ...
- linux下利用shell脚本和mysqldump热备份和恢复mysql
对mifeng数据库进行每周六3:33完全热备份,并可以完全恢复! 一.先建立备份脚本 #vi /mifengbackup/backup.sh #!bin/bash cd /mifengbackup ...
- Web Socket rfc6455 握手 (C++)
std::string data((const char*)buf->data(),bytes_transferred); recycle_buffer(buf); std::string ke ...
- Atitit. 解决80端口 System 占用pid 4,,找到拉个程序或者服务占用http 80服务
Atitit. 解决80端口 System 占用pid 4,,找到拉个程序或者服务占用http服务 这个是http.sys系统服务占用了... net stop http ,三,没法儿终止 1. 寻 ...
- mysql刷新mysql-bin
#!/bin/bash set -x #echo `date`,"binlog" >> /opt/scripts/fl.sh.log /opt/app/mysql/bi ...
- 【C语言】23-typedef
一.typedef作用简介 * 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名). 1 #include <stdio.h> 2 3 typedef int Integ ...