Skip to content

Commit bbad578

Browse files
committedMar 21, 2018
update check_dimension
1 parent 51e0bd0 commit bbad578

File tree

6 files changed

+65
-4
lines changed

6 files changed

+65
-4
lines changed
 

‎README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@
1212
* hello
1313
hello world コード
1414
* sumArray
15-
ベクトルの和のサンプル
15+
ベクトルの和のサンプル
16+
* check_dimension
17+
グリッド,ブロック,スレッドの確認サンプル

‎check_dimension/Makefile

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Make file for check_dimension.cu
2+
check_dimension:check_dimension.cu
3+
nvcc -Wno-deprecated-gpu-targets -o check_dimension check_dimension.cu

‎check_dimension/check_dimension

528 KB
Binary file not shown.

‎check_dimension/check_dimension.cu

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#include <cuda_runtime.h>
2+
#include <stdio.h>
3+
4+
__global__ void checkIndex(void){
5+
printf("threadIdx: (%d,%d,%d) blockIdx: (%d, %d, %d) blockDim: (%d, %d, %d) gridDim: (%d, %d, %d)\n",
6+
threadIdx.x, threadIdx.y, threadIdx.z,
7+
blockIdx.x, blockIdx.y, blockIdx.z,
8+
blockDim.x, blockDim.y, blockDim.z,
9+
gridDim.x, gridDim.y,gridDim.z
10+
);
11+
}
12+
13+
int main(int argc, char** argv){
14+
// データの要素の合計数
15+
int nElem = 6;
16+
17+
// グリッドとブロック構造を定義
18+
//
19+
// thread < block < grid
20+
//
21+
// dim3 はdim3宣言とよばれていて
22+
// dim3 grid(10,10)はgridの中に10x10のblockを起動する
23+
// dim3 block(8,8,8)はblock中に8x8x8のthreadを起動する
24+
25+
dim3 block(3); // ブロック中に3 thread を起動する
26+
27+
// 指定されたデータサイズとスレッド数からグリッド数の引数(ブロック数)を指定する
28+
// (6 + 3 - 1) / 3 = 2
29+
dim3 grid((nElem + block.x - 1)/block.x);
30+
31+
// グリッドサイズをホスト側から確認
32+
printf("grid.x %d grid.y %d grid.z %d\n", grid.x, grid.y, grid.z);
33+
printf("block.x %d block.y %d block.z %d\n", block.x, block.y, block.z);
34+
35+
// グリッドサイズをデバイス側から確認
36+
checkIndex<<<grid, block>>>();
37+
38+
// デイバイスをリセット(これを記述しないと動かない)
39+
cudaDeviceReset();
40+
return(0);
41+
}

‎hello/hello

524 KB
Binary file not shown.

‎sumArray/sumArray.cu

+18-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#include <time.h>
33

44
// ホスト側でベクトルの和を計算
5-
void sumArrayOnHost(float *A, float *B, float *C, cont in N){
5+
void sumArraysOnHost(float *A, float *B, float *C, const int N){
66
for(int idx = 0; idx < N; idx++){
77
C[idx] = A[idx] + B[idx];
88
}
@@ -21,7 +21,22 @@ void initialData(float *ip, int size){
2121

2222
int main(int argc, char** argv){
2323
int nElem = 1024;
24+
size_t nByte = nElem * sizeof(float);
25+
// ホスト側の変数にはプレフィックス "h_" を付与する
26+
float *h_A, *h_B, *h_C;
27+
h_A = (float *)malloc(nByte);
28+
h_B = (float *)malloc(nByte);
29+
h_C = (float *)malloc(nByte);
30+
// 配列の要素を初期化
31+
initialData(h_A, nElem);
32+
initialData(h_B, nElem);
2433

25-
// 工事中...
26-
34+
// ホストで配列の和を計算
35+
sumArraysOnHost(h_A, h_B, h_C, nElem);
36+
37+
// メモリを開放
38+
free(h_A);
39+
free(h_B);
40+
free(h_C);
41+
return(0);
2742
}

0 commit comments

Comments
 (0)
Please sign in to comment.