Если ваша реализация OpenCL поддерживает Shared Virtual Memory (представлена в 2.0), эта функция позволяет вам делать нечто подобное и многое другое.
Для OpenCL 1.x, если ваша реализация OpenCL не дает никаких гарантий вышеи помимо стандарта (который я ожидал бы сделать через расширение), вы должны разархивировать буфер до того, как ядро получит доступ для записи в него, и аналогично, вы не должны разрешить ядру читать из него, пока оно сопоставлено для записи.
Это объясняется в clEnqueueMapBuffer
спецификации :
Чтение и записьядро, выполняющееся на устройстве в области памяти, отображаемой для записи, не определено.
Поведение записей, выполняемых ядром на устройстве в отображенную область объекта памяти, не определено.
В версии 1.2 это было расширено, но сутьто же самое:
Если объект памяти в настоящее время сопоставлен для записи, приложение должно убедиться, что объект памяти не отображен перед любыми ядрами или командами в очереди, которые читают или записывают в этот объект памяти или любой из егосвязанные объекты памяти (объекты суббуфера или буфера 1D изображения) или его родительский объект (если объект памяти является объектом суббуфера или буфера 1D изображения) начинают выполнение;в противном случае поведение не определено.
Если объект памяти в настоящее время сопоставлен для чтения, приложение должно убедиться, что объект памяти не отображен перед любыми ядрами или командами, поставленными в очередь, которые записывают в этот объект памяти или любую связанную с ним памятьобъекты (суббуфер или объекты буфера 1D изображения) или его родительский объект (если объект памяти является суббуфером или объектом буфера 1D изображения) начинают выполнение;в противном случае поведение не определено.
Если вы обнаружите, что map / unmap имеет большие издержки, вы, вероятно, не выполняете путь кода с нулевой копией в вашей реализации OpenCL, и драйвер фактически копируетсодержимое памяти.Если вы сомневаетесь, обратитесь к поставщику реализации, чтобы узнать, как они рекомендуют вам использовать буферы нулевого копирования в OpenCL.Буферы нулевого копирования не гарантируются стандартом.