cuda是基于标准c语言的,你先把c语言的基础学好,然后动手自己写一些c语言的程序,等对c语言有一定的功底之后,再看cuda,cuda与c语言的不同之处我觉得在于那个内核函数,以及如何划分线程块和栅格的纬度和大小,以及如何实现对于线程的索引的搜索,让每一个线程处理对应的一个变量或者几个变量。
然后是cuda的一些基础的语法,这些你可以看一些简单的cuda的例子,例如矩阵相加的例子,通过这些程序的例子可以很好的理解这些语法。
起源于前段时间做的一个GPU实验,关于两个CUDA进程的进程间通信(用CUDA-IPC机制,一个进程在显存中写,另一个进程一边自旋锁一边读数据是否被更改)。实验过程中发现(环境为Ubuntu16/18),在 Pascal 架构的电脑上做的时候,实验是 成功 的。然而转到 Maxwell 架构的电脑上做,发现CUDA程序自旋锁会导致 桌面卡住 ,即使放弃桌面转到tty控制台中做 依然失败 ,因为B进程自旋锁的时候会导致 A进程卡主 ,根本写不进去。
一开始认为 原因 是在Pascal架构之前,没有MPS技术,多个cuda进程无法同时在GPU中执行。但事实上软件支持的MPS对硬件计算能力要求不高(>=35),cuda>=55就可以。且MPS一般默认关闭,在Pascal架构上实验时也并没有开启MPS。
后来发现原因是Pascal架构开始支持计算抢占。
相关技术及对应的架构:
CUDA Context
MPS
推荐阅读 MPS官方文档 以及 MPS相关博客 。
个人理解:相当于用一个context整合了多个context。
待深入了解:MPS的硬件隔离
自问自答:
Q:多个主机进程默认创建的Context是同一个吗?
A:是不同的Context。
Q:Pascal架构之前,桌面渲染和通用计算也是可以同时进行的呀?
A:事实上并没有真正同时进行,只是交替进行,宏观看上去会有并发的效果。如果cuda程序占用GPU时间过长,会被桌面图形程序停掉。
Q:图像渲染都需要用GPU吗?
A:不一定,某些软件计算量大且专门针对GPU做了优化的话才会用到GPU。
Q:GPU 通用计算会影响渲染任务吗
A:如果两个计算量都比较大的话肯定会相互影响
首先,你要确定你的显卡驱动是否支持cuda;
然后去官网上下载最新的驱动并安装;
之后去下载cuda driver并安装;
下载cuda toolkit并安装;
下载cuda SDK并安装。
lz要保证cuda toolkit和cuda SDK的版本是一样的。
以上就是关于cuda编程,把CPU转到CUDA的编程,这算法有点不正确!求解全部的内容,包括:cuda编程,把CPU转到CUDA的编程,这算法有点不正确!求解、理解多CUDA Context(多进程同时使用GPU)的情况、运行cuda编好的可执行程序需要进行那些软件配置例如需要安装driver 吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)