僅作個人記錄
參考:cuda程式設計(四)並行化我們的程式_mingchao_sun-csdn部落格
順便說一句,這位博主的cuda系列寫的很清晰,關於環境配置,也建議參考這位博主,簡單直接就行。
過程中碰到問題,還是建議檢視官方api文件
cuda runtime api :: cuda toolkit documentation
上一次的**(單執行緒)速度很拉閘,原因是(來自:cuda程式設計(四)並行化我們的程式_mingchao_sun-csdn部落格):
在 cuda 中,gpu記憶體用於儲存複製過來的資料的部分,稱為global memory。global memory是沒有 cache 的,而且,訪問global memory 所需要的時間(即 latency,延遲)是非常長的,通常是數百個 cycles(時鐘週期)。由於我們的程式只有乙個 thread,所以每次它讀取 global memory 的內容,都要等到讀取資料、累加到 sum 之後,才能進行下一步。這就是為什麼**表現會這麼的差,所使用的記憶體頻寬這麼的小的原因。
由於 global memory 沒有 cache,所以避開巨大的 latency 的方法,是利用大量的threads。假設現在有大量的 threads 同時執行,那麼當乙個 thread 讀取記憶體,開始等待結果的時候,gpu 就可以切換到下乙個 thread,並讀取下乙個記憶體位置。因此,當thread 的數目夠多的時候,就可以完全把 global memory 的巨大 latency 隱藏起來了,而此時就可以有效利用gpu的記憶體頻寬。
所以我們需要並行化我們的程式
#include #include #include //用於計時
#include #include using namespace std;
#define thread_num 1024
#define data_size 1048576
int data[data_size];
//產生隨機數
void generatenum(int *data, int size)
void printdeviceprop(const cudadeviceprop &prop)
//cuda初始化
bool initcuda()
} cudasetdevice(device);//決定使用編號為device的gpu
return true;
}//__global__函式(gpu上執行),計算立方和
__global__ void sum_squares(int *num, int *result, clock_t *time)
int main()
執行結果:
耗時:3189869/(
1620000
∗1000)=
0.001969
s3189869 / (1620000*1000) = 0.001969s
318986
9/(1
6200
00∗1
000)
=0.0
0196
9s記憶體頻寬:
data_size 為 1048576 = 1024*1024 也就是 1m,1m 個 int(32bits) 數字的資料量是 1m * (32/8) byte= 4mb,記憶體頻寬約為:
4 mb
/0.001969s=
2031.488mb
/s=2.03gb
/s4mb / 0.001969s = 2031.488mb/s = 2.03gb/s
4mb/0.
0019
69s=
2031
.488
mb/s
=2.0
3gb/
s已經是快了很多了,是之前的600多倍,不過1050ti的記憶體頻寬在 112 gb/s,還是不夠。
關於threadidx,可以看cuda(10)之深入理解threadidx_林微的部落格-csdn部落格
或者看programming guide :: cuda toolkit documentation
Mongodb一些記錄3
document compoundindexes public class user寫法如上,name和city將作為復合索引,數字引數指定索引的方向,1為正序,1為倒序。方向對單鍵索引和隨機存不要緊,但如果你要執行分組和排序操作的時候,它就非常重要了。document public class d...
boost spirit 的一些記錄
最近的工作跟 boost spirit 多一些,本來想整理乙個較為系統的筆記,不過感覺目前思路還比較凌亂,先隨便記錄一些。spirit 是 boost 中的乙個 ll解析器框架,他完成實現乙個 ebnf 語法解析器的功能,但它的輸入為c 語言。ll parser framework represen...
MFC的一些記錄
型別 mfc 將c 的關鍵字用巨集定義成以下內容。mfc型別 意思 c 型別 bool,boolean 布林型boolean byte 1 位元組數值型 char word 2 位元組數值型 short dword 4 位元組數值型 int uint 無符號整型 unsigned int void ...