Почему cudaMemGetInfo сообщает об изменении общего объема памяти устройства? - PullRequest
0 голосов
/ 19 февраля 2020

Когда я запускаю следующий фрагмент кода, сообщаемый общий объем памяти моего графического процессора изменяется (в любом случае, согласно cudaMemGetInfo). Это поведение не упомянуто в документации для cudaMemGetInfo, в которой говорится, что total должен содержать общий объем памяти на моем устройстве, который может быть выделен (который не может измениться без установки другого графического процессора в моей системе, верно?). Может кто-нибудь объяснить, почему это происходит? Кажется, что это не происходит, когда я не звоню cudaMallocManaged.

#include <iostream>

void printStats()
{
    size_t free, total;
    cudaMemGetInfo(&free, &total);
    std::cout << "free:  " << free << "\ntotal: " << total << std::endl;
}

int main(void)
{
    // Before memory allocation
    printStats();

    int N = 1;
    float *x, *y;
    cudaMallocManaged(&x, N*sizeof(float));
    cudaMallocManaged(&y, N*sizeof(float));

    // After memory allocation.
    printStats();

    cudaFree(x);
    cudaFree(y);

    // After freeing the memory.
    printStats();

    return 0;
}

результат:

free:  94383273356630
total: 20
free:  5661994326
total: 4
free:  140729276827856
total: 94383273355680

1 Ответ

1 голос
/ 19 февраля 2020

Оказывается, что когда версия вашего драйвера CUDA недостаточна для версии времени выполнения CUDA, происходит такое неопределенное поведение. Для всех, кто столкнулся с этой проблемой, я рекомендую проверить вывод cudaGetLastError(), вот как я обнаружил, в чем проблема.

Я исправил ее, понизив версию CUDA до 10.1, поскольку это была последняя версия, которую поддерживает мой драйвер , (Вы можете проверить свою CUDA и версию драйвера, используя инструмент nvidia-smi).

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