問題タブ [metis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Cコードと.CクラッシュRのインターフェイス
サブグラフのオード数が特定のしきい値を下回るまで、特定のグラフの最小カットパーティションを繰り返し取得する必要がありますmin_node
。これは、CHAMELEONクラスタリングアルゴリズムの前処理ステップとして使用されます。そのために、私はRでMETISライブラリを使用しています。インターフェイスMETIS_PartGraphRecursive ()
を使用してRコードから呼び出すために使用しているMETISライブラリの関数の単純なラッパーを作成しました。.C
ラッパー関数の呼び出しは問題なく実行され、パーティションを実行して、2つのパーティション間のエッジを削除することにより、サブグラフを処理および取得する結果を返します。次に、サブグラフの1つを渡して、さらにパーティションを作成します。この呼び出しはRをクラッシュさせます。クラッシュトレースはクラッシュレポートに表示されます以下のセクション。(更新)Valgrindの出力も以下に示されています(Martin Morganがコメントしたように)。
クラッシュの原因は、METISライブラリ内のコードにあるようです。
使用しているMETISラッパーと、このラッパーの呼び出し方法を投稿しています。
クラッシュ後、fedoraは「R-core-2.15.0-1.fc16パッケージの問題が検出されました」という通知を表示します。RはSIGABRTまたはSIGSEGVを使用してOSによって強制終了され、バグ報告ツールのメッセージは次のように通知します。
私のシステム:
誰かが私がこの問題を解決するのを手伝ってもらえますか?
テストデータセット
サンプル実行
上記のポイントから生成されたメティス形式のグラフは、この特定の例では正常に機能しています。しかし、パーティション化されたコンポーネントの1つを取得し、それをさらに再パーティション化すると、プログラムがクラッシュします。また、600ポイントの大きなデータセットでは、最初のパーティションがクラッシュします。
METISラッパー
R内の.Cコード
クラッシュレポート
Valgrindダンプ
c - Fortran から実行すると METIS セグメント エラーが発生する
有限要素計算用に作成した Fortran プログラムの一部として、メッシュ分割にMETISライブラリを使用しようとしています。METIS は C で書かれていますが、Fortran 90 で問題なく動作するはずです。
潜在的な問題の 1 つは、null ポインターを与えるいくつかの引数があることです。Fortran から C 関数を呼び出してヌル ポインター オブジェクトを認識するのに苦労した人もいます。それはここで対処されており、それが私が抱えている問題ではないと思います。
問題は、METIS が配列の開始インデックスを変更することだと思います。C では 0、Fortran では 1 です。すべての関数に渡される配列があり、Fortran 規則が必要な場合に変更するoptions
フィールドがあるはずです。そうしないと、C プログラムがインデックス 0 にアクセスしようとし、セグ フォールトが発生します。METIS_OPTION_NUMBERING
1
ここでの edunlop1 による投稿は、配列を作成するだけoptions
で、METIS と合意した規則によって、その配列のどの要素を 1 に設定してすべての番号を付け直すかを決定することを示唆しています。ただし、配列の長さと同様に、使用しているルーチンによって異なります。
とにかく、ここに私のコードがあります:
番号付けを変更するための METIS の関連コードは、ファイル libmetis/meshpart.c にあります。
何かご意見は?役立つ場合は、Valgrind の出力を投稿できます。
fortran - fortranプログラムでMETIS API(C言語で書かれたもの)を呼び出す
2 週間以上、C で書かれたMETISライブラリの 1 つを自分の fortran コードから呼び出すのに苦労しました。残念ながら、あなたの助けがなければ HAPPY END にはなりません。直接呼び出しとインターフェイスの使用に関する投稿をいくつか見つけました。デバッグのために変数を監視できるので、私は後者を好みます。私が添付した3つのコードがあります。
1. 使いたいc関数
2. fortranインターフェースモジュール
3. fortranプログラム
(1)c関数
c 関数本体を削除しました。私の問題を理解する必要はない
ここで、idx_tは整数で、 real_tは単精度または倍精度です。neからoptionsまでが入力され、最後の 3 つの引数が出力されます。そしてvwgt、vsize、tpwgtsとoptionsはデフォルト設定の入力として null を受け取ることができます 私はこのような c 関数を使用するためのインターフェース モジュールを書きました
(2) Fortran インターフェースモジュール
修理済み!
- use 定数の下にuse iso_c_bindを挿入します。
- ne、nn、およびその他の変数には、 integerの代わりにinteger(c_int)を使用します。
- 未使用のモジュール定数を削除する
.
そして、これが関数を呼び出す私のプログラムコードです
(3) Fortran プログラム
修理済み!
- npartの割り当てサイズは固定です。ねじゃなくてん
- epart、npart の Fortran スタイルの配列を取得するために opts(7)=1 が追加されました (今のところ影響はありません)。
.
ただ、tpwgtにnullを入れても以下のようなエラーメッセージが出てしまうのが難点です。
入力エラー: 制約 0 の tpwgts の合計 0.000000 が正しくありません。
そして、このメッセージは以下のコードで処理されます。
とにかく、null の代わりに tpwgts の配列を配置した場合に何が得られるかを確認するために、tpwgts(:) = 1.0/npartsを実行すると、tpwgts の合計が 1.0 になります。しかし、合計が1.75という同じメッセージが表示されました。
これらは私の質問
です 1. 引数を正しく渡すために null() を使用しましたか?
2. すべての引数のポインターを c 関数に渡す必要がありますか? ではどうやって?
3. opts(0:39) に整数を入れるだけで十分ですか? たとえば、 「インターフェイス モジュール」のない投稿では、 options(3)=1 のような単純なコードが使用されます。しかし、C コードでは、options には options[METIS_OPTION_NUMBERING]、options[METIS_OPTION_UFACTOR] のように 16 個の名前付き変数があります。オプションを設定するには何か必要だと思いますが、わかりません。4. fortran での METIS の例はありますか?
どんな種類のヒント/アドバイスも私にとって大きな助けになります。ありがとうございました。
結論
私が抱えていた問題は、c 関数がfortran コードからヌル ポインターを認識できないことでした。
インターフェースモジュールで変数の宣言ミスがいくつかありました (「修正済み」とコメントを参照)
コードは正常に動作しているようです。しかし、fortran スタイルの出力のoption(7) = 1が機能しなかったので、今調べています。
c - 配列の受け渡しでアクセス違反エラー
前に尋ねた質問に対する答えを見つける前に、 Fortranで C 関数を呼び出すために、以下のように非常にシンプルなメッシュ (三角形が 2 つしかない) の非常に単純なコードを書きました。コードの簡素化のため。ここのインターフェースモジュールも iso_c_binding(可能な限り) もここでは使用されていません。この投稿と非常によく似ていますが、別のエラーがあります。
eindのため、アクセス違反エラーが発生します。eindの代わりにc_null_ptrが渡された場合、とにかく実行されます。配列eindのサイズと要素数が一致しています。どうすれば修正できますか?=>解決しました。ありがとうございました!
私が抱えていた問題は、METIS_PartMeshNodal を呼び出す際の systax エラーでした。2 番目の引数は、1 番目の引数 ne と同じ ne でした。nnだったはずです。
解決策は、2 番目の引数をnnに置き換えることでした。上記のコードはコンパイルして実行できます。
注:メッシュが小さすぎると、METIS のスキームにより適切な解が得られない場合があります。インターフェイス モジュールを使用するには、別の投稿
を
参照してください。
python - METIS の Python ラッパーのインストール: METIS_DLL 共有ライブラリが見つかりません
Python を使用していくつかのネットワークとグラフを描画するために Metis を使用する予定です。Metis はこちらからダウンロードしました。Python ラッパーをインストールするために、ここに記載されている手順に従いましたが、easy_install コマンドを次のように実行すると、次のようになります。
次のエラーが表示されます。
上記の 2 番目のリンクから、METIS_DLL 環境変数で「METIS 共有ライブラリ」ファイルへのフル パスを指定する必要があることがわかりました。しかし、ファイルの名前と場所、または環境変数でパスを指定する方法がわかりません。
Google で調べたところ、このファイルは「libmetis.so」という名前である可能性があることがわかりましたが、その名前のファイルはありません。誰かが私にこれについての手がかりを与えることができますか?
どんな助けでも感謝します、ありがとう。
graph - Neo4j グラフ データベースを使用したグラフ パーティション アルゴ
karypis Lab ( http://glaros.dtc.umn.edu/gkhome/metis/metis/overview )によって実装されている METIS のような有名なグラフ パーティション アルゴ ツールがあることは知っています。
しかし、Neo4jに保存されているグラフを分割する方法はありますか? または、Neo4j のデータをダンプし、METIS 入力形式に合わせてノードとエッジの形式を手動で変換する必要がありますか?
c - Fortran コードで Metis ライブラリを使用する...基本
これが多少冗長である場合は事前にお詫び申し上げます。Fortran コードでの Metis の使用を参照する他の投稿を確認しました。また、私は非常に初心者なので、小さな言葉を使ってゆっくり言ってください!:p
Metis 5.1.0 を使用して、私が作成した Fortran コードでメッシュを分割しようとしています。c ライブラリへの呼び出しを含む Fortran コードのコンパイルの基本について疑問に思っていますか? それ、どうやったら出来るの?それはコンパイル時に行われますか、それともコードにある種の include ステートメントが必要ですか? 現在、コンパイルしようとすると、次の関連スニペットがあります。
プログラムの先頭 ( include または use ステートメントが必要ですか?)
makefile (エラーがあると確信しています)
metis パーティショニングの呼び出しに関連するサブルーチン (直接呼び出しを使用)
コンパイルしようとすると、次のエラーが発生します
私のmakeファイルが間違っていることはわかりますが、コードとすべてが同じフォルダーに「住んでいる」のに、なぜmetisから必要なcライブラリを参照すると、cライブラリのエラーが発生するのか疑問に思っていますmetis ライブラリ meshpart.c。適切にインストールされたメティスには、ライブラリと必要なコンポーネントが適切にリンクまたは参照されていませんか?
誰でも提供できるヘルプをありがとう!! 繰り返しになりますが、ご辛抱いただきありがとうございます。これは非常に基本的な質問であることを理解しています。
c - Fortran と C を使用して Metis API を呼び出す
Fortran と C を使用して Metis を呼び出す次のコードを作成しましたが、それでもセグメンテーション エラーが発生します。コードのターゲットは、入力ファイルのパーティションを実行することですchanelElements
。
そしてメインプログラムは
を使用してコンパイルし、エラーが発生しました:
c - Fortran と C を使用して Metis を呼び出す
次のコードを実行しようとしましたが、エラーが発生しました。エラーは *CreateGraphNodal のメモリ割り当てに失敗しました: nptr.
コードを実行すると、次のエラーが表示されます。