司马刘的日志

分享工作,分享生活。

Skip to: Content | Sidebar | Footer

Tag: CUDA

大规模并行计算简介

29 十一月, 2009 (18:35) | 开发, 杂项 | By: 司马 刘

当今信息化时代,计算机需要处理的信息量呈几何级数增加,但是由于 CPU 架构本身的局限,CPU 时钟频率提升已经遇到了瓶颈.而最初只作为图形处理的 GPU 的可编程性日益增加使得很多科学家开始使用 GPU 来运行通用的计算程序.今天我给大家简单介绍一下 GPU 以及 CUDA 架构.
为什么 GPU 适合做大规模并行计算?
GPU 当初设计就是用来做图形处理的,而图形处理本身就是高密度,高并行的计算.请看下图:

GPU 的计算单元非常密集,可以让多个线程在多个不同的计算单元上同时运行,而 CPU 上的进程切换是一个很耗资源的操作,进程内的多个线程共享一份内存和寄存器,CPU 上的多线程并行和 GPU 的多线程并行性能必定有很大的差距.但是 CPU 的复杂的指令流控制是 GPU 的弱项.所以目前大多采用若干个 CPU 和若干个 GPU 来构建大规模并行计算系统,应用程序的顺序部分在 CPU 上运行,计算密集型部分在 GPU 上运行.
CUDA 是什么?
简单来说 CUDA 就是通用的并行计算架构.包括硬件指令集和并行编程模型.请看下图:

目前应用程序可以通过 C 语言来使用 CUDA 架构,从而解决很多复杂的计算问题.其他的诸如 FORTRAN,C++,OpenGL 和 DirectX 等语言或者编程接口会陆续支持.
如何在 CUDA 的编程模型上开发并行运行的程序?
CUDA 编程模型扩展了 C 语言,可以使用扩展语法调用 C 语言定义的特殊函数(这种特殊函数称作 kernel).请看下面的代码:

当用 CUDA 扩展语法调用 kernel [...]