SlideShare a Scribd company logo
1 of 54
Download to read offline
第10回 行列計算
(行列-行列積の高度な最適化)
長岡技術科学大学 電気電子情報工学専攻 出川智啓
今回の内容
2015/06/17GPGPU実践プログラミング2
 行列-行列積
 1スレッドが複数列を計算
 共有メモリによるデータ再利用
行列-行列積C=AB
 
k
jkkiji BAC ,,,
































NLL
N
LMM
L
NMM
N
BB
BB
AA
AA
CC
CC
,1,
,11,1
,1,
,11,1
,1,
,11,1









2015/06/17GPGPU実践プログラミング3
1スレッドが1要素の計算を担当
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
i
k
i
j
k
j
[A] [C]
[B]
THREADX
THREADY
2015/06/17GPGPU実践プログラミング4
for(i=0;i<SIZE;i++){
for(j=0;j<SIZE;j++){
for(k=0;k<SIZE;k++){
C[i+SIZE*j] 
+= A[i+SIZE*k]*B[k+SIZE*j];
}
}
}
GPUプログラムの性能評価
 行列サイズ _____________2
 ブロック _____________
 スレッド _____________
 実行時間 _____________ ms
 実効性能 _____________ FLOPS
2015/06/17GPGPU実践プログラミング5
4096
1,750
78G
128×2
32×2048
共有メモリによるデータ再利用
2015/06/17GPGPU実践プログラミング6
 1ブロック内でデータを共有
 スレッド(0,0)がBk,j,スレッド(1,0)が
Bk+1,j,・・・にアクセス
 共有メモリにキャッシュして再利用
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
GPUプログラムの性能評価
 行列サイズ _____________2
 ブロック _____________
 スレッド _____________
 実行時間 _____________ ms
 実効性能 _____________ FLOPS
2015/06/17GPGPU実践プログラミング7
4096
2,600
49G‐>52G
256×1
16×4096
1スレッドが複数列の点を計算
2015/06/17GPGPU実践プログラミング8
 i行j列,i行j+1列,i行j+2列・・・
 ブロックの取り方に注意が必要
 総和計算のカーネルVer.6と同じ考え方
 列(j)方向のスレッド数は1に固定
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
1スレッドが複数列の点を計算
2015/06/17GPGPU実践プログラミング9
 i行j列,i行j+1列,i行j+2列・・・
 ブロックの取り方に注意が必要
 総和計算のカーネルVer.6と同じ考え方
 列(j)方向のスレッド数は1に固定
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
//1スレッドが複数列の点の計算を担当
#define CALC_COL 16
#define THREADX 128
#define THREADY 1
#define BLOCKX  (SIZE/THREADX)
#define BLOCKY  (SIZE/THREADY/CALC_COL)
__global__ void matmulGPU
(float *A, float *B, float *C){
int i,j,k,c;
float sum[CALC_COL];
i = blockIdx.x*blockDim.x + threadIdx.x;
j = blockIdx.y*CALC_COL + threadIdx.y;
for(c=0;c<CALC_COL;c++){
sum[c]=0.0f;
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c]+=A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];
}
}
GPUプログラム(行列-行列積カーネル)
2015/06/17GPGPU実践プログラミング10
mm4.cu
配列添字i,jの決定
CALC_COL
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング11
#define CALC_COL 2
#define THREADX 3
#define THREADY 1
#define BLOCKX  (SIZE/THREADX)
#define BLOCKY  (SIZE/THREADY/CALC_COL)
i = blockIdx.x*blockDim.x+threadIdx.x;
j = blockIdx.y*CALC_COL +threadIdx.y;
2次元ブロック分割
2015/06/17GPGPU実践プログラミング12
 2次元的に並列化し,1スレッドが1点の積を計算
blockIdx.y=0 blockIdx.y=1
blockIdx.x=0blockIdx.x=1
gridDim.y=2
gridDim.x=2
blockDim.y=4
blockDim.x=4
threadIdx.x=
threadIdx.y=
(0,0)(0,1)(0,2)(0,3)
(1,0)(1,1)(1,2)(1,3)
(2,0)(2,1)(2,2)(2,3)
(3,0)(3,1)(3,2)(3,3)
1スレッドが読み込む要素の決定
2015/06/17GPGPU実践プログラミング13
 行列サイズ8×8, x,y方向スレッド数4,ブロック数2
 i = blockIdx.x*blockDim.x + threadIdx.x
 j = blockIdx.y*blockDim.y + threadIdx.y
(0,0)
(3,3) (3,3)
(3,3)
(0,0) (0,0)
block(0,0) block(0,1)
block(1,0) block(1,1)
threadIdx.x
threadIdx.y
j= 0 1 2 3 4 5 6 7
i=01234567
threadIdx
配列の要素番号iの計算
 N=12, <<<3, 2>>>で実行
2015/06/17GPGPU実践プログラミング14
c[i]
a[i]
b[i]
0 1 0 1
+ + + +
gridDim.x=3
blockDim.x=2
0 1
+ +
blockDim.x=2 blockDim.x=2
blockIdx.x=0 blockIdx.x=1 blockIdx.x=2
threadIdx.x=
i=  0   1   2   3   4   5  6   7  8   9  10 11
配列の要素番号iの計算
2015/06/17GPGPU実践プログラミング15
 threadIdx.xとiの対応
 iの決定
 配列サイズ=ブロックの数×1ブロックあたりのスレッドの数
 配列サイズ=ブロックの数×1ブロックあたりのスレッドの数
×1スレッドが計算する点の数
blockIdx.x 0 1 2
threadIdx.x 0 1 0 1 0 1
i 0 1
4
=4+0
5
=4+1
8
=8+0
9
=8+1
この影響をどのように書くか?
blockIdx.x>0
でthreadIdx.x
とiをどう対応さ
せるか
配列の要素番号iの計算
 1点目の計算
2015/06/17GPGPU実践プログラミング16
c[i]
a[i]
b[i]
0 1 0 1
+ + + +
gridDim.x=3
0 1
+ +
blockIdx.x=0 blockIdx.x=1 blockIdx.x=2
threadIdx.x=
i=  0   1   2   3   4   5  6   7  8   9  10 11
= blockIdx.x*(blockDim.x*2) + threadIdx.x
1スレッドが計算する
点の数=CALC_COL
blockDim.x=2 blockDim.x=2 blockDim.x=2
+ + + + +
配列の要素番号iの計算
 2点目の計算
2015/06/17GPGPU実践プログラミング17
c[i]
a[i]
b[i]
0 1 0 1
gridDim.x=3
0 1
blockIdx.x=0 blockIdx.x=1 blockIdx.x=2
threadIdx.x=
+i=  0   1   2   3   4   5  6   7  8   9  10 11
= blockIdx.x*(blockDim.x*2) + threadIdx.x+2
1点目と2点目の間隔
=スレッド数
blockDim.x=2 blockDim.x=2 blockDim.x=2
配列添字i,jの決定
CALC_COL
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング18
#define CALC_COL 2
#define THREADX 3
#define THREADY 1
#define BLOCKX  (SIZE/THREADX)
#define BLOCKY  (SIZE/THREADY/CALC_COL)
i = blockIdx.x*blockDim.x+threadIdx.x;
j = blockIdx.y*CALC_COL +threadIdx.y;
blockDim.yは1なので省略
block数が増えない
ように調整
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング19
0 0+00
CALC_COL
c
blockDim.yは1なのでcは1ずつ増加
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング20
CALC_COL
c
1 0+10
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング21
CALC_COL
c
0 0+01
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング22
CALC_COL
c
1 0+11
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング23
CALC_COL
c
0 0+02
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング24
CALC_COL
c
21 0+1
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング25
CALC_COL
c
0 0+03
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング26
CALC_COL
c
31 0+1
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング27
CALC_COL
c
0 0+04
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング28
CALC_COL
c
41 0+1
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング29
CALC_COL
c
0 0+05
1スレッドが複数列の点を計算
for(c=0; c<CALC_COL; c++){
sum[c]=0.0f; //結果を保持するレジスタの初期化
}
for(k=0; k<SIZE; k++){
for(c=0;c<CALC_COL;c++){
sum[c] += A[i+SIZE*k]*B[k+SIZE*(j+c)];
}
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];//結果の書き出し
}
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング30
CALC_COL
c
51 0+1
GPUプログラムの評価(FLOPS)
 行列サイズ _____________2
CALC_COL→
THREADX↓ 1 2 4 8 16
1 0.5 0.9 1.8 2.5 3.4
2 0.9 1.8 3.6 5.1 6.1
4 1.9 3.7 7.2 10 12
8 3.7 7.3 14 20 22
16 7.4 15 29 41 43
32 15 29 57 81 84
64 29 57 111 138 155
128 47 91 172 180 189
256 50 98 137 183 189
512 48 96 150 193 216
1024 48 95 175 202 ‐
2015/06/17GPGPU実践プログラミング31
4096
GPUプログラムの性能評価
 行列サイズ _____________2
 ブロック _____________
 スレッド _____________
 実行時間 _____________ ms
 実効性能 _____________ FLOPS
2015/06/17GPGPU実践プログラミング32
4096
640
216G
512×1(16点計算)
8×256
更なる性能改善
2015/06/17GPGPU実践プログラミング33
 1スレッドが複数列計算することで性
能が改善
 複数列のデータを再利用できるよう,
共有メモリも複数列分を確保
 ある列の計算をしているときに,他の列
のデータはキャッシュに残らない
 共有メモリを利用してキャッシュを模擬
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
更なる性能改善
2015/06/17GPGPU実践プログラミング34
 1スレッドが複数列計算することで性
能が改善
 複数列のデータを再利用できるよう,
共有メモリも複数列分を確保
 ある列の計算をしているときに,他の列
のデータはキャッシュに残らない
 共有メモリを利用してキャッシュを模擬
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
//1スレッドが複数列の点の計算を担当
//共有メモリによるデータ再利用版
#define CALC_COL  16
#define THREADX 128
#define THREADY 1
#define BLOCKX  (SIZE/THREADX)
#define BLOCKY  (SIZE/THREADY/CALC_COL)
__global__ void matmulGPU
(float *A, float *B, float *C){
int i,j,k,c,w;
float sum[CALC_COL],A_cache;
int tx;
__shared__ float sB[THREADX][CALC_COL];
i = blockIdx.x*blockDim.x + threadIdx.x;
j = blockIdx.y*CALC_COL   + threadIdx.y;
tx= threadIdx.x;
for(c=0;c<CALC_COL;c++){
sum[c] = 0.0f;
}
for(k=0; k<SIZE; k+=THREADX){
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
__syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++){
sum[c] += A_cache*sB[w][c];
}
}
__syncthreads();
}
for(c=0;c<CALC_COL;c++){
C[i+SIZE*(j+c)] = sum[c];
}
}
GPUプログラム(行列-行列積カーネル)
2015/06/17GPGPU実践プログラミング35
mm5.cu
配列添字i,jの決定
CALC_COL
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロックTHREADX
THREADY
2015/06/17GPGPU実践プログラミング36
#define CALC_COL 2
#define THREADX 3
#define THREADY 1
#define BLOCKX  (SIZE/THREADX)
#define BLOCKY  (SIZE/THREADY/CALC_COL)
i = blockIdx.x*blockDim.x+threadIdx.x;
j = blockIdx.y*CALC_COL +threadIdx.y;
共有メモリへ代入
2015/06/17GPGPU実践プログラミング37
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
tx=
0
1
2
THREADX
CALC_ROW
c
for(k=0; k<SIZE; k+=THREADX){//k=0
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
00 0
c
共有メモリへ代入
2015/06/17GPGPU実践プログラミング38
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
tx=
0
1
2
THREADX
CALC_ROW
c
for(k=0; k<SIZE; k+=THREADX){//k=0
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads(); //同期を取る
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
01 1
c
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング39
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=0
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
0+0
0 00
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング40
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=0
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
1 10
0+0
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング41
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
for(k=0; k<SIZE; k+=THREADX){//k=0
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
0+1
0 00
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング42
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=0
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
1 11
0+1
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング43
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=0
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
0+1
0 00
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング44
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=0
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();//同期を取る
}
0+1
0 00
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
共有メモリへ代入
2015/06/17GPGPU実践プログラミング45
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
THREADX
CALC_ROW
tx=
0
1
2
c
c
for(k=0; k<SIZE; k+=THREADX){//k=3
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
30 0
共有メモリへ代入
2015/06/17GPGPU実践プログラミング46
i
k
i
j
k
j
[A] [C]
[B]
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
THREADX
CALC_ROW
tx=
0
1
2
c
c
for(k=0; k<SIZE; k+=THREADX){//k=3
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
31 1
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング47
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=3
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
3+0
0 00
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング48
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=3
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
3+0
1 10
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング49
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=3
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
3+1
0 01
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング50
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=3
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
3+1
1 11
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング51
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=3
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();
}
3+2
0 02
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
1スレッドが複数列の点を計算
i
k
i
j
k
j
[A] [C]
[B]
2015/06/17GPGPU実践プログラミング52
CALC_ROW
THREADX
w
c
for(k=0; k<SIZE; k+=THREADX){//k=3
for(c=0;c<CALC_COL;c++){
sB[tx][c] = B[(k+tx)+SIZE*(j+c)];
}
_syncthreads();
for(w = 0;w<THREADX;w++){
A_cache = A[i+SIZE*(k+w)];
for(c=0;c<CALC_COL;c++)
sum[c] += A_cache*sB[w][c];
}
__syncthreads();//同期を取る
}
3+2
1 12
1スレッドの計算担当
1スレッドのメモリ
アクセス範囲
1ブロック
共有メモリ
GPUプログラムの評価(FLOPS)
 行列サイズ _____________2
CALC_COL→
THREADX↓ 1 2 4 8 16
1 0.3 0.6 1.1 1.9 2.6
2 1.2 2.3 4.3 6.9 7.0
4 2.9 8.0 14 11 16
8 7.9 6.5 13 23 35
16 7.0 14 27 49 78
32 14 28 54 102 168
64 28 56 110 207 331
128 54 106 205 336 404
256 72 141 242 302 350
512 72 143 207 213 354
1024 54 107 208 ‐ ‐
2015/06/17GPGPU実践プログラミング53
4096
GPUプログラムの性能評価
 行列サイズ _____________2
 ブロック _____________
 スレッド _____________
 実行時間 _____________ ms
 実効性能 _____________ FLOPS
2015/06/17GPGPU実践プログラミング54
4096
340
404G
128×1(16点計算)
32×256

More Related Content

What's hot

2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層智啓 出川
 
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門NVIDIA Japan
 
ICLR2020読み会 (neural-tangents)
ICLR2020読み会 (neural-tangents)ICLR2020読み会 (neural-tangents)
ICLR2020読み会 (neural-tangents)RyuichiKanoh
 
GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)智啓 出川
 
物体検知(Meta Study Group 発表資料)
物体検知(Meta Study Group 発表資料)物体検知(Meta Study Group 発表資料)
物体検知(Meta Study Group 発表資料)cvpaper. challenge
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門NVIDIA Japan
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介Preferred Networks
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編Fixstars Corporation
 
2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算智啓 出川
 
MLP-Mixer: An all-MLP Architecture for Vision
MLP-Mixer: An all-MLP Architecture for VisionMLP-Mixer: An all-MLP Architecture for Vision
MLP-Mixer: An all-MLP Architecture for Visionharmonylab
 
強化学習の分散アーキテクチャ変遷
強化学習の分散アーキテクチャ変遷強化学習の分散アーキテクチャ変遷
強化学習の分散アーキテクチャ変遷Eiji Sekiya
 
[DL輪読会]Neural Ordinary Differential Equations
[DL輪読会]Neural Ordinary Differential Equations[DL輪読会]Neural Ordinary Differential Equations
[DL輪読会]Neural Ordinary Differential EquationsDeep Learning JP
 
[DL輪読会]Objects as Points
[DL輪読会]Objects as Points[DL輪読会]Objects as Points
[DL輪読会]Objects as PointsDeep Learning JP
 
【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral Cloning【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral CloningDeep Learning JP
 
強化学習 DQNからPPOまで
強化学習 DQNからPPOまで強化学習 DQNからPPOまで
強化学習 DQNからPPOまでharmonylab
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII
 
[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object DetectionDeep Learning JP
 

What's hot (20)

2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
 
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
ICLR2020読み会 (neural-tangents)
ICLR2020読み会 (neural-tangents)ICLR2020読み会 (neural-tangents)
ICLR2020読み会 (neural-tangents)
 
[DL輪読会]World Models
[DL輪読会]World Models[DL輪読会]World Models
[DL輪読会]World Models
 
GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)GPGPU Seminar (PyCUDA)
GPGPU Seminar (PyCUDA)
 
物体検知(Meta Study Group 発表資料)
物体検知(Meta Study Group 発表資料)物体検知(Meta Study Group 発表資料)
物体検知(Meta Study Group 発表資料)
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算2015年度GPGPU実践プログラミング 第7回 総和計算
2015年度GPGPU実践プログラミング 第7回 総和計算
 
MLP-Mixer: An all-MLP Architecture for Vision
MLP-Mixer: An all-MLP Architecture for VisionMLP-Mixer: An all-MLP Architecture for Vision
MLP-Mixer: An all-MLP Architecture for Vision
 
強化学習の分散アーキテクチャ変遷
強化学習の分散アーキテクチャ変遷強化学習の分散アーキテクチャ変遷
強化学習の分散アーキテクチャ変遷
 
[DL輪読会]Neural Ordinary Differential Equations
[DL輪読会]Neural Ordinary Differential Equations[DL輪読会]Neural Ordinary Differential Equations
[DL輪読会]Neural Ordinary Differential Equations
 
[DL輪読会]Objects as Points
[DL輪読会]Objects as Points[DL輪読会]Objects as Points
[DL輪読会]Objects as Points
 
【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral Cloning【DL輪読会】Implicit Behavioral Cloning
【DL輪読会】Implicit Behavioral Cloning
 
強化学習 DQNからPPOまで
強化学習 DQNからPPOまで強化学習 DQNからPPOまで
強化学習 DQNからPPOまで
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
 
[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection[DL輪読会]Focal Loss for Dense Object Detection
[DL輪読会]Focal Loss for Dense Object Detection
 

Viewers also liked

2015年度GPGPU実践基礎工学 第1回 学際的分野における先端シミュレーション技術の歴史
2015年度GPGPU実践基礎工学 第1回 学際的分野における先端シミュレーション技術の歴史2015年度GPGPU実践基礎工学 第1回 学際的分野における先端シミュレーション技術の歴史
2015年度GPGPU実践基礎工学 第1回 学際的分野における先端シミュレーション技術の歴史智啓 出川
 
2015年度GPGPU実践プログラミング 第11回 画像処理
2015年度GPGPU実践プログラミング 第11回 画像処理2015年度GPGPU実践プログラミング 第11回 画像処理
2015年度GPGPU実践プログラミング 第11回 画像処理智啓 出川
 
2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ
2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ
2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ智啓 出川
 
2015年度GPGPU実践プログラミング 第13回 多粒子の運動
2015年度GPGPU実践プログラミング 第13回 多粒子の運動2015年度GPGPU実践プログラミング 第13回 多粒子の運動
2015年度GPGPU実践プログラミング 第13回 多粒子の運動智啓 出川
 
2015年度GPGPU実践プログラミング 第14回 N体問題
2015年度GPGPU実践プログラミング 第14回 N体問題2015年度GPGPU実践プログラミング 第14回 N体問題
2015年度GPGPU実践プログラミング 第14回 N体問題智啓 出川
 
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造智啓 出川
 
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)智啓 出川
 
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)智啓 出川
 
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール智啓 出川
 
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)智啓 出川
 
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算智啓 出川
 
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア智啓 出川
 
2015年度GPGPU実践基礎工学 第9回補足 GROUSEの利用方法
2015年度GPGPU実践基礎工学 第9回補足 GROUSEの利用方法2015年度GPGPU実践基礎工学 第9回補足 GROUSEの利用方法
2015年度GPGPU実践基礎工学 第9回補足 GROUSEの利用方法智啓 出川
 
2015年度GPGPU実践基礎工学 第12回 GPUによる画像処理
2015年度GPGPU実践基礎工学 第12回 GPUによる画像処理2015年度GPGPU実践基礎工学 第12回 GPUによる画像処理
2015年度GPGPU実践基礎工学 第12回 GPUによる画像処理智啓 出川
 
2015年度GPGPU実践基礎工学 第6回 ソフトウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第6回 ソフトウェアによるCPUの高速化技術2015年度GPGPU実践基礎工学 第6回 ソフトウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第6回 ソフトウェアによるCPUの高速化技術智啓 出川
 
2015年度GPGPU実践基礎工学 第8回 並列計算の概念 (プロセスとスレッド)
2015年度GPGPU実践基礎工学 第8回 並列計算の概念(プロセスとスレッド)2015年度GPGPU実践基礎工学 第8回 並列計算の概念(プロセスとスレッド)
2015年度GPGPU実践基礎工学 第8回 並列計算の概念 (プロセスとスレッド)智啓 出川
 
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術智啓 出川
 
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層智啓 出川
 
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例智啓 出川
 
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境智啓 出川
 

Viewers also liked (20)

2015年度GPGPU実践基礎工学 第1回 学際的分野における先端シミュレーション技術の歴史
2015年度GPGPU実践基礎工学 第1回 学際的分野における先端シミュレーション技術の歴史2015年度GPGPU実践基礎工学 第1回 学際的分野における先端シミュレーション技術の歴史
2015年度GPGPU実践基礎工学 第1回 学際的分野における先端シミュレーション技術の歴史
 
2015年度GPGPU実践プログラミング 第11回 画像処理
2015年度GPGPU実践プログラミング 第11回 画像処理2015年度GPGPU実践プログラミング 第11回 画像処理
2015年度GPGPU実践プログラミング 第11回 画像処理
 
2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ
2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ
2015年度GPGPU実践基礎工学 第4回 CPUのアーキテクチャ
 
2015年度GPGPU実践プログラミング 第13回 多粒子の運動
2015年度GPGPU実践プログラミング 第13回 多粒子の運動2015年度GPGPU実践プログラミング 第13回 多粒子の運動
2015年度GPGPU実践プログラミング 第13回 多粒子の運動
 
2015年度GPGPU実践プログラミング 第14回 N体問題
2015年度GPGPU実践プログラミング 第14回 N体問題2015年度GPGPU実践プログラミング 第14回 N体問題
2015年度GPGPU実践プログラミング 第14回 N体問題
 
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
2015年度GPGPU実践プログラミング 第2回 GPUのアーキテクチャとプログラム構造
 
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
 
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
 
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
2015年度GPGPU実践プログラミング 第6回 パフォーマンス解析ツール
 
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
 
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
2015年度GPGPU実践プログラミング 第12回 偏微分方程式の差分計算
 
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
2015年度GPGPU実践基礎工学 第7回 シングルコアとマルチコア
 
2015年度GPGPU実践基礎工学 第9回補足 GROUSEの利用方法
2015年度GPGPU実践基礎工学 第9回補足 GROUSEの利用方法2015年度GPGPU実践基礎工学 第9回補足 GROUSEの利用方法
2015年度GPGPU実践基礎工学 第9回補足 GROUSEの利用方法
 
2015年度GPGPU実践基礎工学 第12回 GPUによる画像処理
2015年度GPGPU実践基礎工学 第12回 GPUによる画像処理2015年度GPGPU実践基礎工学 第12回 GPUによる画像処理
2015年度GPGPU実践基礎工学 第12回 GPUによる画像処理
 
2015年度GPGPU実践基礎工学 第6回 ソフトウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第6回 ソフトウェアによるCPUの高速化技術2015年度GPGPU実践基礎工学 第6回 ソフトウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第6回 ソフトウェアによるCPUの高速化技術
 
2015年度GPGPU実践基礎工学 第8回 並列計算の概念 (プロセスとスレッド)
2015年度GPGPU実践基礎工学 第8回 並列計算の概念(プロセスとスレッド)2015年度GPGPU実践基礎工学 第8回 並列計算の概念(プロセスとスレッド)
2015年度GPGPU実践基礎工学 第8回 並列計算の概念 (プロセスとスレッド)
 
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
 
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
2015年度GPGPU実践基礎工学 第13回 GPUのメモリ階層
 
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
2015年度GPGPU実践基礎工学 第2回 GPGPUの歴史と応用例
 
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
 

Similar to 2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化)

第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
 
2015年度先端GPGPUシミュレーション工学特論 第3回 GPUプログラム構造の詳細 (threadとwarp)
2015年度先端GPGPUシミュレーション工学特論 第3回 GPUプログラム構造の詳細(threadとwarp)2015年度先端GPGPUシミュレーション工学特論 第3回 GPUプログラム構造の詳細(threadとwarp)
2015年度先端GPGPUシミュレーション工学特論 第3回 GPUプログラム構造の詳細 (threadとwarp)智啓 出川
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能MITSUNARI Shigeo
 
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...Toru Tamaki
 
Python Data-Visualization Package Status
Python Data-Visualization Package StatusPython Data-Visualization Package Status
Python Data-Visualization Package StatusYukio Okuda
 
第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016kyoto university
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Fixstars Corporation
 
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE) GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE) 智啓 出川
 
文献紹介:VideoMix: Rethinking Data Augmentation for Video Classification
文献紹介:VideoMix: Rethinking Data Augmentation for Video Classification文献紹介:VideoMix: Rethinking Data Augmentation for Video Classification
文献紹介:VideoMix: Rethinking Data Augmentation for Video ClassificationToru Tamaki
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsKohei KaiGai
 
文献紹介:Gate-Shift Networks for Video Action Recognition
文献紹介:Gate-Shift Networks for Video Action Recognition文献紹介:Gate-Shift Networks for Video Action Recognition
文献紹介:Gate-Shift Networks for Video Action RecognitionToru Tamaki
 
各言語の k-means 比較
各言語の k-means 比較各言語の k-means 比較
各言語の k-means 比較y-uti
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望Kohei KaiGai
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編Yosuke Onoue
 
diffの真髄
diffの真髄diffの真髄
diffの真髄fuku68
 
文献紹介:Learnable Gated Temporal Shift Module for Free-form Video Inpainting
文献紹介:Learnable Gated Temporal Shift Module for Free-form Video Inpainting文献紹介:Learnable Gated Temporal Shift Module for Free-form Video Inpainting
文献紹介:Learnable Gated Temporal Shift Module for Free-form Video InpaintingToru Tamaki
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_publicKazuaki Ishizaki
 

Similar to 2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化) (20)

第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
 
画像処理の高性能計算
画像処理の高性能計算画像処理の高性能計算
画像処理の高性能計算
 
2015年度先端GPGPUシミュレーション工学特論 第3回 GPUプログラム構造の詳細 (threadとwarp)
2015年度先端GPGPUシミュレーション工学特論 第3回 GPUプログラム構造の詳細(threadとwarp)2015年度先端GPGPUシミュレーション工学特論 第3回 GPUプログラム構造の詳細(threadとwarp)
2015年度先端GPGPUシミュレーション工学特論 第3回 GPUプログラム構造の詳細 (threadとwarp)
 
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
 
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
 
Python Data-Visualization Package Status
Python Data-Visualization Package StatusPython Data-Visualization Package Status
Python Data-Visualization Package Status
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE) GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
GPGPU Seminar (GPU Accelerated Libraries, 2 of 3, cuSPARSE)
 
文献紹介:VideoMix: Rethinking Data Augmentation for Video Classification
文献紹介:VideoMix: Rethinking Data Augmentation for Video Classification文献紹介:VideoMix: Rethinking Data Augmentation for Video Classification
文献紹介:VideoMix: Rethinking Data Augmentation for Video Classification
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
文献紹介:Gate-Shift Networks for Video Action Recognition
文献紹介:Gate-Shift Networks for Video Action Recognition文献紹介:Gate-Shift Networks for Video Action Recognition
文献紹介:Gate-Shift Networks for Video Action Recognition
 
各言語の k-means 比較
各言語の k-means 比較各言語の k-means 比較
各言語の k-means 比較
 
PCL
PCLPCL
PCL
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
 
diffの真髄
diffの真髄diffの真髄
diffの真髄
 
文献紹介:Learnable Gated Temporal Shift Module for Free-form Video Inpainting
文献紹介:Learnable Gated Temporal Shift Module for Free-form Video Inpainting文献紹介:Learnable Gated Temporal Shift Module for Free-form Video Inpainting
文献紹介:Learnable Gated Temporal Shift Module for Free-form Video Inpainting
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
 

More from 智啓 出川

Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋智啓 出川
 
Very helpful python code to find coefficients of the finite difference method
Very helpful python code to find coefficients of the finite difference methodVery helpful python code to find coefficients of the finite difference method
Very helpful python code to find coefficients of the finite difference method智啓 出川
 
Why do we confuse String and Array of Characters in Fortran?
Why do we confuse String and Array of Characters in Fortran?Why do we confuse String and Array of Characters in Fortran?
Why do we confuse String and Array of Characters in Fortran?智啓 出川
 
Pythonによる累乗近似
Pythonによる累乗近似Pythonによる累乗近似
Pythonによる累乗近似智啓 出川
 
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)智啓 出川
 
オブジェクト指向Fortranが拓く(はずだった)新しい世界
オブジェクト指向Fortranが拓く(はずだった)新しい世界オブジェクト指向Fortranが拓く(はずだった)新しい世界
オブジェクト指向Fortranが拓く(はずだった)新しい世界智啓 出川
 
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...智啓 出川
 
GPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial RunGPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial Run智啓 出川
 
Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能智啓 出川
 
PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法智啓 出川
 
教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性智啓 出川
 
GPGPU Seminar (GPGPU and CUDA Fortran)
GPGPU Seminar (GPGPU and CUDA Fortran)GPGPU Seminar (GPGPU and CUDA Fortran)
GPGPU Seminar (GPGPU and CUDA Fortran)智啓 出川
 
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用 (支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用 (支配方程式,CPUプログラム)智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第8回 偏微分方程式の差分計算 (拡散方程式)
2015年度先端GPGPUシミュレーション工学特論 第8回 偏微分方程式の差分計算(拡散方程式)2015年度先端GPGPUシミュレーション工学特論 第8回 偏微分方程式の差分計算(拡散方程式)
2015年度先端GPGPUシミュレーション工学特論 第8回 偏微分方程式の差分計算 (拡散方程式)智啓 出川
 

More from 智啓 出川 (20)

Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋
 
Very helpful python code to find coefficients of the finite difference method
Very helpful python code to find coefficients of the finite difference methodVery helpful python code to find coefficients of the finite difference method
Very helpful python code to find coefficients of the finite difference method
 
Why do we confuse String and Array of Characters in Fortran?
Why do we confuse String and Array of Characters in Fortran?Why do we confuse String and Array of Characters in Fortran?
Why do we confuse String and Array of Characters in Fortran?
 
Pythonによる累乗近似
Pythonによる累乗近似Pythonによる累乗近似
Pythonによる累乗近似
 
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
数値計算結果のPythonによる後処理について(1次元データのピーク値およびその位置の推定)
 
オブジェクト指向Fortranが拓く(はずだった)新しい世界
オブジェクト指向Fortranが拓く(はずだった)新しい世界オブジェクト指向Fortranが拓く(はずだった)新しい世界
オブジェクト指向Fortranが拓く(はずだった)新しい世界
 
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
Schematic diagrams of GPUs' architecture and Time evolution of theoretical FL...
 
GPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial RunGPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial Run
 
Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能
 
PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法PGI CUDA FortranとGPU最適化ライブラリの一連携法
PGI CUDA FortranとGPU最適化ライブラリの一連携法
 
教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性
 
GPGPU Seminar (GPGPU and CUDA Fortran)
GPGPU Seminar (GPGPU and CUDA Fortran)GPGPU Seminar (GPGPU and CUDA Fortran)
GPGPU Seminar (GPGPU and CUDA Fortran)
 
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
 
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
2015年度先端GPGPUシミュレーション工学特論 第15回 CPUとGPUの協調
 
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
2015年度先端GPGPUシミュレーション工学特論 第14回 複数GPUの利用
 
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用(高度な最適化)
2015年度先端GPGPUシミュレーション工学特論 第13回 数値流体力学への応用 (高度な最適化)
 
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用 (支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用(支配方程式,CPUプログラム)
2015年度先端GPGPUシミュレーション工学特論 第11回 数値流体力学への応用 (支配方程式,CPUプログラム)
 
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
 
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
 
2015年度先端GPGPUシミュレーション工学特論 第8回 偏微分方程式の差分計算 (拡散方程式)
2015年度先端GPGPUシミュレーション工学特論 第8回 偏微分方程式の差分計算(拡散方程式)2015年度先端GPGPUシミュレーション工学特論 第8回 偏微分方程式の差分計算(拡散方程式)
2015年度先端GPGPUシミュレーション工学特論 第8回 偏微分方程式の差分計算 (拡散方程式)
 

2015年度GPGPU実践プログラミング 第10回 行列計算(行列-行列積の高度な最適化)