移动GPU通用计算现状与展望

来源:互联网 发布:淘宝上hm折扣代购真假 编辑:程序博客网 时间:2024/05/24 05:02

GPU通用计算简介

(成文于2014年9月,受情报来源限制,文中处理器型号信息可能与上市时规格不同, 不同平台性能、功耗、带宽测试方法不同,不能简单比较)

传统上,GPU的应用被局限于处理图形渲染计算任务。随着GPU可编程性的不断提高,利用GPU完成通用计算渐渐活跃起来。将GPU用于图形渲染以外领域的计算称为GPGPUGeneral-Purpose computing on Graphics Processing,基于GPU的通用计算)。GPGPU计算通常采用CPU+GPU异构模式,由CPU负责执行复杂逻辑处理和事务管理等不适合数据并行的计算,由GPU负责计算密集型的大规模数据并行计算。这种利用GPU强大处理能力和高带宽弥补CPU性能不足的计算方式在发掘了计算机潜在的性能,在成本和性价比方面有显著优势。

GPU计算拥有性价比高,性耗比高,设备易得的优势,在图像视频处理、石油勘探、分子动力学、信号处理、人工智能、数据挖掘、基因测序、密码学等领域得到了广泛应用。在移动计算中,GoogleAndroid 4.2开始使用GPU加速renderscript进行图像处理和图像/视频压缩。NvidiaARM则分别使用GPU加速照相处理架构,代替部分ISP功能。

2010年以来,移动设备GPU的性能快速提高,发展速度远远超过了摩尔定律。

进入2014年,市场上在销售的中高端处理器性能已经达到100GFlosp左右,并且已经发布和即将发布一批搭载KeplerMali-T760 MP16等理论性能超过300GFlops GPU的处理器。预计到2015年末,高端移动处理器的性能将达到1TFlops左右。

以下是2014Q1手机/平板常见移动处理器的CPUGPU及处理能力:

SoC Model

CPU Type

CPU GFlops

GPU Type

GPU GFlops

Qualcomm APQ8064AB

(SnapDragon 600)

4xKrait300

@1.9GHz

60.8

Adreno320

(96ALU)

97.2

Qualcomm APQ8974AB

(SnapDragon 800)

4xKrait400

@1.9GHz

73.6

Adreno330

(128 ALU)

158.4

Nvidia Tegra 4

4xcortex-A15

@1.9GHz

60.8

GeforceULP x 72

96

AppleA6X

2xApple Swift@1.4GHz

22.4

SGX554 MP4

76.8

AppleA7

2xApple 64bit@1.5GHz

48

G6430

(4 Clusters)

115.2

MTK MT6592

8xcortex-A7@1.7GHz

27.2

Mali-450 MP4

41.8

MTK MT8135

2xcortex-A15@1.7GHz + 2xcortex-A7@1.2GHz

32

G6200

 

40

表 1 2014Q1市场常见移动处理器CPU/GPU性能

以下是2014Q1新发布处理器CPUGPU及处理能力:

SoC Model

CPU Type

CPU GFlops

GPU Type

GPU GFlops

MTK MT6595

4xA17@2.1+4xA7@1.7

80.8

Adreno330

(128 ALU)

158.4

Intel Z3580

4xMoorefield@2.33GHz

N/A

PowerVR G6430

136

Tegra K1 Quad A15

4xcortex-A15@2.3GHz

73.6

Kepler

364.8

表 2 2014Q1新发布处理器CPU/GPU性能

从表一、表二可以看到,即使以NEON向量处理器计算理论性能,同一SoC上的GPU性能也要超过CPU。而且GPUCPU的性能差距在高端和较新的处理器上更加明显。事实上,GPUCPU的处理能力差距比理论峰值还要更大:

目前的ARM架构移动处理器主要通过NEON SIMD指令或者VFP指令集进行浮点运算。在进行相同的操作时,VFP的吞吐量只有NEON的大约四分之一。标准Android操作系统的dalvik虚拟机不支持生成Neon指令,在运行Java时只能使用VFP指令。即使通过NDK或者JNI,如果要调用数学函数或者除法等较为复杂的处理,也需要使用VFP指令集。而GPU的执行单元可以直接执行数学函数,甚至有专门的硬件单元进行超越函数运算。而且,在进行图形/图象处理时,GPU除了运算单元外,纹理采样单元也可以进行一些运算。

GPU的缺点在于执行单元在运行条件指令时,某些情况下需要的时间是几个分支之和,而不是一个分支所需要的时间。另外,只有存在大量数据并行计算时,才能完全发挥GPU性能。因此GPU适合进行分支较少、线程间通信较少的大规模数据并行任务。

移动GPU现状与发展

目前移动GPU主要厂商有:Imagination Technologies、 QualcommARM、 NVIDIA、 VivanteIntel。其市场占有率如下表所示

 

1H’12

1H’13

Qualcomm

29.3%

32.3%

NVIDIA

4.9%

1.4%

ARM IP

13.5%

18.4%

DMP IP

0.0%

0.5%

Imagination Technologies IP

52.0%

37.6%

Vivante IP

0.3%

9.8%

Total

100.0%

100.0%

表 3 2013年上半年与2012年上半年移动GPU市场占有率

1中:DMP IP仅见于任天堂3DS游戏机,不在本文讨论之列。2013上半年Intel尚未推出采用自有HD Graphics架构的处理器。

Imagination TechnologiesPowerVR系列GPUIP授权伙伴包括Intel、苹果、联发科、LG、高通、瑞萨、三星、海思、Marvell、索尼、华为等公司。目前使用Power VR系列的移动处理器主要是苹果全系列,三星和intel部分产品。

GPU Name

Chip

Clock

GFlops

SGX530

OMAP 3530

110 MHz

0.88

DM3730

200 MHz

1.6

---

300 MHz

2.4

 

 

 

 

SGX531

MT6513

MT6573

MT6575M

281 MHz

2.25

SGX531 Ultra

MT6515

MT6575

MT6517

MT6517T

MT6577

MT6577T

MT8317

MT8317T

522 MHz

4.2

 

 

 

 

SGX535

Apple A4

200 MHz

1.6

Apple A4 (iPad)

250 MHz

2.0

---

300MHz

2.4

 

 

 

 

SGX540

Exynos 3110

200 MHz

3.2

OMAP 4430

307 MHz

4.9

OMAP 4460

384 MHz

6.1

Atom Z2420

400 MHz

6.4

ATM7021a

RK3168

500 MHz

8.0

 

 

 

 

SGX543

---

200 MHz

7.2

SGX543 MP2

Apple A5

Apple A5 (iPad2)

200 MHz

250 MHz

14.4

18.0

SGX543 MP3

Apple A6

250 MHz

27.0

SGX543 MP4

Apple A5X

250 MHZ

36.0

 

 

 

 

SGX544

MT6589M

MT8121

156 MHz

4.9

MT6589 

MT8389

286 MHz

9.2

MT8125 

300 MHz

9.6

MT6589T

MT8389T

357 MHz

11.4

OMAP 4470

384 MHz

12.3

SGX544 MP2

Atom Z2520

300 MHZ

19.2

Allwinner A31

Allwinner A31s

350 MHZ

22.4

Atom Z2560

400 MHz

25.6

ATM7039

450 MHz

28.8

Atom Z2580

533 MHz

34.1

SGX544 MP3

Exynos 5410

533 MHz

51.1

 

 

 

 

SGX545

---

300 MHz

4.8

SGX545

Atom Z2460

Atom Z2760

533MHz

8.5

 

 

 

 

SGX554

---

300 MHz

19.2

SGX554 MP2

---

300 MHz

38.4

SGX554 MP4

Apple A6X

300 MHz

76.8

 

 

 

 

G6100

(1 Clusters)

---

300 MHz

19.2

G6200

(2 Clusters)

---

300 MHz

38.4

MT8135

??? MHz

???

---

500 MHz

64.0

G6230

(2 Clusters)

---

300 MHz

38.4

G6400

(4 Clusters)

---

300 MHz

76.8

G6430

(4 Clusters)

---

300 MHz

76.8

Apple A7

Apple A7 (iPad Air)

450 MHz

115.2

---

560 MHz

143.4

G6630

(6 Clusters)

---

300 MHz

115.4

---

450 MHz

173.0

---

650 MHz

250

 

QualcommAdreno系列GPU仅被用于QualcommSnapDragon系列处理器。

GPU Name

Chip

Clock

GFlops

Adreno130

MSM7x01

MSM7x01A

133 MHz

1.2

 

 

 

 

Adreno200

MSM7225

MSM7625

MSM7227

MSM7627

QSD8250

QSD8650

(Snapdragon S1)

133 MHz

2.1

MSM7225A

MSM7625A

(Snapdragon S1)

200 MHz

3.2

MSM7227A

MSM7627A

(Snapdragon S1)

245 MHz

3.92

 

 

 

 

Adreno203

MSM8225

MSM8625

(Snapdragon S4 Play)

MSM8225Q

MSM8625Q

(Snapdragon 200)

245 MHz

7.84

 

 

 

 

Adreno205

MSM7230

MSM7630

MSM8255

MSM8655

APQ8055

(Snapdragon S2)

266 MHz

8.5

 

 

 

 

Adreno220

MSM8260

MSM8660

APQ8060

(Snapdragon S3)

266MHz

17

 

 

 

 

Adreno225

MSM8260A

APQ8060A

(Snapdragon S4 Plus)

200 MHz

12.8

MSM8660A

(Snapdragon S4 Plus)

300 MHz

19.2

MSM8960

(Snapdragon S4 Plus)

400 MHz

25.6

 

 

 

 

Adreno305

MSM8227

MSM8627 

(Snapdragon S4 Plus)

MSM8226

MSM8626

MSM8230

MSM8630

MSM8930

MSM8030AB

MSM8230AB 

MSM8630AB

MSM8930AB

(Snapdragon 400)

400 MHz

19.2

MSM8228

MSM8928

(Snapdragon 400)

450 MHz

21.6

---

---

---

 

 

 

 

Adreno306

MSM8916

(Snapdragon 410)

??? MHz

???

 

 

 

 

Adreno320

(64 ALU)

MSM8960T

APQ8064 

APQ8064 1AA

(Snapdragon S4 Pro)

MPQ8064 

(Snapdragon S4 Prime)

400 MHZ

57

Adreno320

(96 ALU)

APQ8064T 

(Snapdragon 600)

400 MHz

86.4

APQ8064AB

(Snapdragon 600)

450 MHz

97.2

 

 

 

 

Adreno330

(128 ALU)

MSM8974

APQ8074

(Snapdragon 800)

450 MHz

129.6

MSM8274AB

MSM8974AB

MSM8974AC

(Snapdragon 800)

550 MHz

158.4

 

---

---

 

 

 

 

Adreno420

APQ8084

(Snapdragon 805)

500 MHz

???

 

ARMmali系列GPUIP授权的方式见于联发科、三星、海思、全志、瑞芯微、展讯、华为等公司的处理器中。

GPU Name

Chip

Clock

GFlops

Mali-400

---

200 MHz

2

AML8726-M3

250 MHz

2.25

ST-E U8500

275 MHz

2.48

SC7710

SC8810

Allwinner A10

Allwinner A10s

Allwinner A13

300 MHz

2.7

ST-E U8520

Rk2926

RK2928

MT6290

MT8638T

MT6572M

400 MHz

3.6

MT6572

MT8312

MT8382

500 MHz

4.5

---

533 MHz

4.8

Mali-400 MP2

LC1810

300 MHz

5.4

SC6825

SC8825

Allwinner A20

Allwinner A23

350 MHz

6.3

SC7730

SC8830

MT6582M

AML8726-MX

AML8726-MXS

AML8726-MXL

NS115

400 MHz

7.2

MT6582

500 MHz

9.0

Mali-400 MP4

RK3066

Exynos 4210

266 MHz

9.6

SC7735s

SC8735s

SC8835s

Exynos 4212

400 MHz

14.4

Exynos 4412

440 MHz

15.84

Exynos 4412

RK3188

533 MHz

19.2

 

 

 

 

Mali-450

---

375 MHz

5.6

Mali-450 MP4

AML8726-M803

AML8726-M805

500 MHz

29.8

MT6588

600 MHz

35.8

MT6592

MT8392

V9R1

700 MHz

41.8

Mali-450 MP6

AML8726-M801

AML8726-M802

AML8726-S802

600 MHz

53.8

Mali-450 MP8

---

600 MHz

71.7

 

 

 

 

Mali-T720

---

600 MHz

10.2

Mali-T720 MP8

---

600 MHz

81.6

 

 

 

 

Mali-T604

---

500 MHz

17

Mali-T604 MP2

Exynos 5250

500 MHz

34

Mali-T604 MP4

---

600 MHz

81.6

 

 

 

 

Mali-T628

---

533 MHz

17.06

Mali-T628 MP6

Exynos 5420

533 MHz

102.4

 

 

 

 

Mali-T760

---

600 MHz

20.4

Mali-T760 MP4

RK3288

600 MHz

81.6

Mali-T760 MP16

---

600 MHZ

326.4

 

NVIDIA早期推出过Gofroce系列移动GPU,目前已被Tegra系列处理器取代。Tegra1Tegra4系列使用的是Geforce ULP GPUTegra K1则采用了与同时期主流桌面平台相同的Kepler架构GPUNVIDIA 移动GPU除用于NVIDIA Tegra系列处理器外,也向ARM厂商开放Kepler GPU授权。

GPU Name

Chip

Clock

GFlops

GeforceULP x 8

Tegra 2

(AP20H)

300 MHz

4.8

Tegra 2

(T20)

333 MHz

5.6

Tegra 2

(AP25T25)

400 MHz

6.7

 

 

 

 

GeforceULP x 12

Tegra 3

(T30LAP33)

416 MHz

10

Tegra 3

450 MHz

10.8

Tegra 3

(T30T33AP37)

520 MHz

12.5

 

 

 

 

GeforceULP x 60

Tegra 4i

660 MHz

79.2

 

 

 

 

GeforceULP x 72

Tegra 4

672 MHz

96.8

 

 

 

 

KeplerCores x 192

Tegra K-1

950 MHz

365

 

Vivante GPUIP授权方式见于华为海思K3V2处理器。

GPU Name

Chip

Clock

GFlops

GC530

PXA920

315 MHz

0.96

 

 

 

 

GC800

---

450 MHz

3.6

GC800

RK2918

575 MHz

4.6

 

 

 

 

GC1000

PXA986

PXA988

PXA1088

600 MHz

9.6

GC1000 Plus

ATM7029

630 MHz

10.1

 

 

 

 

GC2000

i.MAX6

600 MHz

19.2

 

 

 

 

GC4000

K3V2

480 MHz

30.7

GC4000

---

680 MHz

43.5

 

 

 

 

GC6400

---

800 MHz

128

GC7000

---

---

---

GC8000

---

---

---

 

 

 

 

VideoCore1

VC01

---

---

VideoCore2

BCM2702

BCM2705

BCM2722

BCM2724

---

---

VideoCore3

BCM2727

BCM11181

---

---

VideoCore4

BCM2763

BCM2820

BCM2835

BCM11182

BCM11311 

BCM21533

BCM21654

BCM21663

BCM21664

BCM21664T

BCM28145

BCM28150

BCM28155

BCM23550

250 MHz

24

 

IntelBay Trail 架构Atom开始使用与桌面CPU相同架构的HD Graphics GPU

Name

type

EUs

Clock(MHz)

GFlops

HD Graphics 

(22nm Bay trail Atom)

Gen 7

4

667

42.7

 

 

 

 

 

HD Graphics 

(14nm Cherry trail Atom)

Gen 8

16

???

???

 

下表是同样使用Kepler架构的Tegra K1移动处理器和高端桌面显卡Geforce Titan Black、入门桌面显卡GT650,以及同样适用Intel第七代图形架构的的Bay Trail架构Atom Z3770Haswell架构Core i7-4770R、Core i3-4330T的对比:

 

CPU GFlops

GPU GFlops

GPU BandWidth(GB/s)

TDP(W)

Tegra K1 Quad A15

73.6

364.8

17

5

Geforce GTX Titan Black

N/A

5000

336.4

250

GeForce GTX 650

N/A

812.54

80

64

Atom Z3770

70.08

44.03

17.1

<4

Core i3-4330T

192

368

25.6

35

Core i7-4770R

409.6

832

25.6

65

表 4 使用相同GPU架构的桌面与移动处理器对比

注意本表中表中所列TDP (Thermal Design Power,热设计功耗)数据取厂商标称数据,即移动处理器/桌面处理器的典型频率或典型应用场景下全芯片数据,或独立显卡的典型频率下数据。表中所列GFlops为单精度,取典型频率下数据。

由表可见,移动GPU具有以下几个特点:

1. 处理能力较弱。桌面GPUCPU受芯片面积和TDP限制较小,执行单元数量和频率超过移动处理器。高端移动处理器的GPU处理能力接近中低端集成GPU的水平。

2. 带宽较小。独立GPU拥有独立于内存的显存,可以通过增加显存控制器数量与位宽提高显存带宽。集成GPU的桌面和移动处理器的内存控制器数量一般只有1-2个,并且由CPUGPU共享带宽,与独立GPU相比有很大差距。

3. 功耗低,单位功耗下性能较强。移动GPU使用了较低的电压和频率,以及漏电较低的工艺,以达到更低的功耗。

GPU通用计算编程语言综述

DirectX 10.0规范前的GPU中的主要可编程单元是顶点着色器和像素着色器。在没有采用统一渲染架构的GPU中,两者在物理上是分离的,数量上的比例也是固定的。一个具体的应用程序很难同时完全利用两种可编程着色器的性能。此外,传统GPU不允许计算单元之间通过片内的存储器进行通信,因此GPGPU也只能采用严格的SIMD模型。不允许数据间的通信,就限制了很多算法,也就制约了传统GPGPU的应用范围和代码效率。

最早的GPGPU开发直接使用了图形学API编程。这种开发方式要求编程人员将数据打包成纹理,将计算任务映射为对纹理的渲染过程,用汇编或者高级着色器语言(如GLSLCgHLSL)编写shader程序,然后通过图形学APIDirect3DOpenGL)执行。这种“曲线救国”的方式要求编程人员不仅要熟悉自己需要实现的计算和并行算法,还要对图形学硬件和编程接口有深入的了解。

2003年,斯坦福大学的Ian Buck等人对ANSI C进行扩展,开发了基于NVIDIA CgBrook源到源编译器。Brook可以将类似Cbrook C语言通过brcc编译器编译为Cg代码,隐藏了利用图形学API实现的细节,大大简化了开发过程。但早期的Brook编译效率很低,并且只能使用像素着色器进行运算。受GPU架构限制,Brook也缺乏有效的数据通信机制。AMD/ATI公司在其GPGPU通用计算产品Stream中采用了Brook的改进版本Brook+作为高级开发语言。Brook+的编译器的工作方式与Brook不同,提高了效率。在2009年推出Brook+ 1.3以前,Brook+早期版本与Brook相比在语法和编程模型上没有显著改进,同样缺乏有效的数据通信手段。

2006NVIDIA推出了第一个专用GPU通用计算编程API CUDA。与传统开发方式相比,CUDA硬件引入了SIMT概念,允许在细粒度上进行通信。CUDA的可编程性和某些应用程序的运行效率比传统GPGPU编程方式高。

2008616日,Khronos的通用计算工作小组成立。5个月后的20081118日,该工作组完成了OpenCL 1.0规范的技术细节。该技术规范在由Khronos成员进行审查之后,于2008128日公开发表[3]2010614日,OpenCL 1.1 发布。由于性能优化程序高度硬件相关,同样的OpenCL程序在不同的硬件上需要分别优化才能达到最佳性能。

GoogleAndroid 4.1中实验性的加入了renderscript,并在Android 4.2中允许使用GPU加速renderscript。总体而言,renderscript的可编程性与使用openGL基本相当。

目前市场上主流GPU对通用计算API支持如下:

 

OpenGL ES

DirectX

CUDA

OpenCL

renderscript

SGX554

2.0

9 level

N

1.1

Y

Nvidia Geforce ULP

2.0

9

N

N

Y

Nvidia Kepler

3.0

11

Y

1.2

Y

Adreno3xx

3.0

11

N

1.1

Y

HD Graphics

3.0

11

N

1.1

Y

Mali-T6xx

3.0

11

N

1.1

Y

GC4000

3.0

10

N

1.1

N/A

表 5 2014Q1市场流行GPU架构对图形学和通用计算API支持

 

目前主流移动操作系统对通用计算API支持如下:

 

OpenGL ES

DirectX

CUDA

OpenCL

renderscript

iOS 7

Y

N

N

N (native API)

N

Android 4.4

Y

N

N (supported by NVIDIA SDK)

N

Y

Windows 8 RT

Y

Y

Y

N/A

N

表 6 主流操作系统对图形学和通用计算API支持

由表可知,尽管主流硬件都能够支持openCL,但目前主流移动操作系统对专用通用计算API支持程度不佳。最适合的编程方式仍然是使用较为传统的OpenGL ES,这样可以实现良好的可移植性。如果是Android独占应用,可以考虑使用renderscript在不考虑可移植性的前提下,可以在特定平台上使用CUDA或者OpenCL以获得更高效率和可编程性。

(2015年3月29日补充:iOS上可以考虑使用metal)

结语

移动GPU通用计算呈现以下几个趋势:

1. 移动GPU性能快速提高,绝对性能受到芯片面积、带宽和功耗限制,单位功耗下性能对比桌面GPU具有优势。

2. 移动GPU架构转向统一渲染架构,有些直接使用与桌面GPU相同的架构。移动GPU对图形和通用计算API支持已与桌面GPU同步。

3. 主流移动操作系统对图形学APIGPU通用计算API支持不断完善,但目前在移动平台仍未出现统一的专用GPU通用计算API。通过OpenGL ES进行通用计算是未来数年中可以获得跨操作系统和硬件平台,具有良好可移植性的现实选择。

4. 利用GPU进行移动平台通用计算的软件数量正在增长,目前主要应用领域为图像与视频处理和编解码。未来可能成为热点的模式识别和增强现实应用需要大量计算和渲染,对GPU通用计算有迫切需求。


0 0
原创粉丝点击