1

test.cu ファイルがあり、NVCC でコンパイルしています

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秒かかります..しかし、2回目に実行すると、高速に動作します。問題は何ですか?

4

1 に答える 1

1

最も可能性の高い理由は、最初の実行時に OS が CUDA ライブラリをロードし、CUDA コンテキストを実際に初期化する前に他の技術的なタスクを実行していることです。2 回目の実行では、すべてが既にロードされており、コンテキストの初期化が高速化されています。

于 2012-11-30T14:45:46.317 に答える