ASIC - це розшифроване значення для додатків, що належать до конкретних програм. В основному ви пишете програми для проектування чіпа в HDL . Візьму приклади того, як працюють сучасні комп’ютери, щоб пояснити мою думку:
- Процесорні процесори - це в основному мікропроцесор з багатьма помічниками, які виконують конкретні завдання. У мікропроцесорі є лише один блок арифметичної обробки (складений термін) під назвою " Акумулятор", в якому потрібно зберігати значення, оскільки обчислення виконуються лише і лише ті значення, що зберігаються в акумуляторі. Таким чином, кожну інструкцію, кожну операцію, кожну операцію з R / W потрібно робити через акумулятор (саме тому старіші комп'ютери використовувались для заморожування, коли ви писали з файлу на якийсь пристрій, хоча нині процес удосконалений і може не потребувати акумулятора входити між ними конкретно DMA). Тепер у алгоритмах ML вам потрібно виконати матричне множення, яке можна легко паралелізувати, але у нас є єдиний блок обробки, і таким чином вийшов графічний процесор.
- GPU - GPU має 100 процесорних одиниць, але їм не вистачає багатоцільових можливостей ЦП. Тож вони хороші для паралельних підрахунків. Оскільки в матричному множенні немає перекриття пам'яті (одна і та ж частина пам'яті, що маніпулюється двома процесами), GPU буде працювати дуже добре. Хоча GPU не є багатофункціональним, він працюватиме так само швидко, як процесор подає дані в свою пам'ять.
- ASIC - ASIC може бути будь-яким графічним процесором, процесором або процесором вашого дизайну, з будь-яким обсягом пам'яті, який ви хочете надати йому. Скажімо, ви хочете розробити власний спеціалізований процесор ML, спроектуйте процесор на ASIC. Ви хочете 256-бітний номер FP? Створіть 256 бітний процесор. Ви хочете, щоб ваш підсумок був швидким? Реалізувати паралельний суматор для більшої кількості бітів, ніж звичайні процесори? Ти хочеш
n
кількість ядер? Нема проблем. Ви хочете визначити потік даних від різних процесорних одиниць до різних місць? Ти можеш це зробити. Також при ретельному плануванні ви можете отримати компроміс між зоною ASIC проти потужності та швидкості. Єдина проблема полягає в тому, що для всього цього вам потрібно створити власні стандарти. Як правило, при розробці процесорів дотримуються чітко визначених стандартів, наприклад, кількість штифтів та їх функціональність, стандарт IEEE 754 для представлення з плаваючою комою тощо, які з'явилися після безлічі спроб та помилок. Тож якщо ви зможете подолати все це, ви можете легко створити свій власний ASIC.
Я не знаю, що Google виконує зі своїми TPU, але, мабуть, вони розробили якийсь стандарт Integer і FP для своїх 8-бітових ядер, залежно від вимог. Вони, ймовірно, реалізують це на ASIC з огляду на потужність, площу та швидкість.