2015-12-22 5 views
1

Как правило, часто не рекомендуется многократно копировать данные из ОЗУ в память графического процессора, если данные могут вместо этого оставаться в памяти графического процессора. В результате некоторые коды хранят наборы данных в памяти графического процессора как общую переменную (example).Как определить количество копий данных в графическом процессоре в сценарии Theano?

В Theano есть ли способ определить количество копий данных в GPU при выполнении сценария? Моя цель состоит в том, чтобы оценить, в какой степени не объявление набора данных как общей переменной замедляет работу программы из-за копирования данных из ОЗУ в память GPU. (объявление набора данных как общей переменной в скрипте, который я сейчас выполняю профилирование, потребует довольно некоторых изменений кода, поэтому я предпочел бы получить оценку перед погружением в код).

+0

Так был мой ответ, ответ на ваш вопрос? Вы попробовали? – Amir

ответ

1

Насколько я знаю, вы не можете вычислить объем памяти, необходимый функции или скрипту. Предполагая, что вы знаете количество элементов, которые должны храниться на графическом процессоре, вы можете легко вычислить объем памяти, необходимый для хранения этих элементов.

Простой пример:

import numpy as np 
import theano.tensor as T 
T.config.floatX = 'float32' 
dataPoints = np.random.random((5000, 256 * 256)).astype(T.config.floatX) 
#float32 data type requires 4 bytes 
sizeinGBs = 5000 * 256 * 256 * 4/1024./1024/1024 + (some small over-head constant which we can ignore safely) 

Что примерно 1,22 ГЗ

UPDATE

я нашел ответ на свой вопрос. Вы можете легко получить объем свободной памяти на графическом процессоре, используя CUDA libray. Ниже приведен код, который поможет вам вычислить, сколько памяти GPU было выделено для задачи до и после выполнения функции.

import theano.sandbox.cuda.basic_ops as sbcuda 
import numpy as np 
import theano.tensor as T 
T.config.floatX = 'float32' 
freeGPUMemInGBs = sbcuda.cuda_ndarray.cuda_ndarray.mem_info()[0]/1024./1024/1024 
print "Your GPU has %s GBs of free memory" % str(freeGPUMemInGBs) 
#An operation is to be executed below 
testData = shared(np.random.random((5000, 256 * 256)).astype(T.config.floatX), borrow = True) 
print "The tasks above used %s GBs of your GPU memory. The available memory is %s GBs" % (str(freeGPUMemInGBs - sbcuda.cuda_ndarray.cuda_ndarray.mem_info()[0]/1024./1024/1024), str(sbcuda.cuda_ndarray.cuda_ndarray.mem_info()[0]/1024./1024/1024)) 

Тогда выход (для моей машины) является:

>>> Your GPU has 11.2557678223 GBs of free memory 
>>> The tasks above used 1.22077941895 GBs of your GPU memory. The available memory is 10.0349884033 GBs 

 Смежные вопросы

  • Нет связанных вопросов^_^