2

メインプログラムはJavaですが、ストレージからデータを抽出するコードはCで記述されています。抽出されたデータからHDF5ファイルを作成する必要があります。JNIを使​​用してCコードを呼び出してデータを取得し、JavaからHDF5ファイルをビルドするか、CコードからHDF5をビルドする方がよいでしょうか。

JNIまたはCの経験はほとんどありません。

また、私たちの主な基準の1つはパフォーマンスです。JNIを使​​用すると、パフォーマンスにどの程度の影響がありますか?

4

3 に答える 3

6

関数呼び出しの境界は「遅い」ため、ネイティブ ルーチンに対して多くの呼び出しを行うと、パフォーマンスが低下します。

JNI に移行することでメリットが得られる可能性のあるものの例(Java は多くの目的で十分に高速であるため、私はmayを強調します) は、大きなビットマップで何らかの画像処理を行うルーチンです。しかし、ピクセルごとに JNI ルーチンを呼び出すと、純粋な Java のループ内で呼び出すよりもはるかに遅くなります。

あるフォーマットから別のフォーマットへのデータの抽出は、率直に言って、Python のような「スクリプト」言語で行うのが最適であり、CPU に拘束されることはありません。むしろ、ディスクの速度は、どの言語インタープリターよりもずっと遅くなります。

于 2009-10-13T18:56:05.370 に答える
1

あなたは C の経験がほとんどないので、Java を使ってそれを行うのが最善の選択であると私には思えます.JNI は実際にはそれほど悪くはありません。

于 2009-10-13T18:42:21.980 に答える
0

私は C 以外の HDF インターフェースにまったく詳しくないので、実際に比較することはできません。

これは他のすべてのインターフェイスが使用する API であるため、最大のパフォーマンスを引き出す必要がある場合は、C API が最適です。

また、API のどの部分を使用できるかについての質問もあります。たとえば、私はもともと C++ インターフェイスから始めました。一部の API は、まだ C API でしか使用できませんでした。これは、C および C++ を使用している場合は問題になりませんが、必要な API が利用できない場合は問題になる可能性があります。

そうは言っても、C のオブジェクト モデルに関して頭をねじ込む必要があります。ポインタ、ハンドルなどの使用。

于 2009-10-20T10:07:23.790 に答える