2012-05-15 2 views

ответ

2

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

+2

Общая память имеет продолжительность жизненного цикла блока, а не область ядра. – talonmies

+0

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

0

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

0

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

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