現在、CUDA 機能を使用する Java アプリケーションを作成しようとしています。CUDA と Java の間の接続は正常に機能しますが、別の問題が発生したので、それについての私の考えが正しいかどうかを尋ねたいと思いました。
Java からネイティブ関数を呼び出すと、関数にデータが渡され、関数が何かを計算して結果を返します。最初の関数がこの結果への参照 (ポインター) を返して、それを JNI に渡して、結果をさらに計算する別の関数を呼び出すことは可能ですか?
私の考えは、データを GPU メモリに残し、その参照を渡すだけで他の関数が使用できるようにすることで、GPU との間でデータをコピーすることによるオーバーヘッドを削減することでした。
しばらく試した後、アプリケーションの終了後 (この場合は C 関数の終了時) にポインターが削除されるため、これは不可能であると自分で考えました。これは正しいです?それとも、解決策を見るためにCで悪いのですか?
編集:まあ、質問を少し拡張する (またはより明確にする): JNI ネイティブ関数によって割り当てられたメモリは、関数が終了したときに解放されますか? または、JNI アプリケーションが終了するまで、または手動で解放するまで、引き続きアクセスできますか?
ご意見ありがとうございます:)