当前位置 - 股票行情交易網 - 文娛動態 - cudnn和cuda的關系

cudnn和cuda的關系

CUDA是C語言在GPU編程上的的拓展包,CUDNN是封裝了卷積等算子的庫,不是壹個層面的東西。

這二者的關系,CUDA可以用來實現cudnn定義的各種接口,早期CUDNN應該內部是用CUDA實現的,但隨著英偉達軟件生態的發展,CUDNN團隊壹定會選擇用更底層,更靠近硬件,更難用的工具來構建Kernel,比如PTX,比如直接寫匯編(SASS)。不信的話可以自己試著用CUDA實現CUDNN的接口,看看性能能差多少。當然能把CUDA寫好的人想必都了解CUDA的局限。

二者在生態裏面的位置。最開始CUDA可以說是英偉達用來打天下的東西,很大程度靠這玩意兒確立了自己在高性能計算尤其是神經網絡高性能計算的地位。因為CUDA在暴露硬件特性和保持軟件通用性的矛盾中找到了壹個精巧的,大多數人都可以接受的平衡。但隨著這幾年技術的發展,情況又發生了些變化,CUDA還是肩負著軟件生態通用性的重任,而高性能的任務,更多地需要由CUDNN,CUBLAS這些高性能軟件庫來承擔。在英偉達的構想中,成熟的算子,比如卷積,比如全聯接,用戶可以使用庫直接獲得最優性能,而對於新的算子或者是每個用戶獨有的算子,用戶還是可以用CUDA自己來相對簡單地實現壹個性能可以接受的版本。最後通過TensorRT,TensorFlow這樣的框架把這二者銜接起來。