1
我有test.cu文件,它的編制與NVCC爲什麼我的CUDA程序的初始執行時間比後續執行時間更長?
void sort()
{
thrust::host_vector<int> dat1(50);
thrust::generate(dat1.begin(),dat1.end(),rand);
for(int i=0; i<dat1.size(); i++)
{
std::cout << dat1[i] << std::endl;
}
thrust::device_vector<int> dev_vec1 = dat1;
thrust::sort(dev_vec1.begin(),dev_vec1.end());
thrust::copy(dev_vec1.begin(),dev_vec1.end(),dat1.begin());
for(int i=0; i<dat1.size(); i++)
{
std::cout << dat1[i] << std::endl;
}
}
#include "test.cuh"
int main()
{
sort();
return 0;
}
但對設備進行排序需要40秒。但是,當我運行它第二次它的工作速度快。 什麼問題?
在linux系統上可能會有幫助的一件事是將GPU設置爲持久模式。 'nvidia-smi -g 0 -pm 1',你可以通過'nvidia-smi --help'獲得幫助。另一個影響因素可能是JIT編譯步驟,具體取決於您編譯代碼的方式。當你第一次啓動一個新的代碼時,它沒有針對GPU的實際二進制代碼,它必須執行最後的編譯步驟來創建它。這通常只發生一次,因爲它被緩存了。你可以通過使用適當的'-arch = sm_xx'開關進行編譯來避免這種情況,其中xx是GPU的計算能力 –
「\t 你可以通過發出一個適當的-arch = sm_xx開關進行編譯來避免這種情況,其中xx是GPU的計算能力「 如何做到這一點? – Alatriste
你有什麼樣的GPU,以及你使用的nvcc編譯命令行是什麼? –