今日学んだこと

なんか実験で並列プログラミングとかいうのをやっていて、並列化する前に逐次実行のコードを速くしようとしてるんですけど、そういうことほとんどしたことないし、よくわからないですね。
とりあえず、ループの順番入れ替えるとかなんとかしてキャッシュミス減らして、むふーっていってます。
Cは投げ捨ててnasmとかで書くとよいのではないかなぁ、と思っとるんですがやる気次第。

    double s = 0;
    for(i=0; i<k; ++i) s += a[i];
    b[j] -= s;

    double s = b[j];
    for(i=0; i<k; ++i) s -= a[i];
    b[j] = s;

だと、上のほうが速い。(ほんのちょっと)
なぜかはしりません。きっとそうではない環境とかもあるでしょう。

    double s = 0;
    double *p = a;
    for(i=0; i<k; ++i) s += *p++;
    b[j] -= s;

のほうがもうちょっと速い。


あとループアンローリング???とかいうのすごいですね.....


明日、SIMDとか試す