( CUDA CUDA CUDA CUDA ( NVIDIA CUDA I

Similar documents
07-二村幸孝・出口大輔.indd

NUMAの構成

GPU CUDA CUDA 2010/06/28 1

GPU.....

1. GPU コンピューティング GPU コンピューティング GPUによる 汎用コンピューティング GPU = Graphics Processing Unit CUDA Compute Unified Device Architecture NVIDIA の GPU コンピューティング環境 Lin

TSUBAME2.0 における GPU の 活用方法 東京工業大学学術国際情報センター丸山直也第 10 回 GPU コンピューティング講習会 2011 年 9 月 28 日

GPU GPU CPU CPU CPU GPU GPU N N CPU ( ) 1 GPU CPU GPU 2D 3D CPU GPU GPU GPGPU GPGPU 2 nvidia GPU CUDA 3 GPU 3.1 GPU Core 1

TSUBAME2.0におけるGPUの 活用方法

GPGPUイントロダクション

Slide 1


1 OpenCL Work-Item Private Memory Workgroup Local Memory Compute Device Global/Constant Memory Host Host Memory OpenCL CUDA CUDA Compute Unit MP Proce

untitled

! 行行 CPUDSP PPESPECell/B.E. CPUGPU 行行 SIMD [SSE, AltiVec] 用 HPC CPUDSP PPESPE (Cell/B.E.) SPE CPUGPU GPU CPU DSP DSP PPE SPE SPE CPU DSP SPE 2

熊本大学学術リポジトリ Kumamoto University Repositor Title GPGPU による高速演算について Author(s) 榎本, 昌一 Citation Issue date Type URL Presentation

Slide 1

GPGPU

CUDA 連携とライブラリの活用 2

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

01_OpenMP_osx.indd

1 OpenCL OpenCL 1 OpenCL GPU ( ) 1 OpenCL Compute Units Elements OpenCL OpenCL SPMD (Single-Program, Multiple-Data) SPMD OpenCL work-item work-group N

Microsoft PowerPoint - 先端GPGPUシミュレーション工学特論(web).pptx

WinHPC ppt

main.dvi

Microsoft Word - C.....u.K...doc

para02-2.dvi

1 GPU GPGPU GPU CPU 2 GPU 2007 NVIDIA GPGPU CUDA[3] GPGPU CUDA GPGPU CUDA GPGPU GPU GPU GPU Graphics Processing Unit LSI LSI CPU ( ) DRAM GPU LSI GPU

C

XACCの概要

2 09:00-09:30 受付 09:30-12:00 GPU 入門,CUDA 入門 13:00-14:30 OpenACC 入門 + HA-PACS ログイン 14:45-16:15 OpenACC 最適化入門と演習 16:30-18:00 CUDA 最適化入門と演習

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裶²ó ¨¡ À©¸æ¹½Â¤¡§·«¤êÊÖ¤· ¨¡

いまからはじめる組み込みGPU実装

第5回お試しアカウント付き並列プログラミング講習会

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

マルチコアPCクラスタ環境におけるBDD法のハイブリッド並列実装

第3回戦略シンポジウム緑川公開用

IPSJ SIG Technical Report Vol.2013-HPC-138 No /2/21 GPU CRS 1,a) 2,b) SpMV GPU CRS SpMV GPU NVIDIA Kepler CUDA5.0 Fermi GPU Kepler Kepler Tesla

r07.dvi

ohp07.dvi

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

23 Fig. 2: hwmodulev2 3. Reconfigurable HPC 3.1 hw/sw hw/sw hw/sw FPGA PC FPGA PC FPGA HPC FPGA FPGA hw/sw hw/sw hw- Module FPGA hwmodule hw/sw FPGA h

DO 時間積分 START 反変速度の計算 contravariant_velocity 移流項の計算 advection_adams_bashforth_2nd DO implicit loop( 陰解法 ) 速度勾配, 温度勾配の計算 gradient_cell_center_surface 速

卒業論文

AutoTuned-RB

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

GPGPUクラスタの性能評価

GPU Computing on Business

Cell/B.E. BlockLib

115 9 MPIBNCpack 9.1 BNCpack 1CPU X = , B =

II 3 yacc (2) 2005 : Yacc 0 ~nakai/ipp2 1 C main main 1 NULL NULL for 2 (a) Yacc 2 (b) 2 3 y

ex01.dvi

comment.dvi

double float

ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014

MPI または CUDA を用いた将棋評価関数学習プログラムの並列化 2009/06/30

Microsoft PowerPoint - GPU_computing_2013_01.pptx

untitled

r08.dvi

44 6 MPI 4 : #LIB=-lmpich -lm 5 : LIB=-lmpi -lm 7 : mpi1: mpi1.c 8 : $(CC) -o mpi1 mpi1.c $(LIB) 9 : 10 : clean: 11 : -$(DEL) mpi1 make mpi1 1 % mpiru

ACE Associated Computer Experts bv

(MIRU2010) NTT Graphic Processor Unit GPU graphi

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments

Microsoft PowerPoint - suda.pptx

概要 目的 CUDA Fortran の利用に関する基本的なノウハウを提供する 本チュートリアル受講後は Web 上で公開されている資料等を参照しながら独力で CUDA Fortran が利用できることが目標 対象 CUDA Fortran の利用に興味を抱いている方 前提とする知識 Fortran

CUDA基礎1

ohp08.dvi

第3章 OpenGL の基礎

ex01.dvi

Baud Rate 9600 Parity NONE Number of Data Bits 8 Number of Stop Bits 1 Flow Control NONE 1 RS232C 200mm 2,000mm DIMM ( ) Telescope East/West LX200 * 1

FFTSS Library Version 3.0 User's Guide

GPU チュートリアル :OpenACC 篇 Himeno benchmark を例題として 高エネルギー加速器研究機構 (KEK) 松古栄夫 (Hideo Matsufuru) 1 December 2018 HPC-Phys 理化学研究所 共通コードプロジェクト

18 C ( ) hello world.c 1 #include <stdio.h> 2 3 main() 4 { 5 printf("hello World\n"); 6 } [ ] [ ] #include <stdio.h> % cc hello_world.c %./a.o

GPU n Graphics Processing Unit CG CAD


Krylov (b) x k+1 := x k + α k p k (c) r k+1 := r k α k Ap k ( := b Ax k+1 ) (d) β k := r k r k 2 2 (e) : r k 2 / r 0 2 < ε R (f) p k+1 :=

untitled

ohp03.dvi

XMPによる並列化実装2

(K&R 2.9) ~, &,, >>, << 2. (K&R 5.7) 3. (K&R 5.9) 4. (K&R 5.10) (argc argv atoi(), atof() ) 5. (K&R 7.5) (K&R 7.6) - FILE, stdin, stdout, std

1 CUI CUI CUI 1.1 cout cin redirect.cpp #i n c l u d e <s t r i n g > 3 using namespace std ; 5 6 i n t main ( void ) 7 { 8 s t r i n g s ; 10 c

& & a a * * ptr p int a ; int *a ; int a ; int a int *a

Informatics 2015

Informatics 2014

WebGL OpenGL GLSL Kageyama (Kobe Univ.) Visualization / 57

CudaWaveField

第3章 OpenGL の基礎

WinDriver PCI Quick Start Guide

2008 DS T050049

RaVioli SIMD

BW BW

エラー処理・分割コンパイル・コマンドライン引数

スパコンに通じる並列プログラミングの基礎

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

GPU のアーキテクチャとプログラム構造 長岡技術科学大学電気電子情報工学専攻出川智啓

tuat1.dvi

I. Backus-Naur BNF : N N 0 N N N N N N 0, 1 BNF N N 0 11 (parse tree) 11 (1) (2) (3) (4) II. 0(0 101)* (

main

64bit SSE2 SSE2 FPU Visual C++ 64bit Inline Assembler 4 FPU SSE2 4.1 FPU Control Word FPU 16bit R R R IC RC(2) PC(2) R R PM UM OM ZM DM IM R: reserved

j x j j j + 1 l j l j = x j+1 x j, n x n x 1 = n 1 l j j=1 H j j + 1 l j l j E

‚æ2›ñ C„¾„ê‡Ìš|

Transcription:

GPGPU (II) GPGPU CUDA 1 GPGPU CUDA(CUDA Unified Device Architecture) CUDA NVIDIA GPU *1 C/C++ (nvcc) CUDA NVIDIA GPU GPU CUDA CUDA 1 CUDA CUDA 2 CUDA NVIDIA GPU PC Windows Linux MaxOSX CUDA GPU CUDA NVIDIA web CUDA Zone(http://www.nvidia.com/object/cuda home new.html) CUDA web CUDA Toolkit API ( ) web NVIDIA Forums (NVIDIA ) NVIDIA *1 1

(http://forums.nvidia.com/, http://forum.nvidia.co.jp/) CUDA CUDA CUDA CUDA (http://www.kohgakusha.co.jp/books/detail/978-4-7775-1477-9) NVIDIA CUDA Information Site wiki (http://gpu.fixstars.com/) CUDA NVIDIA GPU GPU GPU (Compute Capability 1.3) GPU CUDA Toolkit version 2.3 CUDA API web (http://www.cspp.cc.utokyo.ac.jp/ohshima/) 2 CUDA CUDA CUDA 1. CUDA (CUDA GPU ) 2. CUDA Toolkit 3. CUDA SDK NVIDIA CUDA (http://developer.nvidia.com/object/cuda download.html) Windows Linux MaxOSX OS (VisualStudio gcc ) Linux CUDA SDK Linux $HOME/NVIDIA GPU Computing SDK/C/bin/linux/release ( $HOME/NVIDIA GPU Computing SDK/C make ) CUDA GPU 2

GUI CUDA Linux (OS) PC GPU PC PC NVIDIA GPU ( CUDA CUDA ) web PC CUDA PC web ( ) 3 CUDA 1 CUDA CUDA CUDA CUDA GPU RuntimeAPI GPU DriverAPI RuntimeAPI 3.1 CUDA 1 2 1 C CUDA 2 CUDA cu 1 CUDA CPU ( CUDA 3 ) CUDA global <<< >>> cuda CPU C 3

1 C ( ) CUDA( ) 4

C > ls cpu.c > gcc -O3 cpu.c > ls a.out cpu.c >./a.out CPU: InA: 0.30 0.60 0.70 0.50 0.30 0.50 0.60 0.20 0.90 0.10 0.20 0.70 ( ) InB: 0.00 0.60 0.40 0.60 0.20 0.50 0.80 0.60 0.20 0.80 0.40 0.70 ( ) Out: 0.30 1.20 1.10 1.10 0.50 1.00 1.40 0.80 1.10 0.90 0.60 1.40 ( ) > CUDA > ls gpu.cu > nvcc -O3 gpu.cu -I${HOME/NVIDIA_GPU_Computing_SDK/C/common/inc > ls a.out gpu.cu >./a.out GPU: InA: 0.30 0.60 0.70 0.50 0.30 0.50 0.60 0.20 0.90 0.10 0.20 0.70 ( ) InB: 0.00 0.60 0.40 0.60 0.20 0.50 0.80 0.60 0.20 0.80 0.40 0.70 ( ) Out: 0.30 1.20 1.10 1.10 0.50 1.00 1.40 0.80 1.10 0.90 0.60 1.40 ( ) > 2 2 CUDA CPU (nvcc) GPU (a.out ) CUDA 1 GPU CPU global <<< >>> GPU CUDA nvcc CPU CPU GPU GPU CUDA GPU GPU GPU GPU CUDA ( CUDA ClearSpeed Advanced Accelerator Cell BE SPE ) CUDA 3 5

nvcc global CPU GPU device GPU GPU host CPU CPU (global/device CPU ) CPU GPU CUDA CPU GPU GPU CPU CPU GPU CPU-GPU API cudamemcpy API MPI OpenMP cuda API API cudasetdevice GPU ID cudamalloc GPU ( ) cudamemcpy CPU-GPU (CPU GPU GPU CPU 4 ) cudafree GPU CUDA 6

nvcc nvcc gcc nvcc gcc gcc -Wall ( ) nvcc -cubin -ptx GPU PTX ( RuntimeAPI ) GPU -arch CUDA (Compute Capability) GPU GPU GPU arch nvcc -h 3.2 CUDA CPU GPU CPU-GPU GPU 1 CPU GPU CUDA GPU GPU ID ID ( 3) pthread rank MPI 3 CUDA ID CUDA threadid BlockId ID ID CPU GPU 1 <<< >>> 7

1 16*16=256 GPU 256 CUDA CPU GPU 4 CUDA CUDA CUDA CUDA 4.1 CUDA NVIDIA GPU 2010 2 GT200 ( GT200) 4 GPU ScalarProcessor(SP) 8 MultiProcessor(MP) MP GPU MP ( MP SP ) MP 4.3 GPU ( NVIDIA GPU AMD GPU ) 4 NVIDIA GPU GPU 1GPU 30 MP SP 240 (TeslaS1070 1 4GPU 1GPU SP 240 ) GPU CPU 1GPU 1000 SP CPU CPU CPU SP SIMD CPU 8

MP 30 CPU CPU 240 CPU SP SIMD MP SP SP CUDA SP SP CPU GPU SP MP MP MP MP SP ( syncthreads ) MP SP GPU CPU GPU atomic 4.2 GPU SP MP SP 8 MP MP GPU GT200 CPU CPU GPU SP MP CPU CPU CPU GPU GPU SP SP MP CUDA SP (Thread) MP (Block) (Thread Block) (Grid) ( 5) MP MP MP 128 ( ) 9

5 SP MP 4.3 GPU 6 GPU GPU Registers MP GT200 MP 16384 CPU SharedMemory MP MP GT200 MP 16KB shared SharedMemory CPU Grid ( ) GlobalMemory GPU (VRAM) TextureMemory device global GlobalMemory CPU API Grid ConstantMemory GPU GPU 64KB GPU MP ConstantMemory 8KB constant ConstantMemory CPU API Grid TextureMemory GPU (VRAM) 10

GlobaleMemory GPU MP TextureMemory 6KB 8KB CPU API Grid LocalMemory GlobalMemory 6 GPU 5 CUDA 2 CUDA CPU(C ) GlobalMemory SharedMemory 5.1 GlobalMemory GlobalMemory 3.1 1 device GlobalMemory global 4.3 global GlobalMemory GlobalMemory GPU SP 7 1 2 1 ( global ) GlobalMemory 2 ( global ) 11

1 ( ) GlobalMemory (MP *2 ) 2 ( global ) GlobalMemory GlobalMemory GPU 8 GlobalMemory atomic 8 data[0] += 1; atomicadd(&data[0], 1); ( 16384 ) atomic (reduction) GlobalMemory ( ) 5.2 SharedMemory SharedMemory SharedMemory GlobalMemory GlobalMemory ID CPU ( ) ( ) (SharedMemory SharedMemory ) 9 fdata kernel1 GlobalMemory *2 MP MP MP 12

(test1.cu) #include <stdlib.h> #include <stdio.h> device float globalarray[2]; global void kernel1(){ if(blockidx.x==0){ globalarray[0] = 111.11f; else{ globalarray[1] = 222.22f; global void kernel2(float *array){ if(blockidx.x==0){ array[0] = globalarray[1]; else{ array[1] = globalarray[0]; int main(int argc, char** argv){ int i; printf("gpu:\n"); srand(0); cudasetdevice(0); float h_out[2]; float *d_out; cudamalloc((void**)&d_out, sizeof(float)*2); kernel1<<< 2, 1 >>>(); kernel2<<< 2, 1 >>>(d_out); cudamemcpy(h_out, d_out, sizeof(float)*2, cudamemcpydevicetohost); printf("out: "); for(i=0; i<2; i++)printf(" %.2f", h_out[i]); printf("\n"); cudafree(d_out); return 0; >nvcc -O3 -o test1 test1.cu -I/home/ohshima/NVIDIA_GPU_Computing_SDK/C/common/inc >./test1 GPU: Out: 222.22 111.11 > 7 GlobalMemory 1(GlobalMemory ) 13

(test2.cu) #include <stdlib.h> #include <stdio.h> global void kernel1(int *data){ data[0] += 1; int main(int argc, char** argv){ printf("gpu:\n"); srand(0); cudasetdevice(0); int h_out = 0; int *d_out; cudamalloc((void**)&d_out, sizeof(int)); cudamemcpy(d_out, &h_out, sizeof(int), cudamemcpyhosttodevice); kernel1<<< 128, 128 >>>(d_out); // 128*128=16384parallel cudamemcpy(&h_out, d_out, sizeof(int), cudamemcpydevicetohost); printf("out: "); printf("%d\n", h_out); cudafree(d_out); return 0; >nvcc -O3 -o test2 test2.cu -I/home/ohshima/NVIDIA_GPU_Computing_SDK/C/common/inc >./test2 GPU: Out: 2 > 8 GlobalMemory 2( ) GlobalMemory GlobalMemory kernel2 SharedMemory GlobalMemory 1 kernel2 SharedMemory SharedMemory GlobalMemory SharedMemory GlobalMemory SharedMemory SharedMemory 14

// 256 // SharedMemory global void kernel1(float *fout, float *fdata){ int i; float tmp = 0.0f; int id = blockidx.x*blockdim.x + threadidx.x; // GlobalMemory for(i=0; i<256; i++){ tmp += fdata[i]; // ID tmp *= (float)threadidx.x; fout[id] = tmp; // SharedMemory global void kernel2(float *fout, float *fdata){ shared float sdata[256]; int i; float tmp = 0.0f; int id = blockidx.x*blockdim.x + threadidx.x; // GlobalMemory SharedMemory sdata[threadidx.x] = fdata[threadidx.x]; // syncthreads(); // SharedMemory if(threadidx.x==0){ for(i=1; i<256; i++){ sdata[0] += sdata[i]; // syncthreads(); // ID tmp = sdata[0] * (float)threadidx.x; fout[id] = tmp; 9 SharedMemory CUDA GPU CUDA GPU ( ) 15