問題タブ [gfortran]

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.

0 投票する
1 に答える
186 参照

gfortran - gfortran を使用して方程式を解こうとしていますが、エラーが発生し続けます

以下のプログラムを使用していますが、エラーが発生し続けます。プログラムの何が問題になっていますか?

0 投票する
2 に答える
2117 参照

fortran77 - 配列の境界をチェックするFortran77デバッガー

私はまだF77のデバッグに積極的であり、配列の境界にいくつかの問題があります。最近、長いコードを変更して、新しい配列サイズにしました。ある配列を変更したり、別の配列を変更したりする方法に気付くまで、すべてが「大丈夫」と思われました。このコードのどこかで、割り当てが範囲外であり、他の配列に書き込んでいると思います。

Linux環境に範囲外の例外を「キャッチ」するデバッガー/ツールはありますか?

私は現在gfortranを使用しています

0 投票する
1 に答える
146 参照

c++ - メイン アプリケーションからライブラリのコンパイラ固有のランタイム初期化関数を解決する方法

ライブラリ言語がランタイム初期化を必要とする混合言語ライブラリを実行するときのベスト プラクティスは何ですか?

C++ から使用する特定のライブラリを Fortran で作成したいという問題があります。可能であれば、プラットフォームの独立性コンパイラーの独立性を維持したいと思います。さて、私が遊んだ 2 つのコンパイラ、G95 と GFortran はどちらも、メイン アプリケーションが特定のコンパイラ固有の初期化ルーチンを呼び出して、ライブラリを使用する前にランタイムを適切に設定する必要があります。これらの関数は、コンパイラによって名前とシグネチャが異なります (G95 の場合、関数は void g95_runtime_start(int argc, char *argv[]) です)。

私は CMake を使用してプロジェクトを管理しており、ライブラリ サブプロジェクトは静的ライブラリです。メインアプリケーションのcmakeファイルで、ライブラリサブプロジェクトに使用されているfortranコンパイラを掘り下げてから、CMakeにメインプロジェクトで定義を作成させて、どちらかのinitルーチンでメインアプリを条件付きでコンパイルできるようにする必要がありますか? とてもぎこちなく感じます。より良い方法はありますか?

0 投票する
5 に答える
6129 参照

compiler-construction - Fortran制御文字(キャリッジ制御)はまだコンパイラーに実装されていますか?

科学者とエンジニアのためのFortran95/ 2003の本では、フォーマットステートメントの最初の列が制御文字用に予約されていることを認識することの重要性について多くの話があります。インターネットでキャリッジ制御と呼ばれる制御文字も見ました。

混乱を避けるために、制御文字では、文字「1、空白(つまり、\ s)、0、および+」を、の最初の列(文字)に配置したときに出力の垂直方向の間隔に影響を与えるものとして参照します。 FORMATステートメント。

また、完全に固定幅の書体で書かれたこのテキストのみのWebページを参照してください:Fortranキャリッジ制御(等幅フォントの散文ほど正確さと古さを叫ぶものはないため)。私はこのページとそれが好きな他の人たちがはっきりしていないことに気づきました。

科学者およびエンジニア向けのFortran95/2003によると、最初の列がキャリッジ制御用に予約されていることを思い出せないと、意図しない恐ろしい出力が発生する可能性があります。デーブ・バリーを言い換えると、間違った文字を入力すると、ノルウェーで核ミサイルが発射されます。

しかし、この厳しい警告に固執しようとすると、gfortranは私が何について話しているのかわからないことがわかります。

いくつかのサンプルコードで私のポイントを説明させてください。円周率を印刷しようとしています。

これは出力です:

「1」と「0」はタイプミスではありません。gfortranは制御文字列を完全に無視しているようです。

それで、私の質問はこれです:

制御文字はまだ標準に準拠したコンパイラーに実装されていますか、それともgfortranは単に標準に準拠していませんか?

明確にするために、ここに私の出力がありますgfortran -v

Using built-in specs. Target: powerpc-apple-darwin9 Configured with: ../gcc-4.4.0/configure --prefix=/sw --prefix=/sw/lib/gcc4.4 --mandir=/sw/share/man --infodir=/sw/share/info --enable-languages=c,c++,fortran,objc,java --with-gmp=/sw --with-libiconv-prefix=/sw --with-ppl=/sw --with-cloog=/sw --with-system-zlib --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib --disable-libjava-multilib --build=powerpc-apple-darwin9 --host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9 Thread model: posix gcc version 4.4.0 (GCC)

0 投票する
1 に答える
977 参照

visual-c++ - リンク時に GFortran/MSVC オブジェクトを混在させる: _chkstk への未定義の参照

Xfoil と plotlib をコンパイルしようとしています

fortran ファイルは MinGW gfortran 4.5.0 でコンパイルされており、W32win.c は MSVC (2008/15.00) でコンパイルされています。

GCC とのリンク中に次のエラーが表示されます。

解決方法に関する提案はありますか?

MSVC を使用しようとしている理由は、gcc のみで plotlib をコンパイルしたときに、プロット ウィンドウが正しく動作せず、黒い画面しか表示されないためです。

0 投票する
5 に答える
6544 参照

fortran - F77:通常はAbsoftコンパイラでコンパイルされたプログラムをg77でコンパイルする際の問題

私はFortranプログラマーではありませんが(ほんの短い経験です)、部分的にで書かれたプログラムをコンパイルする必要がありますF77。誰かがAbsoft私の前にコンパイラでコンパイルしましたが、今度は。を使用して別のマシンで手順を繰り返す必要がありますg77。Absoftの場合、makefileには

これらの行を次のように変更しました

しかし、次のエラーメッセージが表示されます

どうすればこれを修正できますか?


UPDATE1

-libifcore最後の行(リンカー)の最後に追加すると、次のようになります。

私は図書館を見つけました

しかし、ソースディレクトリで次のことを行っても

見つかりません。

さらに、別の問題が発生するのと同じマシンです-libmをMPICCに渡す方法は?libimf.so:警告:feupdateenvは実装されておらず、常に失敗します

コンパイラは必要に応じてライブラリを見つける必要があるようです

0 投票する
4 に答える
3609 参照

types - gfortran で明示的な変数宣言を強制する

mex を使用して matlab からいくつかの fortran コード (f90) をリンクしていますが、時々 matlab がフリーズします。

以前は、データ型の不一致 (integer*4 と integer*8 など) が原因でフリーズが発生していました。

リンクしているコードには多くの暗黙的に定義された変数が含まれているため、たまにしか発生しない非表示のデータ型の競合があるかどうか疑問に思っています。

フリーズの原因としてデータ型の不一致を排除するために、コンパイラですべての変数を明示的に宣言する必要があるようにしたいと考えています。

質問:

  1. コンパイル時にすべての変数を明示的に宣言するよう gfortran に要求するにはどうすればよいですか? それができない場合、少なくとも警告を受け取る方法はありますか?

  2. すべてのアーキテクチャで特定の種類として gfortran によって解釈される「実際の」データ型はありますか? もしそうなら、それはどれですか (real*4, real*8, ...)?

  3. gfortran に「実際の」データ型を特定の種類、たとえば「real*4」として解釈させる方法はありますか?

  4. matlab でコンパイルされた mex ルーチンから呼び出されたときに fortran コードがフリーズする理由 (データ型の不一致以外) に関するアイデアはありますか?

助けてくれてありがとう。

これを理解するまで、暗黙的に定義されたすべての変数をリストしようとする多くのコード行を調べます。言うまでもなく、このような退屈な仕事から解放してくれる人には、とても感謝しています...

一番、

G.

0 投票する
2 に答える
38899 参照

debugging - 問題のあるコードをキャッチするために、GFORTRAN デバッガー/コンパイラーにどのフラグを設定しますか?

これに答えるには経験が必要なので、どの教科書にも載っていないと思います。私は現在、コードをテスト/検証し、バグを探して製品状態にする段階にあり、エラーが発生すると、多くの人がダークサイドなどに苦しむことになります.

  • デバッグ目的で Fortran 用にプログラムをコンパイルするとき、どのような種類のフラグを設定しますか?

  • 本番システムにはどのようなフラグを設定していますか?

  • デプロイする前に何をしますか?

製品版はifortコンパイラとして使用しますが、私は でテストを行いgfortranます。私はそれを間違っていますか?

0 投票する
2 に答える
1078 参照

version - Gfortranバージョン4.1.2および4.2.3

みなさん、こんにちは。ubuntuで実行されているクラスターから、同じハードウェアを備えたクラスターにコードをデプロイしていますが、Red Hatを使用しており、古いgfortranコンパイラーのようです。ソースは実際にはifortによってコンパイルされていますが、red hadクラスターにインストールされていないため、gfortranに切り替える必要がある場合があります。

ここで問題となるのは、コードがコンパイルされないことです。コードの私の部分で修正できるタイプの中に「割り当て可能」なものがありますが、コードを古い標準に適応させる準備ができていない他の人々による他の貢献もあります。

私の質問 :

  1. それでも、できればあまり変更せずに、他のシステムにデプロイするにはどうすればよいですか?
  2. 同じバージョンからのコンパイルを使用しているときに、他にどのような驚きがありますか?
  3. このようなことが二度と起こらないようにするにはどうすればよいですか?コードは、暴力に訴えることなく、さまざまなシステムに展開できる必要があります。

あなたのアドバイスと歓声をありがとう

0 投票する
4 に答える
7187 参照

macos - 6 コア Intel Xeon でハイパースレッディングをオフにする

モンテカルロ計算を行うために、12 コアの MacPro を入手しました。同社の Intel Xeon プロセッサではハイパースレッディング (HT) が有効になっているため、実際には 24 のプロセスを並行して実行して完全に活用する必要があります。ただし、計算は 24x50% よりも 12x100% で実行する方が効率Processor的であるため、より高いパフォーマンスを得るために、システム設定のペインでハイパー スレッディングをオフにしようとしました。HT をオフにすることもできます。

次に、いくつかのテストを実行した結果、次の結果が得られました。

  1. 残念なことに、12 個の並列タスクが HT の有無にかかわらず同時に実行されます。
  2. HT がオフの場合、24 の並列タスクは 20% を失います (私たちが考えていた -50% ではありません)。
  3. HT がオンの場合、24 タスクから 12 タスクに切り替えると、効率が 20% 低下します (これも驚くべきことです)。
  4. HT がオフの場合、24 から 12 に切り替えても何も変わりません。

ハイパースレッディングは計算のパフォーマンスを低下させるだけのようで、回避する方法はありません。計算に使用するプログラムは、Fortran で記述され、.NET でコンパイルされていgfortranます。このハードウェアでより効率的にする方法はありますか?


アップデート:当社のモンテカルロ計算 (MCC) は通常、データの損失を回避するため、およびその他の理由により段階的に実行されます (このような段階を常に回避できるとは限りません)。私たちの場合、各ステップは可変期間の多くのシミュレーションで構成されています。各ステップは多数の並列タスクに分割されるため、期間も可変です。基本的に、すべての高速タスクは、最も低速なタスクが完了するまで待機する必要があります。この事実により、より大きなステップを作成する必要があり、平均化による時間のずれが少なくなり、プロセッサは待機に時間を浪費しなくなります。これが、24*1.33 GHz の代わりに 12*2.66 GHz を使用する動機です。HT をオフにできる場合、HT を使用する 24 タスクから HT を使用しない 12 タスクに切り替えることで、約 +10% のパフォーマンスが得られます。ただし、テストでは、20% を失うことが示されています。

テストでは非常に大きなステップを使用しましたが、通常はステップが短いため、効率がさらに向上します。

もう 1 つの理由があります。一部の計算では 3 ~ 5 GB のメモリが必要になるため、12 個の高速タスクを使用することがいかに経済的であるかがわかります。共有メモリの実装に取り​​組んでいますが、長期プロジェクトになる予定です。したがって、既存のハードウェア/ソフトウェアをできるだけ高速にする方法を見つける必要があります。