ECC 対応メモリは必要なのか?

並列計算機を自作する際に、まず最初に考えなくてはならないのがパーツ選びです。

どの CPU を選ぶかで自作並列計算機の方向性は大きく決まりますが、そこからは予算とも相談しながら マザーボード、メモリ、グラフィックボード、HDD or SSD、RAID を組むのか?空冷?水冷?ケースはどうするか?電源は?など様々なことを考えていきます。

各パーツの値段について調べていると、メーカーやスペックによってかなり値段が違うことに気づくと思います。そうした中で、ECC 対応かどうかでメモリの値段が変わることに気付くと思います。

一般に大規模科学技術計算を行う場合には ECC 対応メモリを使うことが推奨されていますが、ECC 対応メモリは非対応のものに比べ高価です。

そこで多くの人がこう思うはずです。

Gaussian を用いた計算の場合でも ECC 対応メモリは必要なのか?もし必要なければ、予算を大きく削減できるのではないか?、、、と

そこで今回の記事では、ECC 機能付きのメモリについて管理人が調べてみた結果をまとめておきます。

ECC 対応メモリとは?

ECC メモリは、Error-correcting code memory または Error Check and Correct memory の略です。メモリが保持している情報に誤りがあった時に検出・訂正する機能です。

メモリにエラーが起きる原因は主に 2 つあり、宇宙線などの放射線によって値が変わってしまうソフトエラーとメモリチップ自体に問題があって値がおかしくなるハードエラーです。
標高の高い土地や臨界事故の起きた時や太陽の活動周期依存的に ECC エラーが大きくなったという報告はソフトエラーに関連したものだそうです。また、ECC が対応しているのもソフトエラーになります。

“メモリにエラーが起きる”と聞くと、どのくらいの頻度でメモリエラーが起きるか気になると思います。参考文献 1 の Google のレポートによると、

Googleのサーバの3台に1台ほどで、1年当たり1回の訂正可能なメモリエラーが発生し、100台に1台で1回の訂正不可能なエラーが発生する。訂正不可能なエラーは通常、クラッシュを引き起こす。

メモリモジュールでは1つ当たり1年間で平均4000回近い訂正可能なエラーが発生すること、そしてGoogleのサーバでは一般的なPCと違ってエラー訂正符号(Error Correction Code:ECC)を使っているため、そうした問題のほとんどが小さいうちに摘み取られていることを念頭に置く必要がある。したがって、Googleのマシンで発生する訂正可能なエラーは、一般ユーザーのコンピュータでは訂正不可能なエラーになる可能性が高い。

2009 年のレポートですので、現在のメモリでのエラー頻度がどうなっているのかはわかりません。このレポートを要約すると ECC 機能なしのメモリでは年に 1 回、 1/3 のサーバーがクラッシュするかもしれないということでしょうか?もしも 3 ノードの計算資源を持っていたら、年に 1 回 1 ノードがクラッシュする可能性があるということでしょうか?(再起動すれば良いだけですけど、、、。)

 

また、ECC とは別に Registered という機能対応のメモリもあります。Registered DIMM では、チップセットから出力されたアドレス信号とコントロール信号が Registered buffer と呼ばれる IC に一旦取り込まれ、buffer と呼ばれる信号を安定強化させる回路とクロック信号のタイミングに合わせるラッチ回路を通って出力されます。これにより、マザーボード上の配線などで微妙にずれた信号のタイミングが補正されます。今回の記事では Registered については、これ以上触れません。

ECC 対応メモリを使うとしたら

ECC 対応メモリを使う場合、CPU、チップセット、メモリを全て ECC 対応のものにする必要があります。CPU は Intel Xeon または AMD EPYCThreadripper になります。また、メモリは何枚か挿すと思いますが、一枚でも ECC 非対応のものが含まれているとダメです。(Registered も ECC と同様に Registered DIMM 対応のチップセットを使用する必要があります。)

価格.com で値段を調べてみると、ECC 非対応の DDR4、16 GB のメモリの最安値は 11,000 円前後です。一方、ECC 対応の DDR4、16 GB のメモリは最安値 19,000 円前後です。。。

例えば 1 ノードに 64 GB 搭載した場合、1 ノードあたり 32,000 円程度の差が出てしまいます。。。4 ノードも作れば  13 万円ほど変わってしまいます。ECC 非対応にすれば、計算資源をもう 1 ノード増やせそうな感じです。。。

ECC は結果には関係ない

Gaussian で計算する場合、ECC 対応・非対応は計算結果に影響を与えないようです。ECC 機能はメモリエラーで計算が途中で止まってしまうことを防ぐためであり、計算結果のエラー訂正は Gaussian の内部コードで行われているそうです。

つまり、結論としては

  • 何週間もかかるような重い計算をする人は ECC 対応のメモリを使った方が良い
  • サーバールームなどすぐにアクセスできない場所にパソコンを設置する場合も ECC 対応のメモリを使った方が良い
  • すぐ終わる軽い計算しかしない人は ECC 対応メモリを使う必要はない

ということでしょうか?

より具体的に言うと、有機反応開発などで実験のサポート程度に計算をやる人は ECC 対応メモリは不要。特にこれまで Mac やノートパソコン、 core i5 や core i7 での計算で事足りてきた方々には ECC 対応メモリは不要です。

一方で、非常に重い計算手法で長時間計算する人 や GRRM 計算などで何週間も計算機を回す人は ECC 対応メモリは必須だと思います。でも、ECC 対応メモリを使ったところで、エラーの確率は 0 ではない。。。

また管理人の個人的な経験ですが、ECC 非対応のメモリで計算していると パソコンがフリーズして止まる時があります。そういう時は再起動すれば問題なくまた計算を始めることができます。しかし、計算機を遠隔地に設置する場合は頻繁に再起動しに行くことが難しいと思うので、ECC メモリーを使った方が良いと思います。

ECC 対応かどうかは たった 8,000 円程度の差なので、資金が潤沢な人は迷ったらとりあえず ECC 対応メモリにしておいたら良いと思います。年に一回起こるかどうかのエラーへの対策に投資するか、それとも計算資源を増やすか、、、どちらが研究効率を向上させるかは、各自で判断ください。

以上、ECC メモリと Gaussian について管理人が調べた結果です。管理人はコンピューターの専門家ではありませんので、記事の内容に間違いなどありましたらコメント欄またはメールなどで教えていただければ幸いです。みなさんからの意見を基に並列計算機を自作したいと考えております。なお、ECC 非対応メモリを使った計算はで不具合が生じたとしても対応しません。

参考文献

  1. グーグルの研究が示すメモリエラーの真実–明らかになった高い発生率
  2. Suggestions for LGA2011 build
  3. Is Intel i7 or AMD FX Octacore best suited for computational chemistry?
  4. Registered対応のメモリとはどういうものなのですか? ECC対応メモリもあわせて、通常のものとの違いを教えてください。
  5. Advantages of ECC Memory

関連する記事

汎関数一覧に戻る

計算手法に戻る

One comment

コメントを残す(投稿者名のみ必須)