2012-02-15 5 views
10

NVIDIA предлагает GPUDirect для уменьшения накладных расходов на передачу данных. Мне интересно, есть ли аналогичная концепция для AMD/ATI? В частности:Предлагает ли AMD OpenCL нечто похожее на GPUDirect от CUDA?

1) Могут ли GPU AMD избежать второй передачи памяти при взаимодействии с сетевыми картами, as described here. В случае потери графика в какой-то момент здесь приводится описание воздействия GPUDirect на получение данных с GPU на одной машине, которая будет передаваться по сетевому интерфейсу: с GPUDirect память GPU переходит в память хоста, а затем прямо в сеть интерфейсная карта. Без GPUDirect память GPU переходит в память хоста в одном адресном пространстве, тогда CPU должен сделать копию, чтобы получить память в другое адресное пространство адресной памяти хоста, а затем она может выйти на сетевую карту.

2) Графические процессоры AMD позволяют передавать память P2P, когда два графических процессора совместно используются на одной шине PCIe, as described here. В случае потери графика в какой-то момент здесь описывается влияние GPUDirect на передачу данных между графическими процессорами на одной и той же шине PCIe: с помощью GPUDirect данные могут перемещаться напрямую между графическими процессорами на одной шине PCIe, не касаясь памяти хоста. Без GPUDirect данные всегда должны возвращаться к хосту, прежде чем он сможет перейти на другой графический процессор, независимо от того, где находится этот графический процессор.

Редактировать: BTW, я не совсем уверен, сколько GPUDirect является утилитой для пачек и сколько это действительно полезно. Я никогда не слышал о том, как программист GPU использует его для чего-то реального. Мысли об этом тоже приветствуются.

+0

Не могли бы вы предоставить текстовое описание двух технологий в случае связанных рисунков снесенных на более позднем этапе? Кроме того, я считаю, что второй график неясен относительно того, что предлагается. – James

+0

James, это сделано. – arrayfire

+0

@gpu: mvapich2 имеет прямую поддержку GPU в своих последних выпусках, я использовал его, и он работает быстрее - вы можете вызывать 'MPI_Send' и' MPI_recv' и передавать указатели памяти GPU в качестве аргумента, и все «просто работает». – talonmies

ответ

2

Я думаю, что вы, возможно, ищете флаг CL_MEM_ALLOC_HOST_PTR в clCreateBuffer. Хотя в спецификации OpenCL указано, что этот флаг «Этот флаг указывает, что приложение хочет, чтобы реализация OpenCL выделяла память из доступной памяти хоста», неизвестно, что может сделать с ней реализация AMD (или другие реализации).

Вот информативная нить на тему http://www.khronos.org/message_boards/viewtopic.php?f=28&t=2440

Надежда это помогает.

Редактировать: Я знаю, что SDK OpenCL от nVidia реализует это как выделение в памяти с фиксированной/запертой страницей. Я совершенно уверен, что это то, что делает OpenCL SDK от AMD при работе на графическом процессоре.

+4

CUDA имеет эквиваленты CL_MEM_ALLOC_HOST_PTR, но они не совпадают с GPUDirect. CUDA может получать ресурсы памяти хоста из ядер GPU. Он также может выделять указатели узлов с записями страниц, чтобы повысить эффективность DMA на GPU. Но GPUDirect выходит за рамки обоих, как описано в вопросе @ gpu. – harrism

+0

Понял. Тогда, в это время я не верю, что OpenCL имеет эквивалент. – Ani

2

Как указано в @ananthonline и @harrism, многие функции GPUDirect не имеют прямого эквивалента в OpenCL. Однако, если вы пытаетесь уменьшить накладные расходы на передачу данных, как упоминалось в первом предложении вашего вопроса, может помочь копирование с нулевой копией. Обычно, когда приложение создает буфер на графическом процессоре, содержимое буфера копируется из памяти CPU в память GPU в массовом порядке. С нулевой копией памяти нет предварительной копии; вместо этого данные копируются, поскольку к нему обращается ядро ​​GPU.

Нулевая копия не имеет смысла для всех приложений. Вот советы от Руководства по программированию AMD APP OpenCL о том, когда нужно использовать: объекты Резидентного хозяина

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

Таблица 4.3 руководства по программированию описывает, какие флаги передаются в clCreateBuffer, чтобы использовать нулевую копию (CL_MEM_ALLOC_HOST_PTR или CL_MEM_USE_PERSISTENT_MEM_AMD, в зависимости от того, хотите ли вы иметь доступную для устройства память хоста или память устройства, доступную для хоста). Обратите внимание, что поддержка нулевой копии зависит как от ОС, так и от аппаратного обеспечения; он, похоже, не поддерживается в Linux или более старых версиях Windows.

AMD APP OpenCL Руководство по программированию: http://developer.amd.com/sdks/AMDAPPSDK/assets/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide.pdf

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