測試的數組數量是 const int num_elements = 1<<20;
運算次數是1000次。
發現gpu的分配內存和拷貝操作很花時間。
1 對數量為 1<<20的數組,1000次cpu求和操作,時間是7720.0 ms。
2 在gpu,一次分配內存和拷貝,1000次求和,時間是360.0 ms。
3 在gpu,1000次分配內存和拷貝,1000次求和,時間是2700.0 ms。
哈哈,如果省去分配內存和拷貝時間,求和操作,在 gpu比cpu快20倍。
但是加上的話,就快不了多少了。
所以,設計GPU程序的時候,一定要減少內存分配和拷貝的操作。
其實可能內存分配花不了多少時間,主要是拷貝, 1<<20這麼多個元素拷貝,想想都知道久。
做了個一次的實驗,
cpu是10ms。
gpu,加上分配內存和拷貝,要60ms,
不算內存分配和拷貝,0ms。
所以,如果數據本來是在gpu的話,那gpu做計算肯定快。
但是如果數據本來在cpu,先拷貝到gpu,再做運算,這種效率肯定低。
所以,
內存分配要合理,該在gpu的放在gpu。
盡量減少內存拷貝。