Как использовать общую память между вызовом ядра CUDA?

Я хочу использовать общую память между вызовами ядра одного ядра. Могу ли я использовать общую память между вызовами ядра?


person Amin    schedule 15.05.2012    source источник


Ответы (3)


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

person geek    schedule 15.05.2012
comment
Общая память имеет жизненный цикл области блока, а не области ядра. - person talonmies; 16.05.2012
comment
@talonmies, Спасибо! Извините, я имею в виду то же самое, но ошибся в терминологии. Я имею в виду, что вместо глобальной памяти (актуальной, пока вы не вызываете cudaFree) нет способа получить переменную между глобальными вызовами функций. - person geek; 16.05.2012

Попробуйте память с блокировкой страниц, но скорость должна быть намного ниже, чем у графической памяти. cudaHostAlloc (void **ptr, размер size_t, cudaHostAllocMapped); затем отправьте PTR коду ядра.

person perise    schedule 22.05.2012

Раньше вы могли сделать это нестандартным способом, когда у вас был бы уникальный идентификатор для каждого блока общей памяти, а следующее ядро ​​​​проверяло бы идентификатор и, следовательно, выполняло необходимую обработку этого блока общей памяти. Это было трудно реализовать, так как вам нужно было обеспечить полную занятость для каждого ядра и иметь дело с различными крайними случаями. Кроме того, без официальной поддержки вы не можете полагаться на совместимость между вычислительными устройствами и версиями cuda.

person fflannery    schedule 22.05.2012