2013-07-10 78 views
1

我在pycuda中有一個可用的conjungate漸變方法實現,我想優化它。它使用一個自寫,直到在一個gpuarray.dot()通話收斂支出矩陣向量乘法和pycuda本地gpuarray.dotgpuarray.mul_add功能pycuda.gpuarray.dot()在第一次調用時非常緩慢

kernprof.py/line_profiler剖析程序返回的最長時間(> 60%)。 (約0.2秒) 以下所有電話gpuarray.dot()需要約7微秒。所有呼叫都具有相同類型的輸入向量(大小:400雙)

是否有任何理由?我的意思是最後它只是一個常數,但它使分析困難。 我想在pycuda郵件列表中提問。不過,我無法訂閱@ gmail.com地址。如果任何人有一個奇怪的.dot()行爲的解釋或我無法訂閱該郵件列表,請給我一個提示;)

+1

空閒的GPU經常有一個與其關聯的「啓動延遲」。這可能是由於從睡眠模式喚醒GPU,或者只是與創建GPU CUDA上下文相關的開銷。有多種方法可以緩解這種情況。如果「第一次調用」實際上是代碼中創建GPU上下文的第一件事,那麼這可能是一個可能的解釋。您可能會嘗試在您關心的第一個操作之前創建虛擬GPU操作,然後在任何循環之前進行。 –

+0

FWIW,訂閱該列表確實可以從GMail中工作 - 我想。檢查您的垃圾郵件文件夾中的訂閱確認電子郵件。 –

+0

感謝您的輸入,是的,它在垃圾郵件文件夾中。不應該使用我不能處理接口的郵件提供者。感謝您的不便,併爲此感到抱歉 – user2267896

回答

2

一個原因是Pycuda編譯內核之前上傳它。據我記得,只有在它第一次執行它時纔會發生。

一個解決方案可能是通過執行一次「預熱」內核,然後開始分析過程。