CL_DEVICE_MAX_COMPUTE_UNITS
должно дать вам количество ComputeUnits, в противном случае вы можете посмотреть его из соответствующих руководств ( Руководство по программированию AMD Opencl и Руководство по программированию Nvidia OpenCL ) - Связанное руководство для AMD содержит информацию о доступной локальной памяти на вычислительную единицу (обычно 32 КБ / CU).Для NVIDIA быстрый поиск в Google показал этот документ , который дает размер локальной памяти в 16 КБ / CU для графических процессоров на базе G80 и G200.Для карт на основе Fermi (GF100) доступно 64 КБ встроенной памяти, которую можно настроить как локальную память 48 КБ и кэш-память L1 16 КБ, так и локальную память 16 КБ и кэш-память L1 48 КБ.Кроме того, карты на основе Fermi имеют кэш-память второго уровня размером до 768 КБ (768 КБ для GF100 и GF110, 512 КБ для GF104 и GF114 и 384 КБ для GF106 и GF116, но не для GF108 и GF118 согласно Википедии).
- Из приведенной выше информации.Казалось бы, у современных видеокарт nvidia больше всего локальной памяти на вычислительную единицу.Более того, он единственный, с моим общим кэшем L2.
Для использования локальной памяти вы должны помнить, что локальная память выделяется для каждой рабочей группы (и доступна только для рабочей группы),в то время как вычислительный блок обычно может поддерживать более одной рабочей группы.Таким образом, если ваш алгоритм выделил всю локальную память одной рабочей группе, вы не сможете использовать для достижения максимальной степени параллельности.Также обратите внимание, что, поскольку локальная память хранится в банке, произвольный доступ приведет к множеству банковских конфликтов и перекосам сериализации.Таким образом, ваш алгоритм может парализовать не так хорошо, как вы думаете (или, может быть, просто упомянув о возможности).
С картой на основе Fermi лучше всего рассчитывать на кеши, а не на явную локальную память, если все ваши рабочие группы работают с одними и теми же данными (я не знаю, как переключить локальную / локальную память L1).хотя конфигурация).