ASIC - расшифровывается как IC для конкретного приложения. В основном вы пишете программы для проектирования чипа в HDL . Я расскажу о том, как работают современные компьютеры, чтобы объяснить мою точку зрения:
- ЦП - ЦП - это в основном микропроцессор с множеством вспомогательных микросхем, выполняющих определенные задачи. В микропроцессоре есть только один модуль арифметической обработки (составленный термин), называемый накопителем, в котором должно храниться значение, поскольку выполняются только вычисления и только значения хранятся в аккумуляторе. Таким образом, каждая инструкция, каждая операция, каждая операция чтения / записи должна выполняться через аккумулятор (вот почему старые компьютеры зависали при записи из файла на какое-либо устройство, хотя в настоящее время процесс был усовершенствован и может не требовать аккумулятора встать между конкретно DMA). Теперь в алгоритмах ML вам необходимо выполнять умножения матриц, которые можно легко распараллелить, но у нас в нашем распоряжении только один процессор, и поэтому появились графические процессоры.
- Графические процессоры - графические процессоры имеют 100 процессорных единиц, но им не хватает многофункциональных возможностей процессора. Так что они хороши для распараллеливаемых вычислений. Поскольку в матричном умножении нет перекрытия памяти (та же часть памяти, которой манипулируют 2 процесса), графические процессоры будут работать очень хорошо. Хотя, поскольку графический процессор не является многофункциональным, он будет работать только так быстро, как процессор загружает данные в свою память.
- ASIC - ASIC может быть любым графическим процессором, процессором или процессором вашей конструкции с любым объемом памяти, который вы хотите выделить. Допустим, вы хотите создать свой собственный специализированный процессор ML, разработать процессор на ASIC. Вы хотите 256-битный номер FP? Создать 256-битный процессор. Вы хотите, чтобы ваше суммирование было быстрым? Реализовать параллельный сумматор до большего количества бит, чем у обычных процессоров? Ты хочешь
n
количество ядер? Нет проблем. Вы хотите определить поток данных из разных блоков обработки в разные места? Ты можешь это сделать. Также при тщательном планировании вы можете найти компромисс между областью ASIC и мощностью в зависимости от скорости. Единственная проблема заключается в том, что для всего этого вам нужно создать свои собственные стандарты. Обычно при проектировании процессоров соблюдаются некоторые четко определенные стандарты, такие как количество выводов и их функциональность, стандарт IEEE 754 для представления с плавающей запятой и т. Д., Которые были разработаны после множества проб и ошибок. Поэтому, если вы можете преодолеть все это, вы можете легко создать свою собственную ASIC.
Я не знаю, что Google делает со своими TPU, но, видимо, они разработали своего рода стандарт Integer и FP для своих 8-битных ядер в зависимости от существующих требований. Вероятно, они внедряют его на ASIC с точки зрения мощности, площади и скорости.