При написании приложений CUDA вы можете либо работать на уровне драйвера, либо на уровне выполнения, как показано на этом изображении (библиотеки CUFFT и CUBLAS для передовой математики):
Я предполагаю, что компромисс между ними - это повышенная производительность для API с низким уровнем выбросов, но ценой повышенной сложности кода. Каковы конкретные различия и есть ли какие-либо существенные вещи, которые вы не можете сделать с API высокого уровня?
Я использую CUDA.net для взаимодействия с С#, и он построен как копия API-интерфейса драйвера. Это побуждает писать много довольно сложного кода на С#, в то время как эквивалент С++ будет более простым с использованием API среды выполнения. Есть ли что-то, что можно выиграть, делая это так? Единственное преимущество, которое я вижу, заключается в том, что проще интегрировать интеллектуальную обработку ошибок с остальной частью кода С#.