Мартин Беккет и Пикксу дали хорошие ответы;позвольте мне добавить что-то слишком большое для комментария:
Суть CUDA против OpenCL в том, что ядра - где почти вся тяжелая работа выполнена -очень похожи, хотя ключевые слова разные.Безусловно, самая сложная часть программирования GPGPU - выяснить, как эффективно разбить вашу программу на мелкозернистые части SIMD, которые хорошо работают.Как только вы это выясните, полученные ядра довольно легко перетасовываются между CUDA и OpenCL, и я представляю, что будет дальше.
Стандартный код для распределения памяти, перетасовывания данных назад и вперед междуhost & GPU и т. д. гораздо менее похожи, но по сравнению с ядрами переписать этот материал сравнительно просто.(Скучно до чертиков, но прямолинейно).
Так что я бы не стал тратить много времени на чтение чайных листьев, чтобы попытаться угадать, что будет дольше между CUDA и OpenCL.Если вы делаете решите пойти по этому пути, просто найдите оборудование и (возможно, что еще более важно) платформу разработки, которая соответствует вашим потребностям, затем выберите язык GPGPU, наиболее подходящий для этого, и работайте с ним.