我在pycuda中有一个工作的conjungate梯度方法实现,我想优化。它使用自写矩阵向量乘法和pycuda原生gpuarray.dot
和gpuarray.mul_add
函数
使用kernprof.py/line_profiler
对程序进行概要分析返回大部分时间(> 60%),直到在一次gpuarray.dot()
来电中收敛。 (约.2秒)
以下gpuarray.dot()
的所有呼叫大约需要7微秒。所有调用都具有相同类型的输入向量(大小:400双精度)
有什么理由吗?我的意思是最后它只是一个常数,但它使分析变得困难。
我想在pycuda邮件列表上提问。但是我无法订阅@ gmail.com地址。如果有人对奇怪的.dot()
行为有解释或者我无法订阅该邮件列表,请给我一个提示;)
答案 0 :(得分:2)
一个原因是Pycuda在上传之前正在编译内核。据我所知,只有在第一次执行它时才会发生。
一种解决方案可能是通过执行一次“预热”内核然后启动分析过程。