Lập trình nâng cao感想およびCuda C本試験コード
Học kỳ 1/2017-2018に行われたLập trình nâng caoだが、期末試験がほとんどできておらず、かつ出席をとらない授業であったため事実上出席点もなく、唯一の救いはプレゼンテーションが過大評価と思えるほどの好評であったからか、成績は10点満点中8点であった。
逆に中間・期末2回の試験を受験、プレゼン2回実施、レポート2回提出したにも拘わらずたったの3.7点というわけのわからない科目もあるので、これはもう運とか、先生と合う合わないといった次元のものかもしれない。
さて、そのLập trình nâng caoだが、Cuda Cの問題を自宅で自己採点というか再現してみた。
/* del 20180130_exam.exe nvcc 20180130_exam.cu -o 20180130_exam.exe -deviceemu ./20180130_exam */ #include<stdio.h> #include<cutil.h> #define ROWS 3 #define CLOS 5 __global__ void add_mat(float* mA, float* mB, float* mC, int nRows, int nCols){ *(mC + blockIdx.x * nCols + threadIdx.x) = *(mA + blockIdx.x * nCols + threadIdx.x)+ *(mB + blockIdx.x * nCols + threadIdx.x); } __global__ void show_mat(float* mC, int nRows, int nCols){ printf("%3.1f ", *(mC + blockIdx.x * nCols + threadIdx.x)); } int main(int argc, char* argv[]){ //int LnBlock, LnThread, LnRows, LnCols; float LnaA[ROWS][CLOS] = { { 1.1, 1.2, 1.3, 1.4, 9.4 } ,{ 2.1, 7.3, 1.7, 0.9, 2.4 } ,{ 3.1, 7.3, 1.7, 0.9, 3.5 } }; float LnaB[ROWS][CLOS] = { { 3.5, 0.3, 3.1, 0.7, 9.4 } ,{ 7.2, 7.3, 1.7, 0.9, 2.4 } ,{ 8.2, 7.3, 1.7, 0.9, 9.9 } }; float LnaC[ROWS][CLOS] = { 0.0 }; printf("Question a\n"); add_mat<<<(ROWS * CLOS), 1>>>(&LnaA[0][0], &LnaB[0][0], &LnaC[0][0], ROWS, 1); show_mat<<<(ROWS * CLOS), 1>>>(&LnaC[0][0], ROWS, 1); printf("\nQuestion b\n"); add_mat<<<1, (ROWS * CLOS)>>>(&LnaA[0][0], &LnaB[0][0], &LnaC[0][0], ROWS, 1); show_mat<<<1, (ROWS * CLOS)>>>(&LnaC[0][0], ROWS, 1); printf("\nQuestion c\n"); add_mat<<<ROWS, CLOS>>>(&LnaA[0][0], &LnaB[0][0], &LnaC[0][0], ROWS, CLOS); show_mat<<<ROWS, CLOS>>>(&LnaC[0][0], ROWS, CLOS); }