Я использую CUDA 6.0 и реализацию OpenCL, поставляемую вместе с CUDA SDK. У меня есть два одинаковых ядра для каждой платформы (они различаются в ключевых словах платформы). Они только читают и записывают глобальную память, каждый поток отличается от другого. Конфигурация запуска для CUDA составляет 200 blocks of 250 threads (1D)
, что напрямую соответствует конфигурации OpenCL - 50,000 global work size and 250 local work size
.
Код OpenCL работает быстрее. Возможно ли это, или я не ошибаюсь? Я понимаю, что реализация NVIDIA OpenCL основана на версии для CUDA. Я получаю 15% лучшую производительность с OpenCL.
Было бы здорово, если бы вы могли предположить, почему я могу видеть это и, возможно, некоторые различия между CUDA и OpenCL, реализованные NVIDIA?