作者a5000ml (咖啡里的海洋蓝)
看板VideoCard
标题[分享] CUDA 程式设计(15) -- 翻译 RWT P4 [CUDA API]
时间Fri Jan 30 16:30:12 2009
新年快乐
过完年肚子肥了一圈, 上来打打字运动一下, 这次翻译 real world tech 的
文章的第 4 页
http://www.realworldtech.com/page.cfm?ArticleID=RWT090808195242&p=4
前面三页请参考 CSDN 的简中翻译 (感谢 VictorTom 大大协助搜寻)
http://0rz.tw/5654x
祝大家今年事事顺心 ^.^=
咖啡里的海洋蓝
◆ CUDA API
===========================================================================
CUDA 的 API 和其它作业平台一样包含了完整的软体生态系统。做为其心脏的
CUDA C 语言透过 NVIDIA 的编译器 (nvcc - 基於 Open64 後端) 进行编译,更精确
的说,CUDA C 并不是真正的 C 语言,而是 C 语言的一种延伸,主要包含了以下的
4 种功能
- 区分函式在 CPU 或是 GPU 执行
- 区分那些变数是在 GPU 的位址空间
- 指派 kernel 函式按照 grids 和 blocks 设定执行
- 描述 gridDim, blockDim, blockIdx, threadIdx 等状态变数
这些 API 需要 CUDA 趋动程式,现已存在所有的NVIDIA 显示卡趋动包中。 其中
的 CUDA run-time (cudart) 环境,使用了动态编译器 (JIT, just in time
compiler),可以锁定底层的硬体架构 (NVIDIA尚未公开)。另外 API 亦包含了常见
的数学函式库,例如 cuFFT、cuBLAS 和 cuDPP 等,供使用者直接叫用。
nvcc 可产生 3 种输出码:PTX, CUDA binary 或 standard C:
其中PTX (Parallel Thread eXecution) 是一套虚拟的指令集,设计做为
动态编译器的输入码,透过 CUDA run-time 层的 JIT 编成符合安装在主机上
GPU 的原生码。这种做法的优点在於提供一层稳定的架构弹性,包括架构的
回溯相容性、长效性、延伸性、高效能,并付予工程师设计新硬体时足够的弹性。
这种技术保证了相容性,新一代的硬体保证相容旧版本的软体,也就是现在的
PTX code 在将来的新的硬体上也可以执行得很好。
(译者按:PTX 有点像 Java 的 bin-code,应用这种虚拟机器的做法很容易和其它
高阶语言接轨,例如 C++、Fortran、Pascal、Basic 等,硬体上也很容易进行
异质接合,除了不同世代的硬体外,也许那天 ATI 和 NV 的卡片可用来跑同一支
程式。另外不相容的地方在 JIT 层用软体做掉了,且只在 kernel 第一次执行时
才编译,花费的额外代价很小,剩下的只是各别机种上的 optimizing issue)
虽然 PTX + JIT 几乎是最有效率的做法,却不见得适用於所有的使用情况。一些
ISV (Independent Software Vendor) 倾向於牺牲部份效能以换取更为决定性以及
容易验证的行为。因为 JIT 会因不同的硬体或其它因素 (CUDA 版本) 而改变它的
输出码,对於某些 ISV 的软体验证上 (例如财金软体),他们宁可直接编译
CUDA binary (.cubin files) 以避免因 JIT 所造成的不确定性。虽然直接编译
CUDA binary 将会受限於特定的显示卡版本和趋动程式,但避免不确定性在专业应用
却更为重要。
最後 nvcc 亦可把 CUDA C (kernel) 输出成标准 C,可以被重导至 ICC、GCC 或
其它高效能编译器产生 CPU 的原生码,虽然 CUDA 刚开始是设计来撰写在 NVIDIA
GPU 上的平行程式码,但当 kernel 的平行化被展开成 multi-core CPU 的程序时
也会产生同样的增速效果,一些早期的实验在 x86 的机器上看到了透过 CUDA 语法
平行化产生的 4 倍的增速。
(译者按:这不是 --emu 模式,只使用OS的执行绪来模拟,速度通常只会大幅下降,
这边指的是直接对应 multi-core CPU 的一个核心到 GPU 的一个 multiprocessor,
在 2.1 版中使用 nvcc --multi-core 选项处理,主要的增速原因是在 CUDA 语法
对 kernel 平行化的规范下,使得 CPU 的 cache 使用率和记忆体存取的效率增加,
另一个原因是改写成 CUDA 程序时演算法的改变。)
◆ Evolution of the ISA and Compute Capabilities
=========================================================================
CUDA 被设计成能兼容软硬体规格的变化,计算装置 (NVIDIA GPUs) 的能力以版本号
标示 (compute capability),其第一个数字代表核心架构 (主版本),第二个数字
代表细部演进 (次版本号)。
在一年多来的演进後,CUDA已延伸出3个子版本,Compute 1.1新增了 32-bits
global atomic 函数,Compute 1.2 新增了 32-bits shared 和 64-bits global 的
atomic 函数,两个 warp vote 函数,并支援了 GT200 的微架构,Compute 1.3 增加
双精确倍数的支援,现今的产品包括 GeForce GTX 280 and 260 and Tesla S1070
和 C1060。而 Compute 1.2 至今并无实际的产品上市,究其原因可能是用於将来
GPU 去除双精确倍数,降低成本做为市场竞争用 (游戏玩家市场)。
◆ 原文
=========================================================================
http://www.realworldtech.com/page.cfm?ArticleID=RWT090808195242&p=4
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.131.12.151
※ a5000ml:转录至看板 C_and_CPP 01/30 16:32
1F:推 VictorTom:头推:) 01/30 17:18
2F:→ VictorTom:我什麽都不会~~老实说我年假才看完九集国网的影片.... 01/30 17:18
3F:→ VictorTom:还在消化中; 还在第九集看到以前的老同学说.... 01/30 17:19
4F:→ VictorTom:不过失联很久了, 看到影片也不知道该怎麽联络到他Orz 01/30 17:20
5F:推 kaj1983:推学术文! 01/30 17:46
6F:推 ludmina:有看有推 01/30 19:39
7F:→ kuninaka:国网的影片还没看 躺在我的硬碟里 XD 01/30 20:34
8F:→ kuninaka:有资料库软体支援CUDA吗 这种可以丢给GPU平行运算吧 01/30 20:35
9F:推 VictorTom:没办法, 不趁年假看一看, 开始上班後又没时间/心情看了. 01/30 20:43
10F:→ VictorTom:主管其实assign了其他job勒, 不过不太想理他....-_-|| 01/30 20:44
11F:→ a5000ml:嗯嗯~~ 我也是,过完年要开始工作了,希望今年顺顺利利的~~ 02/01 21:30
12F:→ a5000ml:能挤出多一点课外活动的时间来写文章 02/01 21:31
13F:→ a5000ml:kun大, 资料库软体小弟就比较不熟了~ 它是那些地方会比较 02/01 21:33
14F:→ a5000ml:花时间?? 常用的是那些软体?? 要不要 google 一下~ 02/01 21:35