山口屋~活動日誌~

私生活で主な出来事をピックアップ

キャッシュライン 2 べき乗 配列

2021-08-07 17:42:22 | ソフトウェア開発
キャッシュライン衝突を避けるためには、配列は連続アクセスになるようにしたほうが良いといったことがあるが、配列の要素数を2のべき乗にしないほうがよいということにどうしても納得できなかったので色々調べてみた。どうやら、不連続アクセスになるアドレスが2のべき乗単位でシフトするのがよくないという意味合いらしい。(2次元配列で、連続アクセスになる行方向または列方向の長さが2のべき乗になっていれば、不連続アクセスになる行方向または列方向へのアクセスで必然的に発生する。)

半無限積分 無限積分 打ち切り誤差 離散化誤差 数値積分 並列 同期 待機

2021-08-03 21:40:15 | ソフトウェア開発
半無限積分と無限積分の誤差には、打ち切り誤差と離散化誤差という2つの異なる誤差があるので、注意が必要。

適応的自動積分(adaptive automatic integration)の並列化を調べ始めたが難しいかも。
東京大学情報基盤センター スーパーコンピューティング部門 講習会
第3回お試しアカウント付き並列プログラミング講習会(試行)
黒田久泰:C言語によるOpenMP入門(PDF), pp.22
→分割数が指定済の状態からリダクション演算で並列化

私が使用している適応的自動積分(adaptive automatic integration)のアルゴリズムでは8次Newton-Cotes公式を用いている。
森正武:FORTRAN77 数値計算プログラミング、増補版、pp.187-195、1987、岩波書店

8次Newton-Cotes公式の計算に時間がかかっているわけでなく、誤差判定と反復計算実行の部分に時間がかかっている。誤差判定と反復計算実行は逐次処理となるので並列化困難で、数値積分の中にある関数値計算を並列化するしかない。多重積分の計算で、外側積分からみた内側積分を単純に関数値計算として処理していく場合、内側積分を並列にするとして、内側積分も自動積分の場合は実行時間のバラつきが大きいかもしれない。

共有メモリ並列化する際、内側ループを(同期不要で)並列化する、外側ループで並列化して内側で同期指示する、どちらかになるがスレッドの生成と廃棄が少なくて済む後者が良いと考えている。