Chciałbym usłyszeć od ludzi z doświadczeniem w kodowaniu dla obu. Ja mam doświadczenie tylko z NVIDIA.
NVIDIA CUDA wydaje się być dużo bardziej popularna niż konkurencja. (Licząc tylko tagi pytań na tym forum, „cuda” przewyższa „opencl” 3: 1, a „nvidia” przewyższa „ati” 15: 1 i nie ma żadnego tagu dla „ati-stream”).
Z drugiej strony, według Wikipedii, karty ATI / AMD powinny mieć dużo większy potencjał, zwłaszcza w przeliczeniu na dolara. Najszybsza obecnie karta NVIDIA na rynku, GeForce 580 (500 USD), ma wycenę na 1,6 jednoprecyzyjnego TFlopsa. AMD Radeon 6970 można kupić za 370 USD i wycenić na 2,7 TFlops. 580 ma 512 jednostek wykonawczych przy 772 MHz. 6970 ma 1536 jednostek wykonawczych przy 880 MHz.
Jak realistyczna jest ta papierowa przewaga AMD nad NVIDIA i czy jest prawdopodobne, że będzie ona realizowana w większości zadań GPGPU? Co dzieje się z zadaniami na liczbach całkowitych?
Odpowiedzi:
Mówiąc metaforycznie, ati ma dobry silnik w porównaniu do nvidii. Ale nvidia ma lepszy samochód: D
Dzieje się tak głównie dlatego, że nvidia zainwestowała sporą ilość swoich zasobów (w pieniądze i ludzi) w rozwój ważnych bibliotek wymaganych do obliczeń naukowych (BLAS, FFT), a następnie ponownie wykonała dobrą robotę w jej promowaniu. To może być powód, dla którego CUDA dominuje w tagach w porównaniu z ati (lub OpenCL)
Jeśli chodzi o korzyści realizowane w zadaniach GPGPU w ogóle, to ostatecznie zależałoby to od innych problemów (w zależności od aplikacji), takich jak przepustowość transferu pamięci, dobry kompilator i prawdopodobnie nawet sterownik. nvidia mając bardziej dojrzały kompilator, bardziej stabilny sterownik na Linuksie (linux, ponieważ jego użycie jest szeroko rozpowszechnione w obliczeniach naukowych), przechyla równowagę na korzyść CUDA (przynajmniej na razie).
EDYCJA 12 stycznia 2013 r
Minęły dwa lata, odkąd stworzyłem ten post, a czasami wciąż wydaje się przyciągać opinie. Postanowiłem więc wyjaśnić kilka rzeczy
Krótko mówiąc, OpenCL wypełnił lukę w ciągu ostatnich dwóch lat. Na polu pojawiają się nowi gracze. Ale CUDA wciąż nieco wyprzedza konkurencję.
źródło
Nie mam żadnych silnych uczuć co do CUDA kontra OpenCL; przypuszczalnie OpenCL to długoterminowa przyszłość, tylko dlatego, że jest otwartym standardem.
Ale dzisiejsze karty NVIDIA vs ATI dla GPGPU (nie wydajność grafiki, ale GPGPU), o których mam mocną opinię. Aby do tego doprowadzić, wskażę , że na aktualnej liście Top 500 dużych klastrów , NVIDIA prowadzi systemy AMD 4 do 1, a na gpgpu.org wyniki wyszukiwania (artykuły, linki do zasobów internetowych itp.) Dla NVIDIA wyniki liczebne dla AMD 6: 1.
Ogromną częścią tej różnicy jest ilość dostępnych informacji online. Sprawdź NVIDIA CUDA Zone i AMD GPGPU Developer Central . Ilość rzeczy dla początkujących programistów nie jest nawet bliska porównania. Na stronie NVIDIA znajdziesz tony dokumentów - i dodany kod - od osób prawdopodobnie pracujących nad problemami takimi jak Twój. Znajdziesz mnóstwo zajęć online, pochodzących od firmy NVIDIA i nie tylko, oraz bardzo przydatnych dokumentów, takich jak przewodnik po najlepszych praktykach dla programistów, itp. Dostępność bezpłatnych narzędzi programistycznych - profiler, cuda-gdb, itp. - w przeważającej mierze zmienia sposób NVIDIA.
(Redaktor: informacje w tym akapicie nie są już dokładne). Część różnicy dotyczy również sprzętu. Karty AMD mają lepsze specyfikacje pod względem szczytowych flopów, ale aby móc uzyskać znaczną ich część, musisz nie tylko rozbić swój problem na wiele całkowicie niezależnych procesorów strumieniowych, ale także każdy element pracy musi zostać wektoryzowany. Biorąc pod uwagę, że kod GPGPU jest wystarczająco trudny, ta dodatkowa złożoność architektoniczna wystarczy, aby wykonać lub zepsuć niektóre projekty.
Rezultatem tego wszystkiego jest ciągły wzrost społeczności użytkowników NVIDIA. Z trzech lub czterech grup, które znam, myślących o budowaniu klastrów GPU, żadna z nich nie rozważa poważnie kart AMD. A to będzie oznaczać jeszcze więcej grup piszących artykuły, wnoszących kod itp. Po stronie NVIDII.
Nie jestem sztyletem firmy NVIDIA; Chciałbym, żeby tak nie było i żeby istniały dwie (lub więcej!) Równie atrakcyjne platformy GPGPU. Konkurencja jest dobra. Być może AMD wkrótce przyspieszy swoją grę - a nadchodzące produkty fusion wyglądają bardzo atrakcyjnie. Ale dając komuś radę, które karty kupić dzisiaj i gdzie spędzić czas, wkładając teraz wysiłek, nie mogę z czystym sumieniem powiedzieć, że oba środowiska programistyczne są równie dobre.
Zredagowano, by dodać : Wydaje mi się, że powyższe jest trochę eliptyczne, jeśli chodzi o odpowiedź na pierwotne pytanie, więc pozwólcie, że wyjaśnię to nieco. Wydajność, jaką można uzyskać z części sprzętu, w idealnym świecie z dostępnym nieskończonym czasem zależy tylko od sprzętu bazowego i możliwości języka programowania; ale w rzeczywistości ilość wydajności, jaką można uzyskać w określonej ilości zainwestowanego czasu, jest również silnie uzależniona od narzędzi programistycznych, istniejących baz kodu społeczności (np. publicznie dostępnych bibliotek itp.). Wszystkie te rozważania silnie wskazują na firmę NVIDIA.
(Redaktor: informacje w tym akapicie nie są już dokładne). Jeśli chodzi o sprzęt, wymóg wektoryzacji w jednostkach SIMD w kartach AMD również sprawia, że osiągnięcie wydajności papieru jest jeszcze trudniejsze niż w przypadku sprzętu NVIDIA.
źródło
Główna różnica między architekturami AMD i NVIDIA polega na tym, że AMD jest zoptymalizowane pod kątem problemów, w których zachowanie algorytmu można określić w czasie kompilacji, podczas gdy NVIDIA jest zoptymalizowana pod kątem problemów, w których zachowanie algorytmu można określić tylko w czasie wykonywania.
AMD ma stosunkowo prostą architekturę, która pozwala im spędzać więcej tranzystorów na jednostkach ALU. Tak długo, jak problem można w pełni zdefiniować w czasie kompilacji i pomyślnie odwzorować na architekturę w nieco statyczny lub liniowy sposób, istnieje duża szansa, że AMD będzie w stanie uruchomić algorytm szybciej niż NVIDIA.
Z drugiej strony kompilator firmy NVIDIA wykonuje mniej analiz w czasie kompilacji. Zamiast tego NVIDIA ma bardziej zaawansowaną architekturę, w której spędzili więcej tranzystorów na logice, która jest w stanie obsłużyć dynamiczne zachowanie algorytmu, które pojawia się tylko w czasie wykonywania.
Uważam, że faktem, że większość superkomputerów korzystających z procesorów graficznych współpracuje z NVIDIA jest ten rodzaj problemu, na którym naukowcy są zainteresowani przeprowadzaniem obliczeń, generalnie lepiej odwzorowując architekturę NVIDII niż AMD.
źródło
Zrobiłem kilka iteracyjnych kodowań w OpenCL. A wyniki uruchomienia go w NVIDIA i ATI są prawie takie same. Blisko tej samej prędkości w kartach o tej samej wartości ($).
W obu przypadkach prędkości były ~ 10x-30x w porównaniu z CPU.
Nie testowałem CUDA, ale wątpię, by w magiczny sposób rozwiązał problemy z pobieraniem pamięci losowej. Obecnie CUDA i OpenCL są mniej więcej takie same i widzę więcej przyszłości na OpenCL niż na CUDA. Głównym powodem jest to, że Intel wprowadza sterowniki z OpenCL dla swoich procesorów. Będzie to ogromny postęp w przyszłości (uruchomienie 16, 32 lub 64 wątków OpenCL w CPU jest NAPRAWDĘ szybkie i naprawdę łatwe do przeniesienia do GPU).
źródło
Spędziwszy trochę czasu z OpenCL dla kart GCN po kilku latach CUDA dla Fermi i Kepler, nadal wolę CUDA jako język programowania i wybrałbym sprzęt AMD z CUDA, gdybym miał opcję.
Główne różnice między NVIDIA i AMD (OpenCL):
Dla AMD:
Nawet z Maxwellem, NVidia nadal ma dłuższe opóźnienia poleceń, a złożone algorytmy prawdopodobnie będą o 10 szybsze na AMD (zakładając te same teoretyczne Tflops) po łatwej optymalizacji dla obu. Luka wynosiła do 60% w przypadku Kepler VS GCN. W tym sensie trudniej jest zoptymalizować złożone jądra dla NVidii.
Tanie karty.
OpenCL jest otwartym standardem z innymi dostępnymi dostawcami.
Nvidia:
Ma linię sprzętu Tesla, która jest odpowiednia do niezawodnego wysokiego obciążenia serwera.
Nowy Maxwell jest o wiele bardziej energooszczędny.
Kompilator i narzędzia są znacznie bardziej zaawansowane. AMD nadal nie może zaimplementować
maxregcout
parametru, więc możesz łatwo kontrolować zajętość na różnych urządzeniach, a ich kompilator ma wiele przypadkowych pomysłów na to, jaki jest optymalny kod, który zmienia się z każdą wersją, więc może być konieczne ponowne odwiedzanie starego kodu co pół rok, ponieważ nagle zwolnił o 40%.W tym momencie, jeśli Twoim celem jest GPGPU, CUDA jest jedynym wyborem, ponieważ opencL z AMD nie jest gotowy na farmę serwerów i znacznie trudniej jest napisać wydajny kod dla AMD ze względu na fakt, że kompilator zawsze wydaje się być „w wersji beta” .
źródło
Jestem nowy w GPGPU, ale mam pewne doświadczenie w obliczeniach naukowych (doktorat z fizyki). Tworzę zespół badawczy i chcę przejść do korzystania z GPGPU do moich obliczeń. Musiałem wybierać między dostępnymi platformami. Zdecydowałem się na Nvidię z kilku powodów: podczas gdy ATI może być szybsze na papierze, Nvidia ma bardziej dojrzałą platformę i więcej dokumentacji, dzięki czemu będzie można zbliżyć się do szczytowej wydajności na tej platformie.
Nvidia ma również program wspierania badań naukowych, o wsparcie można się ubiegać, właśnie otrzymałem kartę TESLA 2075, z której bardzo się cieszę. Nie wiem, czy ATI czy Intel obsługują badania w ten sposób.
To, co słyszałem o OpenCL, to to, że stara się być wszystkim na raz, prawdą jest, że twój kod OpenCL będzie bardziej przenośny, ale prawdopodobnie nie wykorzysta pełnych możliwości obu platform. Wolałbym się nauczyć więcej i pisać programy, które lepiej wykorzystują zasoby. Dzięki TESLA K10, który właśnie pojawił się w tym roku, Nvidia jest w zakresie 4,5 TeraFlops, więc nie jest jasne, czy Nvidia jest w tyle ... jednak Intel MIC może okazać się prawdziwym konkurentem, zwłaszcza jeśli uda im się przenieść jednostkę GPGPU do płyta główna. Ale na razie wybrałem Nvidię.
źródło
Moje doświadczenie w ocenie wydajności zmiennoprzecinkowej OpenCL zwykle faworyzuje karty NVIDIA. Pracowałem z kilkoma zmiennoprzecinkowymi testami porównawczymi na kartach NVIDIA, od 8600M GT do GTX 460. Karty NVIDIA konsekwentnie osiągają około połowy teoretycznego szczytu pojedynczego precisino w tych testach.
Karty ATI, z którymi pracowałem, rzadko osiągają lepsze niż jedna trzecia wartości szczytowej pojedynczej precyzji. Zwróć uwagę, że moje doświadczenia z ATI są wypaczone; Mogłem pracować tylko z jedną kartą z serii 5000. Moje doświadczenie dotyczy głównie kart z serii HD 4000, które nigdy nie były dobrze obsługiwane. Obsługa kart z serii HD 5000 jest znacznie lepsza.
źródło
Chciałbym dodać do debaty. Dla nas w branży oprogramowania możemy narażać wydajność pojedynczej precyzji na produktywność, ale nawet to nie muszę iść na kompromis, ponieważ, jak już wspomniano, nie można osiągnąć tak dużej wydajności na sprzęcie ATI przy użyciu OpenCL, ile można osiągnąć jeśli piszesz w CUDA na sprzęcie NVIDIA.
I tak, po ogłoszeniu przez PGI kompilatora x86 dla CUDA, nie będzie żadnego powodu, aby poświęcać więcej czasu i zasobów na pisanie w OpenCL :)
PS: Mój argument może być stronniczy, ponieważ prawie całą naszą pracę GPGPU wykonujemy na CUDA. Mamy bibliotekę CUVI do przetwarzania obrazów / wizji komputerowej (CUDA for Vision and Imaging), która przyspiesza niektóre podstawowe funkcje IP / CV w CUDA.
źródło
Cuda jest z pewnością popularna niż OpenCL na dzień dzisiejszy, ponieważ została wydana 3 lub 4 lata przed OpenCL. Od czasu wydania OpenCL, Nvidia nie wniosła zbyt wiele do języka, ponieważ koncentruje się dużo na CUDA. Nie wydali nawet wersji openCL 1.2 dla żadnego sterownika.
Jeśli chodzi o przetwarzanie heterogeniczne, a także urządzenia przenośne, OpenCl z pewnością zyska w najbliższej przyszłości większą popularność. Obecnie największym współtwórcą OpenCL jest AMD, jest to widoczne na ich stronie.
źródło
z mojego doświadczenia:
jeśli chcesz uzyskać najlepszą absolutną wydajność, musisz zobaczyć, kto korzysta z najnowszej iteracji sprzętu i użyć ich stosu (w tym najnowszych / beta).
jeśli chcesz uzyskać najlepszą wydajność za pieniądze, będziesz celować w karty dla graczy, a nie karty „profesjonalne”, a elastyczność kierowania reklam na różne platformy sprzyja opencl.
Szczególnie jeśli zaczynasz, Cuda jest bardziej dopracowana i ma więcej narzędzi i bibliotek.
na koniec moje osobiste zdanie, po przerażającym "wsparciu" ze strony nvidii (dostaliśmy martwą teslę i nie zmieniano jej od miesięcy, gdy klient czekał): elastyczność przeskoczenia statku z opencl jest warta ryzyka nieco niższej wydajności kiedy nvidia wyprzedza cykl wydawniczy.
źródło
libcuda.so
(tylko z OpenCL, działa CUDA) i brak jakiejkolwiek odpowiedzi od nich.