Sponge: Portable Stream Programming on Graphics Engines

spongemintΛογισμικό & κατασκευή λογ/κού

2 Δεκ 2013 (πριν από 3 χρόνια και 8 μήνες)

235 εμφανίσεις

Sponge:
Portable Stream
Programming
on Graphics
Engines

2012. 04.

승학

seunghac@gmail.com

Amir
Hormati
,
Mehrzad

Samadi
, Mark
Woh
, Trevor
Mudge
, and Scott
Mahlke

ASPLOS

11

Contents

01 / Introduction GPU

02 /
CUDA, Stream Model

03 /
Sponge

04 / Experiments

03 / Conclusion

Graphics

Processor

Unit

(

GPU)

그래픽

처리

장치




GPU


컴퓨터

그래픽


전문



담당
하는



이다
.

3
D

그래픽


주로

담당


,




관련된

연산







CPU









줄일





.


러한

그래픽

처리

장치를








카드


그래픽

카드




비디


카드라




.

1

Introduction GPU






모바

,

데스크톱

시스템


포함
되어



.

저렴한

가격

대비

고성




그램




1

Why GPU?

0
250
500
750
1000
1250
1500
2002
2004
2006
2008
2010
2012
Theoretical GFLOPS/s

NVIDIA GPU
INTEL CPU
GeForce

GTX 480

GeForce

GTX 280

GeForce

8800 GTX

GeForce

7800 GTX

GeForce

6800 Ultra

HOST
:

CPU

DEVICE
:

GPU

1

GPU Architecture

Interconnection Network

Global Memory(Device Memory)

Kernel 1

Kernel 2

CPU

Shared

Shared

Shared

0

1

3

2

5

4

7

6

0

1

3

2

5

4

7

6

0

1

3

2

5

4

7

6

Regs

Regs

Regs

스레드
,

블록
,

그리드

스레드마






레지스터








.

레지스터


지역메모리


일부

이다
.

블록
내의

스레드들


공유메모리


공유한

.

모든

블록들





메모리


공유한

.

2

CUDA Programming model

2

CUDA Execution model

Grid

SM 1

Shared

Regs

0

1

2

3

4

5

6

7

SM 0

Shared

Regs

0

1

2

3

4

5

6

7

SM 2

Shared

Regs

0

1

2

3

4

5

6

7

SM 3

Shared

Regs

0

1

2

3

4

5

6

7

SM n

Shared

Regs

0

1

2

3

4

5

6

7

2

CUDA Execution model

Block 0

Block 1

Block 3

1

5

7

0

2

4

6

3

Shared

Register

SM0

Block 2

Warp 0

Warp 1

ThreadId

0

31

32

63




추상


계산과

메모리

접근


분리시킴

병렬

처리와

통신

처리


모아




.



그래머





레벨


세부

내용





리즘


집중할





.

버퍼


이용하여

통신한

.

최근
에는

스트림


플리케









장에

대한

연구들




.

2

Stream Programming Model

Actor 1

Actor 2

Actor 5

Splitter

Actor 4

Actor 3

Joiner

Actor 6

Hello,

Sponge

……………………

Bob

??

3

Sponge


양한

GPU


대한


적화


CUDA

코드





스트림

그래프


대한


적화


배열






적화







로의




메모리

계층







효율



스트림







3

Sponge:
Overview

Loop Unrolling

Software
Prefetching

Bank Conflict Resolution

Helper Threads

Shared, Global Memory

Reorganization and
Classification

Memory

Layout

Graph



Restructuring

Register

Optimization

StreamIt


CUDA

Stream


Splitter,

Actor,

Join


CUDA





재구


3

Sponge:
Reorganization


M 0

M 1

M 2

M 3

M 4

M 5

M 6

M 7

C 0

C 1

C 2

C 3

C 4

C 5

C 6

C 7



Memory Time

Memory bound

M 0

M 1

M 4

M 5

M 2

M 3

M 6

M 7

C 0

C1

C 2

C 3

C 4

C 5

C 6

C 7



Computation Time

Computation bound

High

Traffic

Actors
:

HiT


-

메모리

접근




.


-

공유메모리와

스레드




감소


-

공유메모리보






메모리


버퍼


용이







.


Low

Traffic

Actors
:

LoT


-

메모리

접근




.


-

스레드








-

공유

메모리


버퍼



용하








.

3

Sponge:
Classification




접속








차적


word

접근


안된

.

모아




/

기가

안된

.

3

Sponge:
Global Memory

Interconnection Network

Global Memory(Device Memory)

Shared

Shared

Shared

0

1

3

2

5

4

7

6

0

1

3

2

5

4

7

6

0

1

3

2

5

4

7

6

Regs

Regs

Regs



번째






오는






한꺼번


공유

메모리



는다
.


-



필터





필터


위해












.


-








충족시켜준

.







공유

메모리





후에
,



필터






메모리


접근한

.

대역폭과





향상



.

3

Sponge:
Shared Memory

Interconnection Network

Global Memory(Device Memory)

Shared

Share
d

Share
d

0

1

3

2

5

4

7

6

0

1

3

2

5

4

7

6

0

1

3

2

5

4

7

6

Regs

Regs

Regs

공유

메모리





메모리보


100





빠르

.




메모리







모아




/

기를

해준

.

스레드



수는

공유

메모리



기에





한된

.

3

Sponge:
Using Shared Memory

For number of iterations
For number of pops
For number of pushs
Shared
Global
Shared
Global
syncthreads
syncthreads
End Kernel
Begin Kernel
<<<
Blocks
,
Threads
>>>
:
Work
공유

메모리


스레드



수를


한한

.




용되






로세서는






불러올





.

하나의

warp



도우미

스레드




.

3

Sponge:
Helper Threads

For number of iterations
syncthreads
syncthreads
If helper threads
If helper threads
If worker threads
End Kernel
Begin Kernel
<<<
Blocks
,
Threads
+
Helper
>>>
:
Work
Shared
Global
Shared
Global
레지스터







높인

.






레지스터






i+
1


반복한

.






레지스터
에서

공유

메모리






i


반복



.

GPU
에게

중복









.

3

Sponge:
Data
Prefetch

For number of iterations
syncthreads
syncthreads
For number of pops
For number of pops
For number of pops
For number of pushs
Begin Kernel
<<<
Blocks
,
Threads
>>>
:
End Kernel
If not the last iteration
Work
Regs
Global
Regs
Global
Shared
Regs
Shared
Global





unrolling


유사
하다
.
(Loop

Count





.
)

GPU
에게

중복










.

레지스터







높인

.

반복

제어로

인한


버헤드


줄어


.

메모리




반복



적용






.

3

Sponge:
Loop unrolling

For number of iterations
/
2
Begin Kernel
<<<
Blocks
,
Threads
>>>
:
End Kernel
syncthreads
syncthreads
Work
Work
For number of pops
Shared
Global
For number of pops
Shared
Global
syncthreads
syncthreads
For number of pushs
Shared
Global
For number of pushs
Shared
Global
4

Experiments:

Methodology

Set

of

benchmarks

from

the

StreamIt

Suite

3

Ghz

Intel

Core

2

Duo

CPU


6

GB

Ram

Stream

Processors

Processor

Clock

Memory

Configuration

Memory

Bandwidth

240

1476

MHz

2GB DDR3

159.0 GB/s

NVIDIA

Geforce

GTX285

4

Experiments:

Result


Baseline CPU

0
10
20
30
40
50
Speedup(X)

With Transfer
Without Transfer
4

Experiments:

Result


Baseline GPU

0
1
2
3
4
5
6
7
Speedup(X)

Shared/Global
Prefetch/Unrolling
Helper Threads
Graph Restructuring





시스템


계속
하여


어나게




이다
.

GPU

programming



적화의

문제를







.

Sponge



동으



양한

GPU



적화


CUDA

코드



성하여



.

스트림

그래프



적화

배열




하여



성을


공한

.

5

Conclusion

Thank you for listen

Anything else?