2013-08-02 34 views
58

Jestem początkującym programistom GPU. Mam laptopa z kartą NVIDIA GeForce GT 640. Mam do czynienia z dwoma dylematami, sugestie są mile widziane.Programowanie GPU, CUDA lub OpenCL?

  1. Jeśli pójdę do CUDA - Ubuntu lub Windows Wyraźnie CUDA jest bardziej nadaje się do okien, gdy może to być poważny problem, aby zainstalować na Ubuntu. Widziałem kilka blogów, które twierdzą, że zainstalowały CUDA 5 na Ubuntu 11.10 i Ubuntu 12.04. Jednak nie byłem w stanie zmusić ich do pracy. Ponadto, standard CUDA textbooks wolą pracować w domenie Windows i mniej lub bardziej milczą na temat instalacji i działania Unix/Ubuntu.

  2. CUDA or OpenCL - Teraz jest to prawdopodobnie bardziej skomplikowane niż moje pierwsze pytanie! Najczęściej spotykam się z projektami GPGPU z CUDA/Nvidia, ale OpenCL to prawdopodobnie najlepsza opcja w open source, a instalacja w systemie Ubuntu prawdopodobnie nie będzie problemem, chociaż niektóre sugestie tutaj będą najbardziej przydatne. Czy poświęcam jakąkolwiek funkcjonalność, jeśli wybieram OpenCL i NOT CUDA?

Każda pomoc lub sugestie?

+2

Odnosząc się do pierwszego pytania, mam wrażenie, że system Windows jest obecnie lepiej obsługiwany w systemach CUDA niż Linux. W przeszłości często używałem CUDA pod Linuksem, ale instalacja zawsze była trochę skomplikowana. Jeśli chodzi o twoje drugie pytanie, myślę, że możesz znaleźć wiele materiałów przez proste wyszukiwanie google, na przykład [CUDA vs OpenCL: Którego powinienem użyć?] (Http://wiki.tiker.net/CudaVsOpenCL) i [Różnica między CUDA a OpenCL 2010] (http://streamcomputing.eu/blog/2010-04-22/difference-between-cuda-and-opencl/). – JackOLantern

+2

Może się okazać, że wydanie robocze CUDA 5.5 jest łatwe do zainstalowania w systemie Linux (zobacz https://developer.nvidia.com/content/cudacasts-episode-5-install-cuda-55-linux-package-manager). Ponadto możliwe jest debugowanie kodu CUDA za pomocą pojedynczego procesora graficznego w CUDA 5.5 pod Linuksem, z możliwością obliczeń w wersji 3.5 lub wyższej. Nie w twoim przypadku, jednak jest to całkiem dobre dla użytkowników Linuksa :) Nie jestem świadomy wymagań debugowania systemu Windows. – pQB

Odpowiedz

78
  1. Jeśli używasz OpenCL, łatwo można go używać zarówno na Windows i Linux, ponieważ mając sterowników ekranu jest wystarczająca do uruchomienia programów do programowania OpenCL i będzie wystarczy zainstalować SDK. CUDA ma więcej wymagań w konkretnych wersjach GCC itp. Jednak instalacja w systemie Linux nie jest trudniejsza.

  2. W systemie Linux CUDA ma dziwne wymagania, takie jak używanie GCC 4.6 lub 4.7. Jeśli używasz innej wersji GCC, nie będziesz już w stanie skompilować programu. Jeśli używasz OpenCL, możesz użyć dowolnego kompilatora, ponieważ musisz po prostu połączyć się ze wspólną biblioteką OpenCL. Tak więc OpenCL jest łatwiejszy w konfiguracji, używaniu i kompilacji. Po skompilowaniu programu OpenCL można go uruchomić na dowolnym sprzęcie (o ile jest to zakodowane), nawet jeśli został skompilowany przy użyciu OpenCL SDK innej marki.

Można pisać programy OpenCL, które będą działać na sprzęcie Nvidia, AMD i Intel, na procesorach graficznych, procesorach i akceleratorach. Co więcej, Altera pracuje nad obsługą OpenCL na FPGA! Jeśli używasz CUDA, będziesz musiał używać wyłącznie procesorów graficznych Nvidia i ponownie zapisać swój kod w OpenCL lub innym języku dla innych platform. Poważne ograniczenie korzystania z CUDA i poważna strata czasu w dłuższej perspektywie.

Widzę, że ktoś zamieścił kilka starych referencji między CUDA i OpenCL, ale są stare! Kiedy te dokumenty były niedostępne, tylko AMD poprawnie obsługuje OpenCL. Od 2013 roku OpenCL jest wspierany przez ARM, Alterę, Intel itd. I stał się standardem branżowym.

Jedynym minusem jest to, że OpenCL jest tak elastyczny, że masz do wyboru więcej opcji i sposobów kodowania alokacji pamięci, transferów itp. W twoim programie. Dlatego może być bardziej skomplikowana.

5

Myślę, że nie jest bardzo trudno skonfigurować środowisko cuda na ubuntu, możesz spróbować.

Jako student architektury komputerowej uważam, że musisz nauczyć się zarówno OpenCL, jak i CUDA. I powinieneś najpierw nauczyć się cuda, ponieważ CUDA udostępnia więcej informacji o sprzęcie i środowisku wykonawczym, świadomość sprzętu jest bardzo ważna, gdy chcesz zoptymalizować kody GPU.