Ответ Джеймса Билби - верное направление, но оно немного не в пути:
В зависимости от реализации, это может быть быстрее или медленнее, потому что opencl не заставляет провайдеров использовать встроенную или отключенную-чип памяти, но AMD очень хороша в OpenCL по соотношению цена / производительность, поэтому я приведу некоторые цифры об этом.
Частная память в реализации AMD, самая быстрая (наименьшая задержка, самая высокая пропускная способность, например, 22 ТБ / с)для основного потока GPU).
Здесь, в приложении -D:
http://developer.amd.com/wordpress/media/2013/07/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide-rev-2.7.pdf
вы можетесм. регистр файл, LDS , константный кэш и global , которые используются для различных пространств имен, когда для них достаточно места.Например, регистровый файл имеет 22 ТБ / с и только около 300 КБ на вычислительную единицу.Это имеет меньшую задержку и большую пропускную способность, чем LDS, который используется для __local памяти.Общий размер LDS даже меньше, чем это (на вычислительную единицу).
Если переход от локального к частному не приносит пользы, вам следует уменьшить размер группы локальных потоков, например, с 256 до 64.Так что больше приватных регистров доступно для каждого потока.
Так что для этого примера AMD GPU, локальная память в 15 раз быстрее, чем глобальная память, частная память в 5 раз быстрее, чем локальная память.Если он не помещается в личную память, он перетекает в глобальную память, поэтому здесь может помочь только кэш L1-L2.Если данные многократно не используются, нет смысла использовать здесь частные регистры.Просто передавайте данные из глобального в глобальное, если их используете только один раз.
Для некоторых смартфонов или процессоров использование личных регистров может быть очень плохим, поскольку они могут быть сопоставлены с чем-то другим.