Я хочу использовать общую память между вызовами ядра одного ядра. Могу ли я использовать общую память между вызовами ядра?
Как использовать общую память между вызовом ядра CUDA?
Ответы (3)
Нет, ты не можешь. Общая память имеет жизненный цикл блока потоков. Хранящаяся в нем переменная может быть доступна всем потокам, принадлежащим одной группе, в течение одного вызова функции __global__
.
Попробуйте память с блокировкой страниц, но скорость должна быть намного ниже, чем у графической памяти. cudaHostAlloc (void **ptr, размер size_t, cudaHostAllocMapped); затем отправьте PTR коду ядра.
Раньше вы могли сделать это нестандартным способом, когда у вас был бы уникальный идентификатор для каждого блока общей памяти, а следующее ядро проверяло бы идентификатор и, следовательно, выполняло необходимую обработку этого блока общей памяти. Это было трудно реализовать, так как вам нужно было обеспечить полную занятость для каждого ядра и иметь дело с различными крайними случаями. Кроме того, без официальной поддержки вы не можете полагаться на совместимость между вычислительными устройствами и версиями cuda.