Poznaj Iana Bucka z Nvidii
Dziękujemy za poświęcenie czasu na dzisiejszą rozmowę. Zacznijmy od podstaw. Może opowiesz naszym czytelnikom trochę o sobie i o tym, co aktualnie robisz w Nvidii?
W firmie Nvidia jestem dyrektorem ds. oprogramowania ds. obliczeń na GPU. Skupiam się głównie na tworzeniu i rozwijaniu kompletnej platformy obliczeniowej GPU, która obejmuje oprogramowanie systemowe, narzędzia programistyczne, kierunek językowy i kompilator, biblioteki oraz docelowe aplikacje i algorytmy. Z pomocą wspaniałego zespołu tworzymy zarówno oprogramowanie dla użytkowników końcowych, jak i wyznaczamy kierunek obliczeń GPU w Nvidii.
Dlaczego nie zaczniemy od początku? Wyobrażam sobie, że twoje zainteresowanie GPGPU nie zaczęło się, gdy miałeś 5 lat – jakie wydarzenia miały miejsce w Princeton lub Stanford, które tak naprawdę skłoniły cię do odkrycia zainteresowania GPGPU?
W czasach Princeton zajmowałem się obliczeniami na GPU, eksperymentując z konwekcją termiczną i symulacją płynów na sprzęcie graficznym, którym w tamtym czasie było SGI O2. Chociaż sytuacja była tak bardzo ograniczona, trudno było to uzasadnić.
Poważnie zacząłem przyglądać się obliczeniom na GPU podczas moich badań doktoranckich na Stanford. W Stanford ja, wraz z innymi członkami społeczności naukowej, zdaliśmy sobie sprawę, że naturalnym postępem programowalnej grafiki była ewolucja GPU do procesora ogólnego przeznaczenia. Napisaliśmy jeden z pierwszych artykułów SIGGRAPH na temat ray tracingu ze sprzętem GPU klasy DX9, aby pomóc w udowodnieniu tego. To, co było tak motywujące w tej pracy, to fakt, że ten standardowy procesor, który był dostępny w każdym komputerze PC, podążał za stopniem wzrostu wydajności zgodnie z prawem Moore’a, znacznie szybciej niż procesor. To rodziło pytanie: co mógłby zrobić komputer PC, gdyby miał o wiele rzędów wielkości większą moc obliczeniową niż obecnie? Całkowity przełom w naukach obliczeniowych, a także wizji komputerowej, sztucznej inteligencji, eksploracji danych i grafice.
Jaka była twoja rola z Brookiem?
Po pracy nad możliwością śledzenia promieni na GPU, moje badania w Stanford skupiły się na zrozumieniu właściwego modelu programowania dla obliczeń GPU. W tamtym czasie wielu innych wykazało, że procesor graficzny był dobry w wielu różnych aplikacjach, ale nie było dobrego frameworka ani modelu programowania, w jaki sposób należy myśleć o procesorze graficznym jako urządzeniu obliczeniowym. W tamtym czasie wymagało to doktoratu z grafiki komputerowej, aby móc przenieść aplikację na GPU. Zacząłem więc projekt Brook z celem zdefiniowania języka programowania dla obliczeń GPU, który wyabstrahował grafikę GPU do bardziej ogólnych koncepcji programowania. Podstawową koncepcją programistyczną Brooka był „strumień”, który był zbiorem elementów danych wymagających podobnej pracy. Brook ostatecznie stał się moją pracą doktorską na Stanford.
Twoja praca rozpoczęła się od Merrimac, superkomputera do transmisji strumieniowej Stanforda. Czym to się różni od czegoś takiego jak Tesla?
Koncepcje modeli programowania Brooka miały zastosowanie nie tylko do procesorów graficznych. W Stanford pracowaliśmy nad dwoma różnymi implementacjami modelu programowania Brook: jedną dla GPU, drugą dla Merrimaca, który był architekturą badawczą opracowaną w Stanford. Wiele pomysłów zapoczątkowanych w ramach Merrimac wpłynęło na to, jak można ulepszyć procesory graficzne do celów obliczeniowych ogólnego przeznaczenia. Należy również zauważyć, że Bill Dally, który był głównym badaczem Merrimac w Stanford, jest teraz głównym naukowcem w Nvidii.
Czy CUDA miała jakieś korzenie w Gelato? Jaka była pierwsza akademicka eksploracja GPGPU? A co z pierwszym skomercjalizowanym zastosowaniem?
Zacząłem CUDA podczas kończenia badań na Stanford. Nvidia już bardzo wspierała moje badania i wyraźnie dostrzegła potencjał lepszego umożliwienia obliczeń GPU od strony sprzętowej. Dołączyłem do Nvidii, aby rozpocząć projekt CUDA w 2005 roku. W tamtym czasie byłem tylko ja i jeszcze jeden inżynier. Teraz projekt rozrósł do organizacji, którą jest dzisiaj, i jest centralnym elementem dzisiejszych procesorów graficznych Nvidii.
www.gpgpu.org zawiera ciekawą historię obliczeń na GPU, sięgającą 2002 roku.
Obecnie AMD promuje Brook jako preferowany język programowania dla GPGPU, podczas gdy Nvidia ma C z rozszerzeniami CUDA. Jak porównałbyś mocne/słabe strony obu?
Zaczynając od Nvidii, mieliśmy okazję ponownie przyjrzeć się niektórym z podstawowych decyzji projektowych Brooka, które w dużej mierze opierały się na tym, co mógł osiągnąć sprzęt klasy DX9. Jednym z kluczowych ograniczeń były ograniczenia modelu pamięci, które wymagały od programisty mapowania swojego algorytmu wokół dość ograniczonego wzorca dostępu do pamięci. Dzięki naszemu C z rozszerzeniami CUDA złagodziliśmy te ograniczenia. Zasadniczo programista otrzymał po prostu ogromną pulę wątków i mógł uzyskać dostęp do pamięci w dowolny sposób. To ulepszenie, jak również kilka innych, pozwoliło nam zaimplementować pełną semantykę języka C na GPU.