Является ли производительность доступа к постоянной памяти такой же, как и к глобальной памяти на OpenCL


Как я знаю. Постоянная память на CUDA-это специфическая память. И это быстрее, чем глобальная память. Но в спецификации OpenCL. Я получаю следующие слова.

Имя __constant или постоянное адресное пространство используется для описания переменных, выделенных в глобальной памяти и доступных внутри ядра (ядер) как переменные только для чтения

Таким образом, память __constant происходит из памяти __global. Означает ли это, что он имеет такую же производительность доступа с памятью __global?

2 3

2 ответа:

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

Тем не менее, ни одна из известных мне архитектур не работает таким образом. Так что это только гипотеза.

Стандарт OpenCL не определяет, как должна быть реализована постоянная память, но в графических процессорах NVIDIA постоянная память кэшируется. Я не знаю, что делает AMD.