2016-12-31 15 views
5

Я прочитал несколько руководств о том, как реализовать raytracer в opengl 4.3, вычислить шейдеры, и это заставило меня задуматься о чем-то, что искажало меня какое-то время. Как именно графические процессоры обрабатывают огромное количество чтения с произвольным доступом, необходимое для реализации чего-то подобного? Получает ли каждый потоковый процессор собственную копию данных? Похоже, что система будет сильно перегружена доступом к памяти, но это только моя собственная, возможно, неправильная интуиция.Как графические процессоры обрабатывают произвольный доступ?

ответ

2

В потоковых мультипроцессорах (SM) есть кеши, но они относительно малы и не помогут с действительно случайным доступом.

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

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

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

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

  • Нет связанных вопросов^_^