私は最近、この論文に出くわしました。この論文では、疎行列を表す際にメモリを節約する方法について説明しています。32ビット整数は、最大40億までの数値を格納できます。しかし、PDEを解くと、未知数の数が40億に近づくずっと前に、問題が並列化されて分割されました。彼らのアイデアは、帯域幅が狭い場合にマトリックスを並べ替えることです。j
特定の行にすべてのゼロ以外の列のインデックスを格納するのではなく、並べ替えによって大きさが小さくなる傾向があるi
オフセットを格納j - i
します。オフセットは、32ビット整数よりも少ないビット数で保存できます。行列のゼロ以外のエントリを反復処理する場合は、より多くの計算を行う必要がありますが、キャッシュミスを少なくすることによる節約は、それを補う以上のミスをもたらします。では、この論文彼らは特に階層マトリックス形式で16ビットインデックスを使用することを検討していましたが、最終的には同様のアイデアです。ライブラリzfpもあります。これは、浮動小数点データを圧縮するためのものです。
現在「フロップは無料」であり、ボトルネックはメモリアクセスであるため、この種のトリックはCPUキャッシュをより有効に活用するために非常に有望であるように見えます。
私はこれら2つの論文の引用/引用のほとんどを精査しました。私は、ビットパッキングの有効性、スパース行列ベクトルの乗算、および計算科学の他の問題について、他の参考資料を探しています。たとえば、このアイデアを使用して、グラフや非構造化メッシュのデータ構造をはるかに効率的に設計できると思います。