Проблемы cudaMallocManaged() на Nvidia p100

Я пытаюсь скомпилировать и запустить следующий код на Nvidia P100. Я использую CentOS 6.9, версию драйвера 396.37 и CUDA-9.2. Похоже, что эти версии драйвера /cuda совместимы.

#include <stdio.h>
#include <cuda_runtime_api.h>
int main(int argc, char *argv[])
{
    // Declare variables
    int * dimA = NULL; //{2,3};
    cudaMallocManaged(&dimA, 2 * sizeof(float));
    dimA[0] = 2;
    dimA[1] = 3;
    cudaDeviceSynchronize();
    printf("The End\n");

    return 0;
}

Это терпит неудачу с ошибкой сегментации. Когда я собираю с nvcc -g -G src/get_p100_to_work.cu и запустите основной файл (cuda-gdb ./a.out core.277512), Я получил

Reading symbols from ./a.out...done.
[New LWP 277512]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `./a.out'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000000000040317d in main (argc=1, argv=0x7fff585da548) at src/get_p100_to_work.cu:71
71      dimA[0] = 2;
(cuda-gdb) bt full
#0  0x000000000040317d in main (argc=1, argv=0x7fff585da548) at src/get_p100_to_work.cu:71
        dimA = 0x0
(cuda-gdb)

Когда я запускаю этот код на NVidia K40, код работает без ошибок.

ВОПРОС:

Как мне заставить мой код работать на P100? Как видно из этого урока, этот код должен работать.

1 ответ

Решение

Ранее я клонировал образ узла графического процессора с 2 K40 в нем. Затем я помещаю это изображение в узел с 2 - P100 в нем. Я подозреваю, что при установке драйвера на узел K40, существует конфигурация, специфичная для видеокарт на машине (что имеет смысл). Эта конфигурация была несовместима с P100. Так как драйвер на машине P100 был в основном поврежден, это объяснило бы, почему мой код потерпел неудачу так катастрофически.

Решение: мне пришлось переустановить драйвер, и теперь он работает.

Другие вопросы по тегам