Почему первоначальное выполнение моей программы CUDA занимает больше времени, чем последующее выполнение?

У меня есть файл 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 секунд .. но когда я запускаю его во второй раз, он работает быстро.
В чем проблема?

1

Решение

Наиболее вероятная причина заключается в том, что во время первого запуска ваша ОС загружает библиотеки CUDA и выполняет некоторые другие технические задачи перед фактической инициализацией контекста CUDA. При втором запуске все уже загружено и контекст инициализируется быстрее.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]