Я пишу алгоритм в OpenCL, который нуждается только во временной структуре данных (во время выполнения).Это будет достаточно большим, чтобы превысить локальную или личную память большинства устройств.Поэтому я должен использовать глобальную память для этих данных.
Я читал о различных типах памяти в OpenCL и знаю, что произвольный доступ к глобальной памяти действительно медленный.В моем случае каждая рабочая группа обращается к разным адресам в глобальной памяти, иными словами, я использую глобальную память как своего рода локальную память.
Итак, я спрашиваю себя сейчас, если устройство "знает "что я не читаю данные, записанные другой рабочей группой / элементом, можно ли ускорить доступ к памяти?"Что именно влияет __constant
с точки зрения механизма доступа к памяти?Могу ли я неправильно использовать это или подобное ключевое слово?Или даже есть ключевое слово / метод для моей проблемы, которую я пропустил?
Другое дело: память для этой структуры данных должна быть выделена только в памяти устройства;Мне не нужно получать доступ (даже не инициализировать) его на хосте.Есть ли более эффективный способ сделать это, чем отправить неинициализированный массив на устройство?Я использую QtOpenCL, который позволяет мне передавать инициализированный хостом вектор примитивов, который конвертируется (host-) внутри в буфер и отправляется на устройство при вызове ядра.Поэтому я ищу QtOpenCL-способ сделать это.AFAIK, только локальная память может быть выделена изнутри ядра.(Я получаю ошибки при определении массива как __global
.)
Заранее спасибо!