GTC17: все подробности архитектуры NVIDIA Volta
В архитектуре Pascal кэш данных и общая память не могли использоваться и адресоваться совместно. С архитектурой Volta NVIDIA меняет данный подход, теперь можно выделять до 128 кбайт на SM. В результате кэш данных можно увеличивать до семи раз по сравнению с Pascal. Сильнее всего от такого шага будет выигрывать код, который не использует общую память, но зависит от максимально возможного кэша данных.
Текстурные блоки тоже используют кэш данных, поэтому они тоже выигрывают от увеличения его максимального объема. Распределение объединенной памяти может варьироваться. Например, можно выделить 128 кбайт на SM, из которых 64 кбайт отведены на текстуры и операции загрузки/выгрузки, а оставшиеся 64 кбайт – на инструкции.
С новым подходом NVIDIA пытается реализовать лучшее из двух миров. Общая память Shared Memory в предыдущих архитектурах обеспечивала высокий уровень пропускной способности и низкие задержки, но разработчикам приходилось явно использовать эту память – с возможными проблемами overprovisioning. Но с архитектурой Volta это уже не требуется.
NVIDIA провела тесты в нескольких приложениях, под архитектурой Pascal потери составляют до 30%, под архитектурой Volta их удалось уменьшить до 7%.
В контексте NVLink была улучшена работа с унифицированной памятью (Unified Memory). До сих пор процессор не мог обращаться через интерфейс PCI Express к Unified Memory, если с памятью в то же время работал GPU. Так называемый движок Page Migration Engine гарантировал, что данные не могут одновременно поступать с двух источников.
Если же Tesla V100 и процессор подключаются через NVLink, то возможен одновременный доступ. Чуть ниже мы поговорим об улучшениях NVLink 2.0.
Ядра TensorОдна из наиболее важных инноваций архитектуры Volta, вернее, GPU GV100, заключается в ядрах Tensor. В случае Tesla V100 доступны 640 таких ядер. Добавление этих специальных ядер еще раз доказывает, насколько сильно NVIDIA ориентировала архитектуру Volta на глубокое обучение.
С ядрами Tensor NVIDIA смогла увеличить производительность вычислений FP32, важных для глубокого обучения, до 120 TFLOPS. То есть мы получаем прирост вычислительной производительности в 12 раз по сравнению с GPU GP100. NVIDIA также говорит о шестикратном увеличении производительности обработки запросов (inferencing).
Для процесса тренировки сетей глубокого обучения наиболее важны операции матричного умножения (BLAS GEMM), именно на них ориентированы ядра Tensor в GPU GV100. У ядер Tensor в SM имеются собственные пути передачи данных, их также можно полностью выключать с помощью стробирования частоты, если ядра не требуются.
Каждое ядро Tensor может обрабатывать матрицу 4 x 4 x 4 в виде D = A x B + C. Входные матрицы A и B относятся к типу FP16, для сложения может использоваться матрица FP16 или FP32.
Каждое ядро Tensor выполняет 64 операции FMA со смешанной точностью за такт – каждая такая операция может содержать умножение и сложение. В итоге восемь ядер Tensor на SM обеспечивают производительность 1.024 операций с плавающей запятой за такт.
В зависимости от приложения, производительность увеличивается в 1,8-9,3 раза. NVIDIA сравнивает Tesla P100 с ядрами CUDA 8 против Tesla V100 с CUDA 9.
Multi Process ServiceСовременные GPU могут выполнять одновременно несколько процессов. При этом на каждый процесс могут выделяться несколько вычислительных ядер. В архитектуре Pascal в GPU процессам выделялись необходимые ресурсы на GPU, потом процессы выполнялись в определенном порядке за выделенное время.
CUDA Multi-Process Service должен обеспечивать как можно более высокую загрузку доступных ресурсов. Но в предыдущей версии архитектуры некоторым процессам приходилось совместно использовать часть ресурсов. Что могло приводить к нежелательным ошибкам вычислений.
В Multi-Process Service архитектуры Volta проведены дальнейшие оптимизации выделения ресурсов, а также обеспечивается изоляция ресурсов. В результате Tesla V100 может выполнять до 163.840 потоков одновременно – в три раза больше, чем Tesla P100.
Производство на грани возможногоХотелось бы упомянуть и производство GPU GV100. Площадь чипа составляет 815 мм², он содержит 21 млрд. транзисторов, что подходит к пределу технических возможностей. Так что здесь NVIDIA рискует. Впрочем, NVIDIA наверняка принимала решение о разработке подобного чипа после консультаций со своим партнером по производству TSMC. Но даже в этом случае нельзя исключить случайности.
Тесное сотрудничество между NVIDIA и TSMC приносит свои плоды. Чип производится по оптимизированному 12-нм техпроцессу, который можно назвать лучшим из доступных сегодня.
GPU GV100 интересен не только большим количеством потоковых процессоров. Ядра Tensor занимают весьма существенную часть площади чипа. NVIDIA не называет точных цифр, но ядра Tensor настолько сложные, что для них потребовалось выделить существенную площадь. Что, в свою очередь, увеличивает сложность чипа.
Но высокая сложность производства характерна не только для самого GPU, но и для памяти с подложкой. В частности, подложка в упаковке GV100 с чипами High Bandwidth Memory играет важную роль, поскольку обеспечивает соединения между GPU и чипами памяти. Из-за размеров GPU в производстве подложки возникли свои сложности, так что NVIDIA пришлось непросто.
Чтобы площадь подложки не была слишком большой для производства, NVIDIA и TSMC пришлось разделить ее на две части. Они производятся раздельно, после чего соединяются друг с другом.