はじめてのCUDA 〜CUDA事始め〜 はるにゃん Lv1くまー.

Slides:



Advertisements
Similar presentations
1 広島大学 理学研究科 尾崎 裕介 石川 健一. 1. Graphic Processing Unit (GPU) とは? 2. Nvidia CUDA programming model 3. GPU の高速化 4. QCD with CUDA 5. 結果 6. まとめ 2.
Advertisements

G ゼミ 2010/5/14 渡辺健人. パフォーマンスの測定 CUDA Visual Profiler CUDA の SDK に標準でついているパフォーマン ス測定用のツール 使い方: exe ファイルのパスと作業ディレクトリ指定して実 行するだけ 注意点 : GPU のコード実行後にプログラム終了前に,
第 11 章 関数について 11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 数学関数の自作.
CPU/GPUを協調利用する ソフトウェア開発環境
2010/7/26 高性能コンピューティング学論 講義資料 新しい並列処理「GPGPU」について 大島聡史 (東京大学 情報基盤センター)
プログラミングとは Q.プログラムとは何か? A.コンピュータを制御するための,コンピュータに対する命令(指示)の集まり.
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
次ページに関数の解答例 課題12-1 (問題と解答) 複素数xとして, 実部を入力してください.10 虚部を入力してください.20
CPUとGPUの 性能比較 -行列計算およびN体問題を用いて-
クラスタの構成技術と クラスタによる並列処理
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
算法数理工学 第1回 定兼 邦彦.
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
はじめてのCUDA 〜CUDA事始め〜 はるにゃん Lv1くまー.
プログラミングとは Q.プログラムとは何か? A.コンピュータを制御するための,コンピュータに対する命令(指示)の集まり.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
ファイル操作と文字列の利用.
TA 高田正法 B10 CPUを作る 2日目 SPIMのコンパイル TA 高田正法
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
正方行列向け特異値分解の CUDAによる高速化
Microsoft Visual Studio 2005 の使い方
Graphic Card を使った 高性能計算
Expression Templateを使った ベクトル演算のCUDAによる 実装と評価
格子QCDにおけるGPU計算 広大理 尾崎裕介 共同研究者 石川健一.
情報処理演習 (秋学期・樋口担当) 3回目 10/8 日本工業大学 コンピュータリテラシーII.
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
Cプログラミング演習.
プログラミング応用 printfと変数.
精密工学科プログラミング基礎 第10回資料 (12/18実施)
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
LU分解を用いた連立一次方程式.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
前回の練習問題.
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
デジタル画像とC言語.
2013年度 プログラミングⅡ ~ はじめてのプログラミング ~.
関数の再帰呼び出しとは ハノイの塔 リダイレクト レポート課題
関数への道.
GPGPUによる 飽和高価値 アイテム集合マイニング
2005年度 データ構造とアルゴリズム 第6回 「ハッシュ法を用いた探索」
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
GPUを用いた疎行列の格納形式による行列ベクトル積の評価
2017年度 プログラミングⅡ ~ はじめてのプログラミング ~.
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
2014年度 プログラミングⅡ ~ はじめてのプログラミング ~.
B演習(言語処理系演習)第2回 田浦.
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
プログラミング基礎a 第6回 C言語によるプログラミング入門 配列と文字列(その2)
2013年度 プログラミングⅠ ~ はじめてのプログラミング ~.
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
ネットワーク・プログラミング デバイスドライバと環境変数.
標準入出力、変数、演算子、エスケープシーケンス
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
情報処理Ⅱ 2005年11月25日(金).
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

はじめてのCUDA 〜CUDA事始め〜 はるにゃん Lv1くまー

普通の計算 GPGPU計算を行うため NVIDIAによるC言語開発環境 CUDAとは GPGPU計算を行うため          NVIDIAによるC言語開発環境 GPGPUとは →General Purpose computing on GPU →GPUによる汎用目的計算 普通の計算

→SLI(Scalable Link Interface)を使えば、 さらにコアの数は2倍3倍に!! なんでGPUを使うの? CPUのコア数は? →1〜 GPUのコア数は? →8〜 →SLI(Scalable Link Interface)を使えば、          さらにコアの数は2倍3倍に!!

すごい多い! GPUコア数っていくら? GeForce コア数 8600GT 32 8800GT 112 9600GT 64 9800GT 9800GTX/GTX+ 128 9800GX2 256 GTX 280 240 GTX 295 480 9400M 16 すごい多い!

NVIDIAのCUDAに対する説明は? GPUで並列アプリケーション開発を行うための標準C 言語 FFT (高速フーリエ変換) およびBLAS (線形代数の基本サブルーチン)用標準数値ライブラリ GPU とCPU間での高速データ転送パスを使用したコンピューティング専用CUDAドライバ OpenGLおよびDirectXグラフィックスドライバとCUDAドライバを同時使用可能 Linux 32/64ビット、Windows XP 32/64ビット、およびMacのOSをサポート ちょwおまwVistaは?www

どーなってんのー?w ATI Stream ATIが動画変換ソフトを提供 でも?あんまり聞かない GPGPUで検索しても?出てこない AMD(ATI)の動向は? ATI Stream ATIが動画変換ソフトを提供 でも?あんまり聞かない GPGPUで検索しても?出てこない どーなってんのー?w

GPGPUを使えば、 超マルチスレッドプログラミングが可能 一般のご家庭に スーパーコンピューターをご提供しますw CUDAとは NVIDIAのGPGPU開発環境 GPGPUを使えば、     超マルチスレッドプログラミングが可能 一般のご家庭に   スーパーコンピューターをご提供しますw

Multiprocessor = Core / 8 用語の定義 Grid = Block × N Block = Thread × M Multiprocessor = Core / 8

並列足し算1 __global__ void vecAdd(float* A, float* B, float* C) { int i = threadIdx.x; C[i] = A[i] + B[i]; } int main(void) { vecAdd<<<1, N>>>(A, B, C);

並列の足し算2 __global__ void vecAdd(float* A, float* B, float* C) { int i = blockIdx.x * blockDim.x + threadIdx.x; C[i] = A[i] + B[i]; } int main(void) { vecAdd<<<Grid, Thread>>>(A, B, C);

行列の足し算1 __global__ void matAdd(fload A[N][N], float B[N][N], float C[N][N]) { int i = threadIdx.x; int j = threadIdx.y; C[i][j] = A[i][j] + B[i][j]; } int main(void) { dim3 dimBlock(N, N); matAdd<<<1, dimBlock>>>(A, B, C);

行列の足し算2 __global__ void matAdd(fload A[N][N], float B[N][N], float C[N][N]) { int i = blockIdx.x * blockDim.x + threadIdx.x; int j = blockIdx.y * blockDim.y + threadIdx.y; C[i][j] = A[i][j] + B[i][j]; } int main(void) { dim3 dimBlock(16, 16); dim3 dimGrid((N + dimBlock.x - 1) / dimBlock.x, (N + dimBlock.y - 1) / dimBlock.y)); matAdd<<<dimGrid, dimBlock>>>(A, B, C);

実際には? HOST(CPU) DEVICE(GPU) データを準備 データを渡す 計算を実行 結果を取り戻す 計算結果

実際のコードにしてみると? /* 実際のコード */ #include <stdio.h> #include <cutil.h> #define N 16 __global__ void vecAdd(float* A, float* B, float* C) { int i = threadIdx.x; C[i] = A[i] + B[i]; } int main(int argc, char** argv) { CUT_DEVICE_INIT(argc, argv); float h_A[N], h_B[N], *h_C; float *d_A, *d_B, *d_C; int i;

実際のコードその2 for(i = 0; i < N; ++i) { h_A[i] = i; h_B[i] = i + 0.0001; } int mem_size = N*sizeof(float); CUDA_SAFE_CALL(cudaMalloc((void**)&d_A, mem_size)); CUDA_SAFE_CALL(cudaMalloc((void**)&d_B, mem_size)); CUDA_SAFE_CALL(cudaMalloc((void**)&d_C, mem_size)); CUDA_SAFE_CALL(cudaMemcpy(d_A, h_A, mem_size, cudaMemcpyHostToDevice)); CUDA_SAFE_CALL(cudaMemcpy(d_B, h_B, mem_size, int grid = 1, thread = N; vecAdd<<<grid, thread>>>(d_A, d_B, d_C); h_C = (float*)malloc(mem_size);

な、長い…、ぜぇはぁ 実際のコードその3 CUDA_SAFE_CALL(cudaMemcpy(h_C, d_C, mem_size, cudaMemcpyDeviceToHost)); for(i = 0; i < N; ++i) { printf("%f + %f = %f\n", h_A[i], h_B[i], h_C[i]); } free(h_C); CUDA_SAFE_CALL(cudaFree(d_A)); CUDA_SAFE_CALL(cudaFree(d_B)); CUDA_SAFE_CALL(cudaFree(d_C)); CUT_EXIT(argc, argv); な、長い…、ぜぇはぁ

C:¥Documents and Settings¥All Users Visual Studio 2005/2008の場合 C:¥Documents and Settings¥All Users ¥Application Data¥NVIDIA Corporation ¥NVIDIA CUDA SDK¥projects¥template をコピーしてファイル内の「template」文字列を 自分の望むソリューション名に変更

http://ja.wikipedia.org/wiki/GPGPU http://ja.wikipedia.org/wiki/CUDA Appendix http://ja.wikipedia.org/wiki/GPGPU http://ja.wikipedia.org/wiki/CUDA http://www.nvidia.co.jp/object/cuda_learn_jp.html