2015-11-12 3 views
0

Можно ли использовать один и тот же объект памяти между двумя ядрами без какой-либо синхронизации в OCL 1.2? Т.е. я хочу создать объект памяти, сделать copy_host_ptr и передать его в 2 ядра как указатели для одновременного доступа, в основном читать.opencl: совместное использование асинхронной памяти-obj между ядрами (одного и того же контекста, устройства)

Я использую одно и то же устройство/контекст/программу и т. Д. Для обоих ядер, и я забочусь только о смещениях в памяти. то есть я не забочусь о том, является ли базовый адрес mem-obj в двух ядрах одинаковыми или нет.

Спасибо!

ответ

0

Если вы используете одну командную очередь, да, потому что тогда ваши ядра запускаются один за другим и никогда не будут обращаться к памяти одновременно.

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

+0

Правильный способ, даже если использовать только одну командную очередь (которая при некоторых условиях может даже выполнять параллельные задания) - устанавливать флаги в объекты буфера. Это делает драйвер OpenCL заботиться о том, чтобы вы не использовали один и тот же буфер для записи (или чтения/записи) в двух ядрах одновременно. – DarkZeros

+0

@ DarkZeros, я никогда не понимал, какими могут быть условия, когда последующее ядро ​​может начать выполнение до того, как закончится предыдущий. Имеет смысл, что это может быть возможно, если заданные единицы вычисления в конце работы. Будет ли среда выполнения искать объекты буфера и изображения, используемые для определения наличия зависимостей? – Dithermaster

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