看cuda初級教程視頻筆記(周斌講的)--CUDA編程1

01年開始,研究人員把GPU當做數據並行協處理器(GPGPU)

07年,英偉達發佈CUDA (Compute Uniform Device Architecture)統一計算設備架構

08年,OpenCL規範,使得並行計算可以擴展到更多設備平臺上去

CUDA的一些信息(線程嘛)

層次化線程集合A hierarchy of thread groups,共享儲存Shared memories,同步Barrier Synchronization

CUDA術語 Host和device通常就是指cpu和gpu,採用ANSI標準C的擴展語言編程,編程時候,有主機端和設備端兩部分的代碼

Kernel,數據並行處理函數,在設備端有硬件負責創建調度線程,在主機端調這個函數



想吃飯了,先不寫了~哈哈哈

隔了四天接着學,接着寫


float *Md
int size=width*width*sizeof(float);
cudaMalloc((void**)&Md,size);
...
cudaFree(Md);

這個(void**)&Md指針是指向設備的指針,cpu不能調用

cudaMemcpy()內存傳輸 :主機端向主機端,設備端向設備端,主機端向設備端,設備端向主機端

cudaMemcpy(目的地址,原地址,大小,cudaMemcpyHostToDevice);

Matrix Multiply矩陣相乘算法提示:向量,點乘,行優先還是列優先?每次點乘結果輸出一個元素


1000*1000矩陣

1,000,000點乘,每一個點需要1000個乘法和1000個加法

void MatrixMulOnHost(float* M,float *N,float* p,int width)
{
for(int i=0;i<width;++i)
for(int j+0;j<width;++j)
{
float sum=0;
for(int k=0;K<width;++k)
{float a =M[i*width+k];
float b=N[k*width+j];
sum+=a*b;
}
P[i*width+j]=sum;
}
}
 這是在cpu上的算法,現在看CUDA算法框架

第一步,是要管理整個內存,要爲輸入的原始數據已經輸出的結構,這些要分配內存 M N P

第二步,並行運算

第三部,把結果拷貝回來,釋放內存

void MatrixMulOnDevice(float* M,float *N,float* p,int width)
{
	int size=width*width*sizeof(float);
	//第一步,給M和N裝填設備內存
	cudaMalloc(Md,size);
	cudaMemcpy(Md,M,size,cudaMemcpyHostToDevice);
	cudaMalloc(Nd,size);
	cudaMemcpy(Nd,N,size,cudaMemcpyHostToDevice);
	cudaMalloc(Pd,size);
	//都是GPU上的空間
	//2.kernel invocation code	 
}
__global__ void MatrixMulKernel(loat* Md,float *Nd,float* pd,int width)
{
	
	int tx=threadIdx.x;
	int ty=threadIdx.y;
	float Pvalue=0;
	for(int k=0;k<width;++k)
	{
		float Mdelement =Md[ty*Md.width+k];
		float Ndelement =Nd[k*Md.width+tx];
		Pvalue+=Mdelement*Ndelement;
	}
	Pd[ty*width+tx]=Pvalue;
}
	//第三步,cuda C調用Kernel
	//Setup the execution configuration
	dim3 dimBlock(WIDTH,WIDTH);
	dim3 dimGrid(1,1); 
	MatrixMulKernel<<<dimGrid,dimBlock>>>(Md,Nd,Pd);
	//是不是少了一個參數啊; 

之前看的沒有這樣調用的啊,
dim3 dimBlock(WIDTH,WIDTH);

這的是每個block立面的線程數對嗎,這就是1,000,000 啊,不是說的好這裏的約束是65536個嘛

下面的意思是調用了1個block,然後立面有一百萬個線程同時運算,這個參數也有問題,這個課結束了,容我再看看


發佈了27 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章