CUDA, вероятно, является лучшим вариантом, если вы знаете, что ваша целевая архитектура использует чипы nVidia. Вы имеете полный контроль над передачей данных, путями инструкций и порядком операций. Вы также можете обходиться намного меньшим количеством вызовов __syncthreads, когда работаете на нижнем уровне.
DirectX 10 будет легче взаимодействовать, я думаю, но если вы действительно хотите продвигать свою оптимизацию скорости, вы должны обойти дополнительный слой. DirectX 10 также не будет знать, когда использовать текстурную память по сравнению с постоянной памятью по сравнению с разделяемой памятью, также как вы будете знать, в зависимости от вашего конкретного алгоритма.
Если у вас есть доступ к Tesla C1060 или чему-то в этом роде, CUDA - лучший выбор. Вы действительно можете ускорить процесс, если знаете специфику вашего GPGPU - я видел 188-кратное ускорение в одном конкретном алгоритме на Tesla по сравнению с моим рабочим столом.