2017-01-19 5 views
0

私は関数を使用して、三重対角方程式系を解きます。出力は正しいが、関数はマルチ・ストリーミングを正しく使用していない。 nvvpプロファイラは、このソルバへの呼び出しがすべて異なるストリームにあるものの、オーバーラップしないことを示しています。 私は暗黙的な同期を考え、ライブラリ関数はnvvpを介してcudaFreeの呼び出しをたくさん持っていることが判明しました。 この暗黙の同期を回避する方法はありますか? cusparseの使用のcuSparse tridiagonalソルバーからcudaFreeを大量に使用

擬似コード:

create array of streams[]; 
create cusparse handle; 
for (int i=0;i<Nsystem;i++){ 
cusparseSetStream(handle,stream[i]); 
cusparseDgtsv_nopivot(handle, var for linear system i); 
} 
destroy cusaprse handle; 

PS:同様のcudafreeの問題が提起されたと行列を扱う解決:here

答えて

1

本当に短い答えはいいえです。現時点では、ランタイムAPI内でcudaFreeの同期動作を変更する方法はありません。

仮に問題の原因がmallocの内部使用であり、cuSolverで無料である場合、唯一のことは、あなたのユーザケースをNVIDIAに報告し、回避策を提案するか、呼び出し元がスクラッチ・スペースを明示的に管理するルーチンの「エキスパート」バージョンを提供することができます。

+0

ありがとうございました。あなたは "仮説を立てるように"言う。 cudaFreeなどの同期関数は、マルチストリーミングの並行性を破るのに十分ではありませんか? –

関連する問題