эффективно использовать память GPU в Matlab - PullRequest
2 голосов
/ 29 марта 2020

Я использую графический процессор для вычисления в Matlab. И я продолжаю получать Out of memory проблему. Поэтому я думаю, что могу преобразовать некоторые из моих переменных из double, который является типом по умолчанию для matlab, в single. Затем я провел следующий эксперимент

A = gpuArray([1,2,3])
A = 
1  2  3

whos A
Name   Size   Bytes  Class
A      1*3     4     gpuArray

B = gpuArray(single([1,2,3]))
B = 
1*3 gpuArray single row vector
1  2  3

whos B
Name   Size   Bytes  Class
B      1*3     4     gpuArray

Теперь я немного запутался. С одной стороны, это показывает, что B - это 1*3 gpuArray single row vector. Однако, с другой стороны, команда whos не показывает разницы между A и B.

Мне интересно, поможет ли это преобразование double в single действительно уменьшить объем памяти? использование моего GPU в Matlab. По сути, мой вопрос таков: когда я перемещаю 2 переменные в процессор, одна из них double, а другая - single, для gpu они потребляют одинаковое количество памяти GPU в matlab? Команда whos не показывает никакой разницы.

1 Ответ

2 голосов
/ 29 марта 2020

Обратите внимание на следующее:

A = gpuArray([1:1000])
whos A
  Name      Size              Bytes  Class       Attributes

  A         1x1000                4  gpuArray  

Интересно! Всего 4 байта! Но этому есть простое объяснение: whos дает только размер переменной в оперативной памяти. Это 4 байта, потому что это просто адрес памяти, а не сами данные. Данные находятся на GPU, и CPU не может "легко" получить к ним доступ.

Отвечая на ваш вопрос: Да, single займет на GPU половину памяти double.

...