假設我們通過調用cudaEventRecord來記錄兩個cuda事件A和B,那麼在我們做任何同步之前,有什麼辦法來判斷A是否會在B之前或之後發生?例如,如果我有這些代碼:有沒有辦法查詢兩個cuda事件的順序?
kernelA<<<1,1>>>(...);
cudaEventRecord(A, 0);
kernelB<<<1,1>>>(...);
cudaEventRecord(B, 0);
然後乙應該發生在肯定的A後,但我怎麼會知道這給了兩個手柄?在另一種方式,我怎麼會寫這樣的功能:
bool judge_order(cudaEvent_t A, cudaEvent_t B) {...}
,使得如果將B.
前,當我想一個內存管理器,以便發生的問題是它返回true有效地重用先前內核啓動中已經使用的內存。
我不認爲這是可能的只是通過檢查事件本身。事件結構是不透明的,您僅限於通過[event API](http://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__EVENT.html#group__CUDART__EVENT)表達的內容。然而你可以構建一個包裝宏或者一些包裝函數,它將每次調用時間標記爲'cudaEventRecord,並在表中存儲事件句柄,時間戳和流ID,並根據該表構建您自己的'judge_order'函數。 –
謝謝你的解決方案!我想知道cuda是否有這種支持。現在沒有了,我會按照你所描述的來實施我的! – shaoyl85