Posts /

Intro to Parallel Programming-The GPU Programming Model

Twitter Facebook
16 Oct 2016

[TOC]

Outline

本文主要包括以下几个方面的内容:

  • Technology trends

  • Throughput V.S. Latency

  • GPU Design Goals

  • CUDA Program Diagram

    - With Example

  • MAP operation

Digging Holes

让我们从一个有趣的问题 - “Digging Holes” - 开始:如果你想在地球上挖一个洞,从美国挖到中国,你会怎么做?

很快,你会发现这并不现实,你自己一个人根本无法完成如此多的任务量,那么,有没有什么好的解决办法呢?

我们想到了三种理论上可行的方法:

你应该已经意识到,我们不仅仅是在讨论挖洞的问题,这个问题可以类比为“How to build a faster processor?”的问题。

对于处理器来说,上面提到的三种方法都有一个并行的思想在其中。

再来看另一个有趣的问题:

如果你要耕地,你会选择哪种方式:2头健壮的公牛,或者1024只小鸡?

这背后的思想是,将一个任务量巨大的工作分解成若干小的pieces,接着我们可以想办法同事运行这些小块。

并行计算在过去曾是只在超级计算机使用的比较小众的技术,现在,the world has gone parallel.

Modern GPU:

一个现代的GPU可以用用多达3000个处理器核心,能运行多大65000个并发线程。这些使得你可以以前所未有的速度解决问题。这和CPU每次只做一件事的效果是完全不同的。

本系列的blogs旨在介绍How to think in Parallel,以及如何使用CUDA(或GPGPU通用编程图像处理单元)进行编程。

为什么现在并行计算如此风靡?

cpufeaturesize

上图显示了处理器的特征尺寸随时间变化的情况,feature size即为单个晶体管的体积。比如你熟悉的22nm或者14nm的制程就是指的Feature Size。

Transistor getting Smaller -> Faster, Less Power, More on Chip

这一过程使得我们拥有的计算资源越来越多, 但是,处理器的设计也遇到了问题:

clockfrequency

时钟频率即为晶体管的计时速度,处理器的性能提升主要来自于时钟频率的提高,但是最近几年,我们可以发现,Clock Frequency并没有继续增加,这是为什么呢?

这并不是因为transistor不能变的更小或者更快了,尽管随着transistor变的更小更快,单个transistor的功耗也会降低,但问题是,约10亿个transistor的运转会产生巨大的热量,但我们无法使transistor保持冷却。所以现在处理器设计最主要的因素就是功耗。

这导致的后果是,我们不能按以往的思路来设计处理器了,过去,我们在想办法使每个处理器变的越来越快,现在,将设计的重点转向了如何设计一些更小,但是更efficient的处理器 - More of them。

Latency V.S. Throughput

Major design constraint: Power

我们目前生产的处理器主要有两种:

How to build a (power-efficient) High Performance processor?

遗憾的是,通常这两个目标并不能被同时满足。比如,你去车管所办理手续,你去了之后发现很多人在排队。你当然想尽快排到你(latency),但是车管所的工作人员并不关心这个,他们关心的是怎样在一天内处理更多的工作(throughput)。

关于这个有一篇关于Building A Power Efficient Processor的论文“Latency Lags Bandwidth by” David Patterson.

显然,传统的CPU优化latency,GPU优化throughput

在计算机图形学中,我们更关心每秒处理的像素数量,而不是具体某个像素的执行时间。以两倍的单个像素处理时间来换取更高的像素吞吐量是值得的。

GPU Design Goals

显然,并行编程要比单线程编程复杂和困难, 但是,为了获取更高的速度,这样的复杂度提升是值得的。

e.g.

8 cores Ivy Bridge (INTEL)

* 8-wide AVX vector operations/core

* 2-threads/core(hyper threading)

因此,上面这个处理器的例子支持128-way parallelism

如果你只使用单线程,你只用了CPU资源的不到1%。

CUDA Program Diagram

CS344 : CUDA Programming in C.

For your reference, CUDA C Programming Guide


Twitter Facebook