GPUはどの程度エラーするのか?

2014年6月に開催された「Fault Tolerance for HPC at eXtreme Scale 2014(FTXS 2014)」という学会で、Unversidade Federal Do Rio Grande Do Sul(UFRGS)のPaolo Rech氏が、NVIDIAのK20 GPUを使い、「lavaMD」、「Hotspot」と「行列の転置」という3つのアプリケーションを実行してエラーの発生頻度を測定したという論文を発表している。なお、この測定はロスアラモス国立研究所の加速器で作られた中性子ビームを使った加速実験によるものである。

FTXS 2014にてPaolo Rech氏が発表した講演資料の表紙 (出典:FTXS 2014 Webサイト)

行列の転置の場合のデータ化けは約10fit、Hotspotでは2000fit、laveMDでは10000fitという結果である。これは、エラー率は、どの程度、チップ上のSRAMを使っているかなどの使い方の違いで違いがでるためと考えられる。また、GPUの動作が止まってしまうというエラーも、データ化けよりは少し少ないが、それぞれのアプリで、データ化けとほぼ同じくらい発生しており、合計すると前記の約2倍のfit数になる。

1fitは109部品・時間で1回のエラーという単位であり、20000fitというのは1個のGPUが5×104(5万)時間に1回エラーするということで、GPUを1個か2個使うワークステーションでは1年に数回の発生頻度であるが、1000個使うスパコンでは2日に1回程度エラーが発生することになり、大きな問題である。

NVIDIAのFermi以降の科学技術計算用のGPUは、デバイスメモリだけでなく、L2キャッシュ、L1キャッシュ、Shared Memory、Read Only Data Cache、さらにレジスタファイルにもECCを付けているので、データ化けは大きく減らす事ができると思われる。論文では、動作停止の原因は制御回路のエラーとしているが、筆者としては、これほど多くのエラーが比較的面積の小さな制御回路に発生するとは考えにくい。データ化けの結果、存在しないアドレスをアクセスしたりすることが動作停止の原因ではないかと思われる。制御回路のエラーはECCでは救えないが、元の原因がデータ化けであれば、ECCで救うことができる。

一方、AMDのGCNアーキテクチャのWhite Paperでは、チップ内のキャッシュやシェアードメモリ、レジスタファイルなどにECCを適用と書かれているが、FirePro 9150などの実際の製品のデータシートでは、GDDR5メモリだけに適用となっていて、チップ内のメモリにはECCは付けられていないようであり、GPUチップ内のデータ化けや動作停止については対策がなされていない。

なお、Paolo Rech氏の測定はGPUチップを狙って中性子ビームを当てており、GDDR5 DRAMのエラー率は測定していない。

GDDR5 DRAMのエラー率に関する論文はないが、2012年11月に開催された「SC12」という学会でAMDのVilas Sridharan氏がJaguarスパコンのメインメモリの11カ月間のエラーログの分析を行いDRAMのエラー率を求めた論文を発表している。この論文では、DRAMのエラー率は0.066fit/Mbitという結果で、使われているDRAMチップは1Gbitのものなので、チップあたりのエラー率は66fitという結果である。そして、その内の28.8%が中性子ヒットによる一過性のエラーであり、残りはインターミッテント(断線しかけとかでガリガリ雑音が出るようなバースト的な)エラーや固定故障であるという。

現在のGPUに使われている4Gbitあるいは8GbitのGDDR5 DRAMのエラー率も0.066fit/Mbitであると仮定すると、4GbitのGDDR5 DRAMのエラー率は264fit、8Gbitのチップでは528fitということになる。K20x GPUでは12個の4Gbit GDDR5 DRAMを使っているので、DRAM全体では、3168fitという計算になる。この値はlavaMDを実行する場合のGPU自体のエラー率より小さいが、無視できない程度の値であり、GDDR5 DRAMにECCを付けることは意味があると考えられる。