但是不知道GPU调度发射函数的开销是多少,这个最好NV的人能给个意见。
据某来源的民间说法,发射kernel的开销挺小的,可以放心用。
比较郁闷的是同样的算法同样的数据,我写的C在VISUAL STUDIO 2010里面跑,没有SAS软件跑的快,在样本大小是10050的时候,VS :23秒,SAS:8秒(重复6次的平均时间);当样本大小是600121的时候,VS:85分,SAS:42分。老师一直说SAS这样的语言肯定不如C语言运行的快,但是实际上不是这样的,我想SAS软件本身应该有优化吧?!
我估计是您的矩阵操作没有优化,直接是循环展开算了,而SAS可能使用了某些高性能的数学库,如MKL。
类似的情况,matlab里面也可能出现。一般认为matlab效率不高,但是矩阵人家算的很快。
你的代码优化不好吧。
还有可能会不会SAS开了多线程优化未必可知啊。
确实如此,今天在同一台电脑上比较过求逆时间消耗,矩阵大小是3000*3000维,生成0-1之间的随机数,SAS求逆用了28秒,调用CLAPACK库函数用了116秒,调用CULA用了1.14秒,说明在矩阵操作上SAS还是很有优势的~不过GPU显然是最快的!
纯矩阵和向量运算按照师兄的说法,SAS一般会稍逊于MATLAB,但是SAS在proc iml过程下,自己编写一些或调用有关统计学的函数,SAS速度一般会优于MATLAB,不过,现在MATLAB也支持GPU运算,但是SAS和R不支持呀!
有个问题,比如该程序,若干流,每个流会有成百上千的内核需要发射。
不知道GPU是否允许这么多的内核在排队?还是程序上需要检测,等待一定间隔的前面的内核执行完毕再发射下一个?
不好意思,该问题可能跟这个例子不匹配。
直接启动kernel往队列里面灌即可,如何维护是驱动和runtime api等的事情,无需程序员操心。
并且启动个几千次kernel稀松平常,无不良反应。
OK,多谢!
不客气,欢迎莅临cudazone 积极参与讨论,祝您编码愉快~