Почему моя простая программа CUDA занимает так много времени? - PullRequest
0 голосов
/ 11 апреля 2020

Моя программа 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 секунды?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...