Использование памяти Matlab Dual GPU

У меня есть карта с двумя графическими процессорами под названием Titan Z. У меня есть Matlab 2016a, пытающийся решить набор разреженных уравнений Ax=b для разных значений «b». Titan Z имеет два графических процессора и 6 ГБ оперативной памяти на каждый графический процессор.

Вот в чем проблема.

  1. Если я решаю задачу Ax=b на 1 графическом процессоре, скажем, размер матрицы «A» составляет 2 ГБ, Matlab копирует эту матрицу в память каждого графического процессора. GPU-Z сообщает, что каждый GPU имеет 2 ГБ данных и работает только 1 GPU.
  2. Если я решаю две задачи Ax=b на 2 графических процессорах, скажем, размер матрицы «A» составляет 2 ГБ, Matlab снова дважды копирует эту матрицу в vram каждого графического процессора. Теперь GPU-Z сообщает, что каждый GPU имеет 4 ГБ данных и два GPU работают одновременно.
  3. Если я одновременно пытаюсь решить проблему с «4 ГБ», драйвер Nvidia сбой из-за нехватки видеопамяти. Но я могу решить это на одном графическом процессоре. не на 2 GPU одновременно.

Проблема в том, что Matlab копирует эти матрицы дважды, когда это не нужно, что более интересно, он делает это, когда два графических процессора используют одну и ту же матрицу «A», но разные векторы «b».

Как я могу решить эту проблему?


person coercion    schedule 27.07.2016    source источник
comment
Не могли бы вы поделиться своим кодом? Вы используете spmd или аналогичный?   -  person Edric    schedule 27.07.2016
comment
На самом деле это довольно просто. Я использую gpuArray для выделения и передачи, а затем использую цикл parfor (i=1:2) для решения набора уравнений. на ГПУ.   -  person coercion    schedule 27.07.2016
comment
Значит, вы не строите gpuArray внутри цикла parfor? Что произойдет, если вы построите gpuArray внутри parfor?   -  person Edric    schedule 28.07.2016
comment
Я также пытался построить его внутри. Я даже позвонил gpuDevice внутри, чтобы убедиться, что он работает с правильным GPU. Я пробовал много других вещей. Я подозреваю, что драйвер Nvidia отражает любые данные, поступающие на один графический процессор, поскольку это карта с двумя графическими процессорами. Следующим шагом я подключу другой графический процессор, чтобы посмотреть, скопирует ли он его и на третий. Опять же, я должен напомнить вам, что оба графических процессора должны иметь одинаковую матрицу, но разные вектора b   -  person coercion    schedule 28.07.2016


Ответы (1)


Это немного поздний ответ на мой собственный вопрос, но вот решение. Отключение режима нескольких GPU в панели управления Nvidia решило проблему. По сути, он отключает sli, и GPU может работать независимо. Это было просто.

person coercion    schedule 03.10.2016