Opengl: максимальный размер разделяемой памяти меньше спецификации оборудования - PullRequest
0 голосов
/ 08 октября 2019

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

GLint maximum_shared_mem_size;
glGetIntegerv(GL_MAX_COMPUTE_SHARED_MEMORY_SIZE, &maximum_shared_mem_size);

, я получаю в результате 48 КБ. Однако, согласно этому техническому документу: https://www.nvidia.com/content/dam/en-zz/Solutions/design-visualization/technologies/turing-architecture/NVIDIA-Turing-Architecture-Whitepaper.pdf

на стр. 13, указано, что для моего графического процессора (2080TI):

Размер Turing L1 может достигать 64Размер КБ в сочетании с выделением 32 КБ на СМ для общей памяти или может быть уменьшен до 32 КБ, что позволяет использовать 64 КБ для общей памяти. Объем кэша L2 Turing также был увеличен.

Итак, я ожидаю, что OpenGL вернет 64 КБ для максимального объема разделяемой памяти. Это неправильное предположение? Если так, то почему?

1 Ответ

1 голос
/ 09 октября 2019

Похоже, что 48 КБ - это ожидаемый результат, как описано в Руководстве по настройке Тьюринга для CUDA :

Тьюринг позволяет одному блоку потока обращаться ко всем 64 КБ. общей памяти. Для обеспечения архитектурной совместимости статическое выделение общей памяти остается ограниченным 48 КБ, и для включения динамического выделения выше этого предела также требуется явное согласие. Подробности см. В Руководстве по программированию CUDA C.

Кажется, что вы можете взять 48 КБ по умолчанию или использовать CUDA для получения контроля над конфигурацией выделения.

...