Są dwie możliwości:
- czas przepychania danych do GPU jest znikomy: wtedy nie ma wielkiego znaczenia język który wypycha te dane na GPU,
- przeciwny przypadek jest znowu mało sensowny - po co tracić czas na przepychanie danych po PCI-Express jeżeli obliczenia są krótkie?
Jeśli chodzi o CUDA i OpenCL to sprawa jest taka, że CUDA jest tylko na GeForce, a OpenCL jest na GeForce, Radeony, x86, PowerPC itd Wydajność OpenCL, przy odpalaniu na CPU, jest wyraźnie wyższa niż Javy przy tych samych algorytmach i generalnie niewiele ustępuje kodowi natywnemu kompilowanemu z setkami egzotycznych flag. Pisząc kod w OpenCL będzie go mógł odpalić ktoś kto posiada GPU niezdolne do odpalenia OpenCL'a - wtedy kodem zajmie się CPU.
Argumentem za CUDA jest spora liczba bibliotek, jeżeli OpenCLowi brakuje sporych bibliotek, które są w CUDA, a których nie masz zamiaru pisać to wybierz CUDA. W innym przypadku lepiej OpenCL.