これがベトナム大学院の実態だ!

Trường Đại Học Bách Khoa Thành Phố Hồ Chí Minhの大学院修士課程に社会人入学

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);
}