|
| |
PavelD @ 29 декабря 2019, 17:07 | Отличаются и довольно сильно, с точки зрения архитектуры. С точки зрения совсем уж базовых принципов - да, не очень. |
PavelD @ 13 января 2020, 02:01 | ЦПУ по прежнему, не смотря на все оптимизации, ориентируются на последовательное выполнение команд и операции с небольшими наборами данных |
PavelD @ 13 января 2020, 02:01 | в GPU же реализован принцип SIMD (Single Instrcution Multiple Data), при том именно на уровне железячной архитектуры, т.е. заточены она на массовый параллелизм обработки данных. |
Rem @ 13 января 2020, 16:20 | Какие такие ключевые архитектурные различия? В том, что у ЦП несколько ядер, но мощных, а у ГП много ядер, но сильно слабее? |
По правде сказать, Rem сам настолько ясно выразил те самые "архитектурные различия" между CPU и GPU, что я ну никак не могу понять, в чем у PavelD проблема с объяснением.
(картинки отсюда)
Когда-то у процессоров было одно "ядро" - сам процессор. Если собрать в одну систему несколько отдельных процессоров, на передачу данных между ними будет тратиться много времени, поэтому производители исхитрились размещать несколько независимых друг от друга ядер на одном и том же чипе - так быстрее.
В типичном современном ЦП ядер несколько, ну скажем, восемь. Или двенадцать.
В типичном современном ГП тысячи ядер: тысяча, полторы, две. В ГП RTX 2080 Ti их больше пяти тысяч, включая всякие специализированные ядра для перемножения матриц и трейсинга лучей. Конечно, они гораздо проще, чем ядра ЦП. Но их очень много.
Представь себе два завода. На одном стоит штук восемь больших корпусов - это очень мощные и хорошо оснащенные цеха, где знают много инструкций и делают сложные вещи очень быстро. Второй завод - это уходящие за горизонт ряды маленьких-маленьких домиков, в каждом из которых знают всего несколько инструкций и делают все очень просто - зато параллельно друг с другом.
Отсюда же вытекает разница в устройстве памяти: чтобы не заставлять ядра ждать поступления данных, процессор снабжают кэш-памятью, организованной в несколько уровней (L1, L2, L3...). В ЦП у каждого ядра есть, скажем, несколько кэшей первого уровня, один второго уровня, а кэш третьего уровня общий для всех ядер. И данные снаружи попадают в L3, а из него распределяются по кэшам отдельных ядер.
В ГП делать свою отдельную многоуровневую память для каждого "домика" накладно, поэтому ядра объединяются в мультипроцессоры и кластеры ("кварталы домиков") с одним общим кэшем на все ядра в кластере, и еще одним для всех кластеров. Да, при такой конструкции какие-то ядра будут простаивать и ждать данных (latency), что для ЦП было бы непозволительно, но поскольку ядер в ГП очень много и они делают простые вещи параллельно, эта проблема не так и велика.
Вот это все и называется "ключевыми архитектурными различиями".
Исправлено: Dangaard, 14 января 2020, 08:55 |
|