使用numba_cuda进行GPU数据处理记录

近期因为一些项目需要,有大量的矩阵相关的计算需要完成,考虑到实验室新进了八块V8000GPU,如果一直放着吃灰就太暴殄天物了,因此特意花时间学习了一下使用numba下的cuda库进行数据计算的操作,特此记录其中的一些关键点,以备将来使用。

参考资料:

https://blog.csdn.net/The_Time_Runner/article/details/103367674

https://numba.pydata.org/numba-doc/latest/cuda/kernels.html

https://gist.github.com/t-vi/2f4fe23a5b473b9dceb95b163378b4d5

https://people.duke.edu/~ccc14/sta-663/CUDAPython.html

很多资料在介绍的时候都会引入一个数据矩阵,然后以此为例,介绍这个库是如何工作的,这样做固然形象,但对于自己这样的数学渣渣来说,经常和自己要处理的数据混在一起,搞半天越搞越糊涂。经过一段时间的摸索后,我对numba下的cuda库的最终看法是:

形象点说,numba下的cuda库提供了一个“子线程矩阵”,这个矩阵可以是一二三维的,矩阵里的每一个元素都是一个子线程,每个子线程都可以执行一些简单的数据处理工作。

假定我们有大量的数据要处理,在c/Fortran等语言下,这些数据通过若干个for/do循环来完成数据处理,那么我们要做的工作就是把每一次循环的内容改写成子线程执行的操作(kernel function)。“子线程矩阵’’则是提供了一个方便的形式让你来改写。

至于multi-stream的操作则比较容易理解了,流水线的操作方式可以让数据传输和处理同时进行,因此效率也比较高。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容