Зустрічайте Ієна Бака з Nvidia
Дякуємо, що знайшли час для спілкування сьогодні. Почнемо з деяких основ. Чому б вам не розповісти нашим читачам трохи про себе та про те, що ви зараз робите в Nvidia?
Я директор програмного забезпечення з GPU Computing тут, у Nvidia. Моя головна увага — створення та розвиток повної обчислювальної платформи GPU, яка включає системне програмне забезпечення, інструменти розробника, напрямок мови та компілятора, бібліотеки та цільові програми та алгоритми. За допомогою чудової команди ми розробляємо як програмне забезпечення для кінцевих користувачів, так і визначаємо напрямок для обчислень GPU в Nvidia.
Чому б нам не почати з початку? Я вважаю, що ваш інтерес до GPGPU не почався, коли вам було 5 років – які події відбувалися в Прінстоні чи Стенфорді, що справді спонукало вас виявити інтерес до GPGPU?
У мої дні в Прінстоні я займався обчисленнями на графічному процесорі, експериментуючи з тепловою конвекцією та симуляцією рідини на графічному обладнанні, яким на той час було SGI O2. Хоча все було дуже обмежено, було важко аргументувати це.
Я серйозно почав розглядати обчислення GPU під час моєї докторської дисертації в Стенфорді. У Стенфорді я разом з іншими членами дослідницького співтовариства зрозуміли, що природним прогресом програмованої графіки було еволюція GPU в процесор більш загального призначення. Ми написали одну з перших статей SIGGRAPH про трасування променів за допомогою графічного процесора класу DX9, щоб довести це. У роботі надихало те, що цей звичайний процесор, який був доступний на будь-якому ПК, дотримувався кубічного темпу зростання продуктивності за законом Мура, набагато швидше, ніж центральний процесор. Це викликало запитання: що міг би зробити ПК, якби він мав на кілька порядків більше обчислювальних сил, ніж сьогодні? Повна зміна гри для обчислювальних наук, а також комп’ютерного зору, штучного інтелекту, аналізу даних та графіки.
Якою була твоя роль з Бруком?
Після роботи над можливістю трасування променів на графічному процесорі мій дослідницький центр у Стенфорді переключився на розуміння правильної моделі програмування для обчислень на GPU. У той час багато інших показали, що графічний процесор добре працює в різних програмах, але не було хорошої основи чи моделі програмування щодо того, як слід сприймати графічний процесор як обчислювальний пристрій. У той час, щоб мати можливість перенести програму на графічний процесор, потрібна була ступінь доктора філософії з комп’ютерної графіки. Тож я розпочав проект Брука з метою визначення мови програмування для обчислень на GPU, яка абстрагувала графіки GPU на більш загальні концепції програмування. Фундаментальною концепцією програмування Брука був «потік», який представляв собою набір елементів даних, які вимагали подібної роботи. Брук зрештою став моєю докторською дисертацією в Стенфорді.
Ваша робота почалася з Merrimac, Stanford Streaming Super Computer. Чим це відрізняється від такого, як Tesla?
Концепції моделі програмування Брука були застосовні не тільки до графічних процесорів. У Стенфорді ми працювали над двома різними реалізаціями моделі програмування Брука: одна для графічних процесорів, інша для Merrimac, яка була дослідницькою архітектурою, розробленою в Стенфорді. Багато ідей, започаткованих як частина Merrimac, вплинули на те, як можна було б покращити графічні процесори для обчислень загального призначення. Слід також зазначити, що Білл Даллі, який був головним дослідником Merrimac у Стенфорді, тепер є головним науковим співробітником Nvidia.
Чи було CUDA якесь коріння в Gelato? Якою була перша академічна розвідка ГПГПУ? А як щодо першого комерційного використання?
Я почав CUDA, завершуючи дослідження в Стенфорді. Nvidia вже дуже підтримала мої дослідження і чітко побачила потенціал для кращого використання GPU на апаратній стороні речей. Я приєднався до Nvidia, щоб розпочати проект CUDA у 2005 році. Тоді це був лише я та ще один інженер. Тепер ми перетворили проект на організацію, якою вона є сьогодні, і центральний компонент сучасних графічних процесорів Nvidia.
www.gpgpu.org містить гарну історію обчислень на графічному процесорі, починаючи з 2002 року.
Наразі AMD висуває Brook як мову програмування для GPGPU, тоді як Nvidia має C з розширеннями CUDA. Як би ви порівняли сильні/слабкі сторони обох?
Починаючи з Nvidia, у нас була можливість переглянути деякі фундаментальні дизайнерські рішення Brook, які значною мірою базувалися на можливостях обладнання класу DX9. Одним з ключових обмежень були обмеження моделі пам’яті, що вимагало від програміста відобразити свій алгоритм навколо досить обмеженого шаблону доступу до пам’яті. За допомогою нашого C з розширеннями CUDA ми послабили ці обмеження. По суті, програміст просто отримав величезний пул потоків і міг отримати доступ до пам’яті будь-яким способом, яким забажав. Це покращення, а також деякі інші, дозволили нам реалізувати повну семантику мови C на графічному процесорі.