Иерархия вычислительных блоков и памяти в шейдерной модели 4.0
· Как и GPU предыдущих поколений, графические процессоры шейдерной модели 4.0 (рис. 9.2) представляют собой системы из параллельных «вычислителей» - процессоров, каждый из которых применяет заданную программу (вычислительное ядро) к некоторым элементам (4-векторам) входных массивов данных. Эти «вычислители» по иерархическому положению эквивалентны отдельным графическим конвейерам GPU предыдущих поколений, однако термин «графический конвейер» для них не используют, поэтому мы продолжим называть их «вычислителями». В англоязычной литературе используется термин “ thread ”, означающий процесс, исполняемый конкретным «вычислителем». · В отличие от шейдерной модели 3.0, все «вычислители» универсальны, они не подразделяются больше на пиксельные и вершинные конвейеры. Вместо этого, «вычислители» объединены в мультипроцессоры – блоки, внутри которых «вычислители» имеют доступ к общей памяти и могут, таким образом, обмениваться данными в ходе параллельных вычислений (рис. 9.2). · Одновременно мультипроцессоры могут исполнять только одну и ту же программу (вычислительное ядро, англ. kernel), но применительно к различным исходным данным. Таким образом, в некоторых случаях (когда требуется провести много однотипных расчётов с разными данными) может быть реализован параллелизм по задачам. · Всем мультипроцессорам доступна общая память (Global Memory, она же видеопамять, рис. 9.2), в которой центральный процессор размещает исходные данные. В этой же памяти графический процессор размещает результаты расчётов, которые, таким образом, становятся доступными центральному процессору. Физически, эта общая память представляет собой отдельные микросхемы на плате видеокарты, то есть расположена вне самого графического процессора. Соответственно, она работает сравнительно медленно, зато имеет большой объём (до нескольких гигабайт), обычно достаточный для хранения всех обрабатываемых данных. «Вычислители» записывают в видеопамять результат своего расчёта, но они не могут обмениваться через неё данными в ходе вычислений. · Кэш графического процессора (память для хранения констант, Constant Memory or Load Store на рис. 9.2) – «быстрая» память, доступная одновременно всем мультипроцессорам (и, соответственно, всем «вычислителям»). Эта память имеет небольшой размер (64 KB на G80), зато расположена прямо на кристалле графического процессора, так что доступ к ней оказывается очень быстрым (примерно в 100 раз быстрее, чем к видеопамяти). Используется только для хранения констант, необходимых при выполнении программы. Эти константы могут быть записаны в эту память только центральным процессором перед началом параллельного расчёта. «Вычислителям» регистры доступны только для чтения. · Параллельный кэш данных, или разделяемая память (Parallel Data Cache на рис. 9.2). Каждому из мультипроцессоров доступен один из блоков параллельной разделяемой памяти (16 KB на мультипроцессор). Размещена эта память на кристалле GPU и работает со скоростью регистров процессора (максимально возможной скоростью памяти). Предназначена для того, чтобы «вычислители» могли модифицировать общие данные и обмениваться информацией в ходе параллельного расчёта. Каждый блок разделяемой памяти доступен одновременно всем «вычислителям» в составе одного мультипроцессора (см. рис. 9.2) для чтения и для записи, поэтому её и называют также параллельной. Конструкцией GPU предусмотрена автоматическая синхронизация доступа «вычислителей» к параллельной памяти. «Вычислители», принадлежащие к разным мультипроцессорам, не могут обмениваться данными через параллельную память (то есть, вообще не могут, потому что других путей нет). Процессор G80 имеет следующие возможности использования «вычислителей» и памяти: · максимум 512 параллельных потоков инструкций на «связку» (см. ниже) и 768 на 1 мультипроцессор; · максимум 8192 32-битных регистра на все потоки, выполняемые на 1 мультипроцессоре; · максимум 2 млн. ассемблерных инструкций на ядро; · максимальный объем передаваемых параметров 256 байт на ядро.
|