Влияние формы на распределение памяти тензорным потоком на GPU - PullRequest
0 голосов
/ 13 июня 2019

Когда я создаю переменную с формой (L, N, N) на графическом процессоре nvidia с тензорным потоком, занимает ли переменная лист из L квадратных кусочков, где каждый кусочек равен N x N?

Например, три квадратных кусочкавоспоминания, собранные вместе, будут иметь вид:

# --- #
| NxN |
# --- #
| NxN |
# --- #
| NxN |
# --- #

Как тензорный поток выделит память графического процессора для переменной с формой (a, b, N, N)?

1 Ответ

2 голосов
/ 13 июня 2019

Память на GPU выделяется как одномерный массив байтов с выравниванием, если это возможно.В вашем примере тензор с формой (L, N, N) будет одномерным массивом размером 8*L*N*N байтов;регистр (a, b, N, N) будет 8*a*b*N*N байтов, при условии float64 значений.

Это можно узнать, прочитав исходный код TensorFlow:

  • gpu_cudamalloc_allocator.h объявляет класс GPUcudaMallocAllocator с void* AllocateRaw(size_t alignment, size_t num_bytes), реализованный в
  • gpu_cudamalloc_allocator.cc.
  • allocator.h объявляетAllocator class, родительский элемент GPUcudaMallocAllocator, который объявляет void* AllocateRaw(size_t alignment, size_t num_bytes).

Поскольку эти AllocateRaw функции имеют один размер, вся память TensorFlow выделяется в 1-D массивах под капотом.Это часто встречается на практике, поскольку легко отобразить представления массива более высокого порядка на непрерывный одномерный блок памяти, и это максимизирует пропускную способность для передачи на устройство и обратно.

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