Używam CUDA 6.0 i implementacji OpenCL, która jest dołączona do zestawu SDK CUDA. Mam dwie identyczne jądra dla każdej platformy (różnią się one od słów kluczowych związanych z platformą). Czytają i zapisują pamięć globalną, każdy wątek ma inną lokalizację. Konfiguracja uruchamiania dla CUDA to 200 blocks of 250 threads (1D)
, która odpowiada bezpośrednio konfiguracji OpenCL - 50,000 global work size and 250 local work size
.Porównanie CUDA vs OpenCL
Kod OpenCL działa szybciej. Czy to jest możliwe, czy też mam na to czas? Rozumiem, że implementacja OpenCL firmy NVIDIA opiera się na implementacji CUDA. Osiągam około 15% lepszą wydajność dzięki OpenCL.
Byłoby wspaniale, gdybyś mógł zasugerować, dlaczego widzę to i być może pewne różnice między CUDA i OpenCL implementowane przez NVIDIA?
Wyniki nie są spójne we wszystkich problemach i przypadkach. Ale twój może mieć rację. OpenCL działa domyślnie asynchronicznie, więc jeśli użyjesz CUDA takim, jakim jest (nie asynchronicznym), prawdopodobnie spowoduje to nieco wolniejszą wydajność niż OpenCL. – DarkZeros
Słyszałem już, że wdrożenie OCL nVIDII oparte jest na CUDA. Jednak za każdym razem, gdy próbowałem znaleźć jakieś źródła, nigdy nie znalazłem żadnych dowodów na to. Doszedłem do wniosku, że jest to błąd oparty na tym, że CUDA jest błędnie używana jako nazwa języka, podczas gdy w rzeczywistości jest to "równoległa platforma obliczeniowa i model programowania" (Compute Unified Device Architecture) według Wikipedii. Stąd, gdy zobaczysz slajd z NVIDII pokazujący, że w OCL jest coś takiego jak CUDA, czyli GPU, który jest chipem CUDA. Czy możesz opublikować źródło, jeśli je posiadasz? Chciałbym wiedzieć na pewno. – CaptainObvious
OpenCL i CUDA są zupełnie inne. Obaj używają tego samego HW na końcu. Ale tak jak OpenGL i DirectX, jeden nie jest pod innym lub viceversa. Główne punkty do stwierdzenia, że biblioteki są różne, kompilatory są różne, a model wykonania jest inny. Niektóre części mogą być powszechne, ale większość nie. – DarkZeros