Concurrent GPU Programming - Waterloo Computer Graphics Lab

Execution time and speed-up for largest work-load (see Table 4 for implementation .... spectrophotometer and compares their execution time with a single-thread ...
340KB Sizes 0 Downloads 219 Views
CS842 - Concurrent Programming Mechanisms and Tools

Concurrent GPU Programming

Lesley Northam School of Computer Science University of Waterloo 200 University Avenue West Waterloo, Ontario, Canada N2L 3G1

April 12, 2009.

Contents 1 Introduction

5

2 Background

5

2.1

Stream programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

2.2

General Purpose GPU programming . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

3 CUDA Platform

7

3.1

Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

3.2

Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

3.2.1

Global memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

3.2.2

Shared memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

3.2.3

Local memory

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

3.2.4

Constant Memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

3.2.5

Texture memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12

3.3.1

Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.3.2

Grids . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.3.3

Coalescing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

3.4

Warps and branching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

3.5

Atomic operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

3.3

4 CUDA Applications

15

4.1

Heterogeneous programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

4.2

Program setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

4.2.1

Kernel functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15

4.2.2

Device functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

4.3

Synchronization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17

4.4

Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19

4.4.1

Kernel functions must have a void return type . . . . . . . . . . . . . . . . .

19

4.4.2

Kernel and device functions cannot be recursive . . . . . . . . . . . . . . . . .

20

4.4.3

Kernel and device functions cannot define static variables . . . . . . . . . . .

21

4.4.4

Kernel and device functions cannot have a variable number of arguments . .

21

4.4.5

Kernel and device function parameters are limited to 256 bytes . . . . . . . .

22

4.4.6

Kernel and device functions cannot directly communicate with the host . . .

22

4.4.7

Kernel