Сумбурні роздуми про майбутнє технології FPGA

    image
 
Працюючи над черговим ігровим (навчальним) проектом ПЛІС для плати Марсоход2 я зіткнувся з тим, що мені явно не вистачає місця в кристалі. Здається і проект не дуже складний, але моя реалізація така, що вимагає багато логіки. В принципі, це дурниця, справа-то житейська. Ну, якщо дуже буде потрібно, то можна вибрати ПЛІС з більшою ємністю. Власне мій проект — це гра «Життя», але реалізована в ПЛІС на мові Verilog HDL .
 
Про логіку гри, розповідати не буду, про неї і так написано вже достатньо .
 
Ідея проекту ось така: кожна клітина в ігровому полі є самостійний обчислювач. У кожному обчислювачі є своя логічна функція і свій регістр, який зберігає поточний стан клітини (жива / НЕ жива). Весь простір для життя клітин — це двовимірний масив обчислювачів, обчислювачі утворюють цілу мережу. Всі обчислювачі працюють синхронно, так як на все регістри подається єдина тактова частота. Малюнок вгорі повинен прояснити схему проекту.
 
Так от. На моїй платі варто ПЛІС Cyclone III EP3C10E144C8 компанії Альтера. 10тис логічних елементів. Спершу я думав, що зможу зробити двовимірний масив клітин 128x64 = 8192 клітки. Не поміщається. 64x64 = 4096 — те ж не поміщається в кристал. Як же так. Я зумів вмістити в ПЛІС тільки 32x16 = 512 клітин. Пичалька…
 
Роздуми наводять мене до думки, що можливо, в майбутньому, технологія ПЛІС переросте в щось більше, ніж програмована логіка. Ось про це своєму баченні я хотів би розповісти. Досвідченому читачеві відразу скажу, що багато подальшого написане є просто плід уяви і може бути навіть маячня.
Однак…
 
В даний час технологія ПЛІС використовується досить вузьким колом фахівців. В основному FPGA використовуються для прототипирования мікросхем і для дрібносерійних виробів, коли виготовлення мікросхем ASIC економічно недоцільно. Фахівців з FPGA, я думаю, не дуже багато. Технологія досить складна і вимагає багатьох специфічних знань. З іншого боку, для організації високошвидкісних і паралельних обчислень ПЛІС — це мабуть сама відповідна технологія.
 
Ми знаємо, наприклад, що компанія Альтера пропонує і просуває технологію OpenCL
Просто кажучи — це такий C-подібна мова для опису паралельних обчислень в FPGA акселераторі. До речі, Nvidia і її відеокарти так само підтримують паралельні обчислення c OpenCL .
 
Таким чином, видно, що Альтера явно замислюються про те, як донести «звичайні» C-подібні паралельні обчислення FPGA в народ. Подивимося, що там з цінами на плати для паралельних обчислень з FPGA? Плата Terasic DE5-Net.
 
 image
 
25 користувачам подобається ціна 8 тис баксів (жартую).
 
Є й інші спроби привезти FPGA в народ — Altera випустила спільно з Intel мікросхему серії E6x5C , де в єдиному корпусі з'єднаний процесор Atom і ПЛІС Arria II. Хороша спроба, але технологія так здається і не змогла знайти масового споживача.
 
Мабуть існуючі кристали ПЛІС погано вписуються в сучасну парадигму програмування.
А яка у нас зараз сучасна парадигма «нормального» програмування?
 
Мені здається, що якось так:
 
 
     
  • на комп'ютері завжди одночасно виповнюється кілька обчислювальних процесів і потоків
  •  
  • стан процесів і потоків зберігається в пам'яті, процес може запитати у ОС стільки пам'яті, скільки потрібно; можна навіть попросити більше, ніж є фізичної пам'яті — і процес може реально отримати цю віртуальну пам'ять.
  •  
  • обчислення проводяться процесором, іноді він має багато ядер. Зазвичай процес або потік не знають (або не хочуть знати) в якому ядрі процесора зараз виповнюється задача.
  •  
  • більш пріоритетне завдання може витіснити менш пріоритетну задачу. Витіснити — це значить зберегти стан сторінок пам'яті млявого процесу на диск і переключитися на більш пріоритетний процес. Виділити йому більший слайс часу.
  •  
 
Зрозуміло, що чим більше пам'яті і чим більше ядер процесора, тим швидше працюють всі процеси в системі.
Пам'ять і ядра процесора — це ресурси комп'ютера, обчислювача, які операційна система розподіляє між процесами.
 
Тепер уявімо собі, що в майбутньому ми отримаємо комп'ютери, де на ряду з пам'яттю і ядрами процесора будуть в наявності ще блоки логіки «як-би-плис». Цей ресурс «як-би-плис» за своїми властивостями знаходиться десь між процесором і пам'яттю. З одного боку «як-би-плис» = це обчислювач, тобто ближче до процесора, але з іншого боку це і пам'ять, бо в регістрах плис зберігається досить багато інформації. Стан обчислювача «як-би-плис» вже досить важко буде зберегти в структурі task_struct при перемиканні контексту завдання. Але, напевно, можна спробувати витіснити стан блоків логіки в swap файл, як віртуальну пам'ять. І тимчасово ОС може довантажити інші блоки логіки для активного потоку…
 
До речі, і Altera і Xilinx вже досить давно мають FPGA з можливістю часткової перезавантаження окремих ділянок, блоків логіки (Partial Reconfiguration ) — тобто в принципі вони якось йдуть в цю сторону…
 
Програміст може виділити для процесу стільки «як-би-плис», скільки потрібно. Буквально функцією lalloc (logic alloc) по аналогії з malloc (memory alloc). Потім з файлу вважати туди «прошивку ПЛІС» і вона буде жити і працювати. Ми, програмісти, за великим рахунком не повинні думати є ця пам'ять / логіка «як-би-плис» у системи або її немає. А чи не наша це справа. Так, іноді може бути дуже повільно при обмежених ресурсах, але хіба ми не знаємо як «лагают» відеоігри на слабких відкритих? Користувачі знають, що за сильне залізо доведеться платити, але добре б, щоб навіть мінімальна система вже мала в базовому варіанті логічні блоки «як-би-плис» для використання в програмах.
 
Насправді, звичайно, я уявляю собі, що така технологія навряд чи скоро з'явиться, занадто все це складно і не піддається реалізації. Принаймні існуючі мікросхеми ПЛІС мало підходять для цих цілей хоча б тому, що для конфігурування ПЛІС використовуються повільні послідовні інтерфейси типу JTAG. Але може бути, коли-то хтось із нас зробить це?
 
ЗИ: до речі, а от і моя гра життя в ПЛІС, така маленька, 32x16… ну немає у мене віртуальної пам'яті «як-би-плис», щоб зробити поле гри ширше і вище…
  
  
ЗИ2: всі вихідні коди і докладний опис проекту гри Життя можна взяти тут .
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.