CUDA Programming Tutorial 2 - Memory Management – Matrix Transpose

Similar documents

Parallel Computation of Neural Network

Microsoft PowerPoint - 30.ppt [호환 모드]

Microsoft PowerPoint - CUDA_NeuralNet_정기철_발표자료.pptx

204

종합물가정보 2016년 4월호

005- 4¿ùc03ÖÁ¾š

2009 April

Index

알람음을 출력하는 이동통신 단말기에 있어서, 실시간 알람음을 출력하는 음향 출력 수단; 디지털 멀티미디어 방송(DMB: Digital Multimedia Broadcasting, 이하 'DMB'라 칭함) 신호를 수신하면 오디오 형태로 변 환하여 DMB의 음향을 전달하는

C# Programming Guide - Types

<30362DB1E8BFB5C5C22E687770>

08이규형_ok.hwp

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

Microsoft PowerPoint - o8.pptx

목차 1. 개요 USB 드라이버 설치 (FTDI DRIVER) FTDI DRIVER 실행파일 USB 드라이버 확인방법 DEVICE-PROGRAMMER 설치 DEVICE-PROGRAMMER

Microsoft PowerPoint - AMP_ pptx

Microsoft PowerPoint - MDA 2008Fall Ch2 Matrix.pptx

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

2

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Something that can be seen, touched or otherwise sensed

제1장 마을유래 605 촌, 천방, 큰동네, 건너각단과 같은 자연부락을 합하여 마을명을 북송리(北松里)라 하 였다. 2006년에 천연기념물 468호로 지정되었다. 큰마을 마을에 있던 이득강 군수와 지홍관 군수의 선정비는 1990년대 중반 영일민속박물 관으로 옮겼다. 건

외교부 재외국민보호과-pdf

02 C h a p t e r Java

Microsoft PowerPoint - 알고리즘_1주차_2차시.pptx

PowerPoint Presentation

Microsoft PowerPoint - ch07 - 포인터 pm0415

(JBE Vol. 21, No. 1, January 2016) (Regular Paper) 21 1, (JBE Vol. 21, No. 1, January 2016) ISSN 228

Manufacturing6

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

Ⅱ. Embedded GPU 모바일 프로세서의 발전방향은 저전력 고성능 컴퓨팅이다. 이 러한 목표를 달성하기 위해서 모바일 프로세서 기술은 멀티코 어 형태로 발전해 가고 있다. 예를 들어 NVIDIA의 최신 응용프 로세서인 Tegra3의 경우 쿼드코어 ARM Corte


늘푸른세상4월-136호

CUDA 를게임프로젝트에적용하기 유영천 - 모여서각자코딩하는모임

광덕산 레이더 자료를 이용한 강원중북부 내륙지방의 강수특성 연구

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

C++ Programming

Recommender Systems - Beyond Collaborative Filtering

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

Oracle Database 10g: Self-Managing Database DB TSC


<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

2

Chap 6: Graphs

2007_2_project4

WS2003°¡À̵åÃÖÁ¾

결과보고서

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

OR MS와 응용-03장

(......).hwp

PowerPoint 프레젠테이션

강의10

03홍성욱.hwp

BMP 파일 처리

김기남_ATDC2016_160620_[키노트].key

adfasdfasfdasfasfadf

00-Intro

02 _ The 11th korea Test Conference The 11th korea Test Conference _

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

歯sql_tuning2

<C3D6C0E7C3B528BAB8B5B5C0DAB7E1292D322E687770>

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

BGP AS AS BGP AS BGP AS 65250

T100MD+

DocsPin_Korean.pages

<C8ADB7C220C5E4C3EBC0E52E687770>


API 매뉴얼

Backup Exec

*지급결제제도 01_차례

2002년 2학기 자료구조

9¿ù-2Â÷

KNK_C_05_Pointers_Arrays_structures_summary_v02

6주차.key

Chap 6: Graphs

04_인덱스_ _먹1도

01이국세_ok.hwp

경북 친환경우수농산물 생산 및 유통체계 개선방안

PowerPoint Presentation

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는

untitled

PowerPoint Presentation

4장. 순차자료구조

자바로

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

2012_¿©¸§¼ö·Ãȸ_24_28_À̹ÌÁö

리뉴얼 xtremI 최종 softcopy

MAGIC-6004M_K

PowerPoint 프레젠테이션

DE1-SoC Board

*º¹ÁöÁöµµµµÅ¥-¸Ô2Ä)

PowerPoint Presentation

13김상민_ok.hwp

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Nov.; 25(11),

Microsoft PowerPoint - Master-ChiWeon_Yoon.ppt

Transcription:

CUDA Programming Tutorial 2 Memory Management Matrix Transpose Sungjoo Ha April 20th, 2017 Sungjoo Ha 1 / 29

Memory Management 병렬연산장치를활용하기위해하드웨어구조의이해를바탕에둔메모리활용이필요 CUDA 프로그래밍을하며알아야하는두가지메모리특성을소개 전치행렬계산을예제로 Sungjoo Ha 2 / 29

CUDA Memory Model Thread Per-thread Local Memory Block Per-block Shared Memory Grid Block Block Block Block Block Block Grid Global Memory Block Block Block Block Block Block Sungjoo Ha 3 / 29

Measurement cudaeventrecord(start, 0); for (int i=0; i < NUM_REPS; i++) { kernel<<<blocks, threads>>>(d_odata, d_idata, size_x, size_y); } cudaeventrecord(stop, 0); cudaeventsynchronize(stop); float kerneltime; cudaeventelapsedtime(&kerneltime, start, stop); Sungjoo Ha 4 / 29

Grid, block, thread dim3 block(size_x/tile_dim, size_y/tile_dim); dim3 threads(tile_dim, BLOCK_ROWS); Grid, block, thread 는 3 차원까지생성할수있음 상식적인방식으로 global id 가부여됨 Sungjoo Ha 5 / 29

Comparison Strategy 최고의성능을낼수있는코드와구현체를비교 성능차이를메우는식으로점진적으로진행 Sungjoo Ha 6 / 29

Copy 메모리복사보다전치행렬계산이빠를수는없다 성능의상한 1 1 물론복사도아주 trivial 하지는않고최적화할여지가있음 Sungjoo Ha 7 / 29

Copy global void copy(float *odata, float *idata, int width, int height) { int xindex = blockidx.x * TILE_DIM + threadidx.x; int yindex = blockidx.y * TILE_DIM + threadidx.y; int index = xindex + width*yindex; } for (int i=0; i<tile_dim; i+=block_rows) { odata[index+i*width] = idata[index+i*width]; } Sungjoo Ha 8 / 29

Copy Throughput Matrix Size Operation Throughput 1024 2 Copy 216.1302 GB/s 2048 2 Copy 219.5193 GB/s 4096 2 Copy 211.8688 GB/s 8192 2 Copy 219.6724 GB/s 16384 2 Copy 221.8129 GB/s 사실상행렬의크기에무관한 throughput 2 2 TILE DIM = 16, BLOCK ROWS = 16 Sungjoo Ha 9 / 29

Naive Transpose global void transpose1(float *odata, float *idata, int width, int height) { int xindex = blockidx.x * TILE_DIM + threadidx.x; int yindex = blockidx.y * TILE_DIM + threadidx.y; int index_in = xindex + width * yindex; int index_out = yindex + height * xindex; } for (int i=0; i<tile_dim; i+=block_rows) { odata[index_out+i] = idata[index_in+i*width]; } Sungjoo Ha 10 / 29

Naive Transpose Throughput Matrix Size Operation Throughput Operation Throughput 1024 2 Copy 216.1302 GB/s Naive 70.6491 GB/s 2048 2 Copy 219.5193 GB/s Naive 87.6363 GB/s 4096 2 Copy 211.8688 GB/s Naive 92.5567 GB/s 8192 2 Copy 219.6724 GB/s Naive 105.7644 GB/s 16384 2 Copy 221.8129 GB/s Naive 91.6658 GB/s Sungjoo Ha 11 / 29

Transpose vs Copy 코드상의차이는별로없으나성능차이는크게남 일차적으로적용할기법은 global memory coalescing Sungjoo Ha 12 / 29

Global Memory Coalescing Global memory 접근은 128 byte 단위로이루어지며 3 같은 warp 에있는 thread 가연속된 4 byte 값을접근하면단 1 회의 global memory 접근만일어남 만약캐시라인에맞지않으면 (unaligned) 해당하는캐시라인만큼의접근이일어날수있음 3 Compute capability 버전에따라다름 Sungjoo Ha 13 / 29

Copy/Naive Transpose Memory Access Pattern Sungjoo Ha 14 / 29

Copy/Naive Transpose Memory Access Pattern Copy 의경우 TILE_DIM 이 16 으로 half warp 의크기에딱맞음 Global memory 접근방식을보면하나의 half warp 는정확히두번의메모리접근만필요 읽기 1 회쓰기 1 회 Naive transpose 는쓰기가 coalesced 되지않음 동일 warp 의모든 thread 가다른캐시라인에접근 쓰기작업시 half warp 가총 16 회의메모리접근 Sungjoo Ha 15 / 29

Coalesced Transpose global void transpose2(float *odata, float *idata, int width, int height) { shared float tile[tile_dim][tile_dim]; } int xindex = blockidx.x * TILE_DIM + threadidx.x; int yindex = blockidx.y * TILE_DIM + threadidx.y; int index_in = xindex + (yindex)*width; xindex = blockidx.y * TILE_DIM + threadidx.x; yindex = blockidx.x * TILE_DIM + threadidx.y; int index_out = xindex + (yindex)*height; for (int i=0; i<tile_dim; i+=block_rows) { tile[threadidx.y+i][threadidx.x] = idata[index_in+i*width]; } syncthreads(); for (int i=0; i<tile_dim; i+=block_rows) { odata[index_out+i*height] = tile[threadidx.x][threadidx.y+i]; } Sungjoo Ha 16 / 29

Coalesced Transpose Memory Access Pattern Sungjoo Ha 17 / 29

Coalesced Transpose Memory Access Pattern Shared memory 는 global memory 와달리 coalesced 접근이필요하지않음 Global memory 에서 coalesced 접근으로데이터를읽고이를 shared memory 에쓴뒤 Shared memory 의 noncontiguous 메모리에접근하여이를 global memory 에 coalesced 접근으로쓰기 Sungjoo Ha 18 / 29

Coalesced Transpose Throughput Matrix Size Operation Throughput Operation Throughput Operation Throughput 1024 2 Copy 216.1302 GB/s Naive 70.6491 GB/s Coalesced 211.9276 GB/s 2048 2 Copy 219.5193 GB/s Naive 87.6363 GB/s Coalesced 211.5603 GB/s 4096 2 Copy 211.8688 GB/s Naive 92.5567 GB/s Coalesced 196.7131 GB/s 8192 2 Copy 219.6724 GB/s Naive 105.7644 GB/s Coalesced 123.0030 GB/s 16384 2 Copy 221.8129 GB/s Naive 91.6658 GB/s Coalesced 110.4511 GB/s Sungjoo Ha 19 / 29

Coalesced Transpose Memory Access Pattern 행렬이적당히작을때에는복사와같은성능 4 가설몇가지 syncthreads() 가성능저하를가져오는가? Shared memory bank conflict 가성능저하를가져오는가? 4 공정한비교를위해서는 shared memory 를사용한복사와비교해야함 Sungjoo Ha 20 / 29

Shared Memory Access Pattern Shared memory 는 32-bit word 로구성된 32 개의 bank 로이루어져있음 원칙적으로동시에같은 bank 에접근할수없음 다만아예동일한 word 에접근하는경우에는 bank conflict 가일어나지않음 Sungjoo Ha 21 / 29

Bank Conflict Sungjoo Ha 22 / 29

Bank Conflict Sungjoo Ha 23 / 29

No Bank-Conflict Transpose shared float tile[tile_dim][tile_dim+1]; Padding 을추가해서 bank conflict 를피하도록구성 Sungjoo Ha 24 / 29

No Bank-Conflict Transpose Throughput Matrix Size Operation Throughput Operation Throughput Operation Throughput 1024 2 Copy 216.1302 GB/s Coalesced 211.9276 GB/s Padded 211.1651 GB/s 2048 2 Copy 219.5193 GB/s Coalesced 211.5603 GB/s Padded 218.1229 GB/s 4096 2 Copy 211.8688 GB/s Coalesced 196.7131 GB/s Padded 193.3113 GB/s 8192 2 Copy 219.6724 GB/s Coalesced 123.0030 GB/s Padded 122.8659 GB/s 16384 2 Copy 221.8129 GB/s Coalesced 110.4511 GB/s Padded 110.4508 GB/s Sungjoo Ha 25 / 29

Analysis Global memory coalescing 은매우중요함 이경우에는 bank conflict 를제거하는것이큰영향을주진않음 하드웨어종류에따라다른결과가나올수있음 어떤부분이병목인지알기위해위의코드를분해하여비교해볼수있음 아직최적화할여지는남아있음 (transpose 도 copy 도 ) Tile 크기, row 크기 Thread, block 개수 Instruction 최적화 알고리즘변경 Sungjoo Ha 26 / 29

Conclusion 실제구현체를만들어보고다양한설정을비교해보기전에성능을예측하기는매우어려움 인내심을갖고다양한구현과설정을실험해봐야함 Sungjoo Ha 27 / 29

Next Topic Parallel reduction Instruction-level parallelism Parallel scan algorithm Sungjoo Ha 28 / 29

References Optimizing Matrix Transpose in CUDA, NVidia, 2010 CUDA C Best Practices Guide, NVidia CUDA C Programming Guide, NVidia Sungjoo Ha 29 / 29