AVX を使用する一部のプログラムが誤動作する原因となるバグが Linux カーネルで確認されました。

リリース 5.2 以降の Linux カーネルでは、 明らかになっている 例外がスローされたときに処理されるシグナル ハンドラーから戻るときに、AVX レジスタの内容に違反するエラー (ページ フォールト)。 この問題は、カーネルが GCC 9 でビルドされている場合に、AVX レジスタを使用した計算を含むマルチスレッド プログラム (「-pthread」) を実行するときに発生します (GCC の以前のリリースでビルドされている場合は、GCC 9 のキャッシュがあるため、エラーは表示されません)。レジスタ内のスレッドローカル変数のアドレス、および以前のバージョンの GCC は毎回それをロードします)。

この問題により、プログラムがメモリ破損エラーで途中で終了します。 最も顕著で頻繁に観察されるエラーの兆候 スチール クラッシュする アプリケーション、Go言語で書かれています。 この問題により、Go プログラムは通常、「実行時エラー: 無効なメモリ アドレスまたは nil ポインター逆参照」、「実行時: 予期しない戻り PC」、「セグメンテーション違反」というエラーが発生して途中で終了します。 カーネルのバグは未修正のままです。 可能性は検討中です Go 言語ランタイムに変更を加えて、追加のオーバーヘッドを犠牲にして、問題のある Linux カーネルのエラーを選択的に回避します。

出所: オープンネット.ru

コメントを追加します