Когато пишете CUDA приложения, можете да работите на ниво драйвер или на ниво време за изпълнение, както е илюстрирано на това изображение (Библиотеките са CUFFT и CUBLAS за напреднали математика):
(източник: tomshw.it)
Предполагам, че компромисът между двете е повишена производителност за API от ниско ниво, но с цената на повишена сложност на кода. Какви са конкретните разлики и има ли съществени неща, които не можете да направите с API от високо ниво?
Използвам CUDA.net за взаимодействие с C# и той е изграден като копие на API на драйвера. Това насърчава писането на много доста сложен код на C#, докато еквивалентът на C++ би бил по-прост, като се използва API за изпълнение. Има ли нещо, което да спечелите, като го правите по този начин? Единственото предимство, което виждам, е, че е по-лесно да се интегрира интелигентна обработка на грешки с останалата част от C# кода.