遅そうなプログラムの最適化でもしようかねぇ.とりあえずシーケンシャル部分から書き換え.無駄に配列使わず上書きで行く.次は通信をまとめてみようか?
配列2本を使う:
for(int i = 1; i <= Len; i++) V[i] = (1 - MU) * U[i] + MU * U[i - 1]; double *tmp = U; U = V; V = tmp;
こんなものは一本で十分:
register double *u = U; register double pu = *u++; for(double const *e = u+Len; u != e; u++){ register double cu = *u; *u = (1 - MU) * cu + MU * pu; pu = cu; }
これで一回のスッテプでのメモリアクセスが一箇所になった.良し.
- Newer: AWK - はじめ