Различные типы архитектуры GPU и CPU

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

Оперативная память GPU в силу этих причин ориентирована на пропускную способность, а не на снижение времени латентности. Для GPU используются отдельные однотипные DRAM-модули с более высокими показателями разрядности и пропускной способности, чем у DRAM-модулей для центральных процессоров. Кроме того, оперативная память графических процессоров традиционно имела меньший объем, чем оперативная память обычных микропроцессоров. В 2008 году у графических процессоров обычно имелось не более 1 Гбайт оперативной памяти, в то время как у центральных процессоров имелось от 2 до 32 Гбайт. И наконец, следует иметь в виду, что для вычислений общего назначения нужно учесть еще время на передачу данных между памятью CPU и памятью GPU, поскольку последний является сопроцессором.

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

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

— Учитывая четырехэлементную природу типов графических данных, графические процессоры исторически имели SIMD-инструкции, подобные инструкциям центральных процессоров. Но современные GPU, чтобы облегчить программирование и повысить эффективность, больше сориентированы на скалярные инструкции.

— В отличие от центральных процессоров в них не было поддержки арифметики чисел с плавающей точкой двойной точности, поскольку для графических приложений она была не нужна. В 2008 году были представлены первые GPU с поддержкой чисел двойной точности. Тем не менее даже на этих новых графических процессорах операции с одинарной точностью по-прежнему будут осуществляться в 8-10 раз быстрее операций с двойной точностью, в то время как разница в производительности для центральных процессоров сводится к положительным сторонам передач в системе памяти меньшего количества байтов в силу использования более узких данных.

Хотя GPU были разработаны для более узкого круга приложений, некоторые программисты задавались вопросом, могли бы они придать своим приложениям такую форму, которая позволила бы им раскрыть высокую потенциальную производительность графических процессоров. Чтобы выделить этот стиль использования графических процессоров, некоторые специалисты назвали его универсальным использованием графических процессоров (General Purpose GPU, или GPGPU). После изнурительных попыток решить свои задачи с использованием графических API и языков программирования графических шейдеров, они под влиянием языка C разработали языки, позволившие им создавать программы непосредственно для графических процессоров. В качестве примера можно привести Brook, потоковый язык для графических процессоров. Следующим шагом как в повышении возможностей программирования оборудования, так и в языках программирования стала разработанная компанией NVIDIA архитектура CUDA (Computer Unified Divice Architecture), позволяющая программистам создавать программы на языке C, которые, хотя и с некоторыми ограничениями, но все же могли выполняться на графических процессорах. С повышением программируемости стала расти и степень использования графических процессоров в параллельных вычислениях.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: