修正されたバグ¶
これらのドキュメント修正は、2016リリースで修正された問題に対処するものですが、他のブランチにはまだ適用されていません。
Verlet バッファの計算における nstlist=1 の問題を修正¶
まれな状況下では、Verletバッファの計算コードがnstlist=1で呼び出されることがあり、これによりゼロ除算が発生していました。ゼロ除算は現在修正されています。さらに、gromppはnstlist=1の場合にVerletバッファのサイズを自動的に検出し、表示するようになり、これによりユーザーに情報を提供し、一貫性チェックを追加します。
32 ビットプラットフォームでの大規模ファイルの問題を修正¶
ある時点で、gccはチェックコードに対してエラーを示す代わりに警告を発するようになりました。この問題を修正し、実際にエラーを生成するようにしました。
致命的なエラーに対して、abort()の使用を避ける¶
これにより、無益なコアダンプが発生する状況を回避できます。
ゼロ除算の可能性を偏波コードで修正¶
Verlet スケームにおける重なり合う原子による数値オーバーフローを回避¶
Verletスキームのカーネルは、相互作用していない原子同士の重なりを許可しませんでした(グループカーネルとは異なります)。この問題を修正するために、相互作用距離を制限し、単一の原子間では約6e-4、および双方向の原子間では約1e-18未満にならないようにしました。この値を0のパラメータで乗算しても、力に影響を与えなくなります。この制限は、通常の相互作用には影響を与えないように設計されています。以前は、この程度の距離の場合、mdrunがクラッシュしていました。Haswellプロセッサでは、RFカーネルとPMEカーネルの実行速度がそれぞれ3%と1%向上します。CUDAでは、RFカーネルとPMEカーネルの実行速度がそれぞれ1%と2%向上します。
PBCのプルに関するチェックを緩和¶
COM間の距離が箱の半分に近い場合に、プル方向のプルに対して、プルコード内のチェックが厳しすぎた。現在、プルベクトルに直交する寸法はチェックされなくなりました。(実際には、トリキリンの単位セルにおけるxまたはy方向のプルに対して、チェックが厳しすぎたものでしたが、これは特殊なケースです。)さらに、方向周期性のヒントは、現在、ジオメトリ方向のみで表示されます。
ARMv7 サイクルカウンターのサポートを検出する機能を追加¶
ARMv7では、サイクルカウンターの読み取りを可能にするために、特別なカーネル設定が必要です。この変更により、カウンターを有効/無効にするためのcmake設定が追加されます。すべてのアーキテクチャ(ARMv7を除く)では、デフォルトで有効になっています。ARMv7では、カウンターが正常に実行できるかどうかを確認するために、簡単なテストプログラムを実行します。クロスコンパイル時にARMv7にコンパイルする場合、カウンターは無効になりますが、cmakeでGMX_CYCLECOUNTERSに値を設定することで、この設定を上書きできます。
「gmx dos」でフレーム数が少なすぎる場合に、致命的なエラーが発生するようになりました。¶
「gmx dos」が、フレーム数が少なすぎると、意味不明なエラーメッセージでクラッシュするのを防ぐため、この状況をテストしてください。
関連する:`1813`番のバグ
正しくCUDAアプリケーションのクロックをリセットする¶
現在、mdrun を開始したときに読み取ったアプリケーションのクロック値を保存し、これらの値にリセットしますが、その際、他のプロセスによってクロックが変更されていない場合にのみ行われます。
再現交換のデバッグ出力がすべてのログファイルに送信されるように修正¶
「mdrun -debug」をレプリカ交換で選択した場合、一部の注文の説明がmdrunのログファイルに出力されることがありますが、実際には実際の数値が出力されているようです。これにより、両方の情報がデバッグログに出力されます。
gmx mdrun -membed が常に単一のランクで実行されるように修正¶
これまでは、デフォルトのスレッド-MPI mdrun が複数のランクを選択した場合に致命的なエラーが発生していましたが、現在は正しく1つのランクを選択します。
シミュレーションステップの数のためにintを使用する際の問題を修正¶
主に64ビットの整数を使用していますが、いくつかの問題が発生しました。
mdrun -rerun の実行中に、EDR の書き込み処理で、負のステップ番号に関する警告が表示され、問題を回避しようとしていることを示唆し、クラッシュする可能性があると脅迫されました。書き込み処理での警告を抑制し、読み込み処理でのメッセージの範囲を縮小しました。
TNG ラッパーのルーチンが、正しく64ビット整数を渡せるように修正されました。
さまざまなインフラストラクチャで gmx_int64_t を使用して一貫性を保ち、いくつかの場所で、このような型で格納される値の実用的な範囲が小さい可能性があることを明記しました。 XTC または TRR の定義を拡張することはできませんので、適切な解決策はありません。ただし、TNG はすでに良好な状態です。
`trr`マジックナンバーの読み取りに関する問題を修正¶
trr ヘッダーの読み取りルーチンが、マジックナンバーが正しくなくても「OK」という値を返していたため、予期せぬ結果が生じる可能性がありました。これにより、他のコード(例:cpptraj)が不正なエンディアンの trr ファイルを誤って作成し、それを GROMACS で使用した場合に問題が発生する可能性がありました。(これは、XDR ファイル(ビッグエンディアンで定義されている)に対しては発生してはならないはずですが、そのようなコードが存在していました。)
OpenCLキャッシュファイル名にのみ、合法的な文字のみを使用するように変更¶
JITコンパイルされたOpenCLの短距離範囲のカーネルをキャッシュするオプションを強化する必要があり、これにより、`mdrun`が通常デバイス固有のファイル名でファイルを作成するのではなく、現在のロケールで有効なすべてのファイル名(つまり、英数字のみ)のみを含むファイルを作成するようにしました。
開発中に発生したバグの修正¶
これらのドキュメント修正は、release-5-1から分岐したrelease-2016ブランチに導入されたと思われる問題に対処するためのものです。これらの修正は、最終版のリリースノートには含まれません。なぜなら、これらの問題が正式なリリースに含まれているとは考えられていないからです。ただし、追跡されている`issues <https://gitlab.com/gromacs/gromacs/-/issues/>`は、さらなる議論が必要な場合に利用できます。
v-rescale サーモスタットとレプリカ交換におけるバグを修正¶
コミット 2d0247f6 で、MD ステップごとに変動しない v-rescale サーモスタット用のランダム数生成を実装し、また、replica-exchange のランダム数生成器が誤った場所でリセットされていました。
MPI+OpenMP での vsite に関するバグを修正¶
最近のコミット b7e4f30d により、OpenMP を使用する場合、非局所仮想サイトが適切に扱われなくなりました。これにより、座標が 1 ステップ遅れ、力の伝播が原子に伝わらなくなり、力の計算に小さな誤差が生じる可能性があります。注意点として、非局所仮想サイトは、局所仮想サイトがそれらを構成原子として使用する場合にのみ使用されます。最も一般的なケースは、CH3/NH3 グループ内の C/N と vsite H の組み合わせです。また、デバッグビルドでは、vsite の数をチェックする機能を追加しました。
いくつかのスレッドの優先度設定の問題を修正しました。¶
新しいリファクタリングされたスレッドアフィニティコードに存在する1つのデッドロックを修正しました。これは、ノードの一部のみが使用されている場合に、自動的なピンニングによって発生しました。
理論上、まだ1つのデッドロックが残っています。それは、スレッド-MPIが特定のランクでのアフィニティの設定が不可能であることを報告した場合、コードがデッドロックする可能性があることです。この問題は常に存在しており、実際には発生しない可能性もありますので、ここでは修正されていません。
OpenMPによるオーバーヘッドを、高い並列化時に削減¶
コミット 6d98622d で、for ループの OpenMP パラレル化が導入され、rvecs の増加を処理するようになりました。ただし、MPI ランクあたりの原子数が少ない場合、この変更によりループのコストが最大で 10 倍に増加する可能性があります。この変更では、原子数が少ない場合に OpenMP パラレル化が無効になります。
std::thread::hardware_concurrency() の削除¶
論理的なプロセッサの数を決定するために、std::thread::hardware_concurrency() を使用すべきではありません。なぜなら、これは単なるヒントを提供するだけだからです。ただし、この数を取得するための3つの異なるソースはまだ残っています。
外部のTinyXML-2へのリンクをサポートするように追加¶
これにより、|Gromacs|の便利なパッケージングが可能になりますが、リベース中にgerritから失われてしまいました。
hwinfoでスレッドとMPIを使用する際のデータ競合を修正¶
Power7 のビッグエンディアンに関する修正¶
現在、gcc 4.9.3、5.4.0、および 6.1.0 を使用して、ビッグエンディアンの VSX で、ダブルおよびシングル精度の両方でコンパイルされ、すべてのテストをパスします。
incrStoreU と decrStoreU のコードの変更は、6.1.0 のバージョンで発生したと思われる問題に対処し、コンパイラが vec_extract から返される値を float 型のポインタと誤って認識しているという問題を修正します。ただし、私の試みた簡略化されたテストケースでは、この問題は再現されていません。
将来、より多くのエンディアンの問題を引き起こす可能性のあるいくつかのテストケースを追加しました。
現在、この機能をリトルエンディアンのPower8上でテストすることができません。gcc固有の順序がエンディアンに依存する可能性があるため、注意が必要です。ハードウェアへのアクセスがある場合、または誰かがテストを実行してくれている場合に、テストを実施します。
ハードウェアの検出とCPUIDテストの要件を削減する¶
一部の非 x86 Linux 向けプラットフォームでは、hwloc がキャッシュ情報を報告しないため、これにより、完全なトポロジーサポートの厳格なテスト要件を満たさなくなる。 この問題自体は存在しないため、テストを hwloc からの基本的なサポートのみを要求するように変更します。 これは、当社が自力で得られるものよりも優れています。 同様に、CPUID に関して、特定のフラグを定義した場合、アーキテクチャがそれらを提供しないことはエラーではありません。 そのため、そのような状態を報告しないようにしてください。
32ビットマシンでのランダムテストにおけるコンパイルの問題に対する回避策¶
gcc 4.8.4 が 32 ビット Linux で実行され、ランダム分布に関するいくつかのテストに失敗します。これは、コンパイラが結果を浮動小数点値として使用せず、代わりに正確な二進数比較を行う場合に、コンパイラが奇妙な動作をするために発生しているようです。これは有効な C++ であり、コンパイラの誤った動作 (私見では) ですが、高い最適化レベルではビット単位で同一の結果を生成する必要はありません。ただし、ゼロ ULP (ユニティ・レジストレーション・ポイント) の許容範囲を持つ浮動小数点テストを使用すると、問題が解決するようです。
「gmx wham」を新しいプル設定に対応するように更新¶
これにより、「gmx wham」は、新しいプル設定に対応し、プルの種類とジオメトリを座標ごとに設定できるようになり、プル座標が変更され、設定がより柔軟になりました。
29943fの部分的なロールバックによるmembedの修正¶
膜埋め込みアルゴリズムは、init_forcerec()を呼び出す前に初期化する必要があります。そのため、これをdo_md()に移動することはできません。ただし、release-2017でグループスキームを削除するため、この問題を修正する必要があります。この修正により、release-2016でもメソッドが動作するようになります。