Моя программа CUDA просто выделяет память на GPU. Однако для запуска требуется 2 секунды (процессор Intel Xeon: E5-2623 V3, Ubuntu 18.04, nv cc выпуск 10.2. Графический процессор Teska K40 c). Почему так долго?
#include <iostream>
#include <fstream>
#include <ostream>
#include <cuda.h>
#include <cuda_runtime_api.h>
#include <chrono>
using namespace std::chrono;
int main() {
double *d_junk;
auto start = high_resolution_clock::now();
cudaError_t err = cudaMalloc((void**)&d_junk, 1000 * sizeof(double));
if( err != cudaSuccess) {
printf("ERROR: cudaMalloc() returned (%d)\n", err);
exit(EXIT_FAILURE);
}
auto stop = high_resolution_clock::now();
auto duration = duration_cast<microseconds>(stop-start);
printf("Time to allocate junk on GPU: %ld microseconds\n", duration.count());
cudaFree(d_junk);
return 0;
}
И все же для запуска на другой, менее мощной машине требуется всего 40-80 миллисекунд (процессор Intel i7-6700K, Ubuntu 16.04, nv cc выпуск 7.5, GeForce GTX 970 GPU). Почему?
Я должен добавить это: Для первой машины медленная 2-секундная cudaMallo c () происходит только для первого вызова cudaMallo c (). После этого вызовы cudaMallo c () выполняются намного быстрее: десятки миллисекунд. Может ли быть так, что инициализация среды CUDA займет 2 секунды?