C版
size
1000*1000 * 1 20ms
1000*1000 * 10 191ms
1000*1000 * 100 1893ms
線形な変化だからCPUキャッシュに載り切るかで性能が分かれるという事が生じてない。
たぶんCPUキャッシュは「繰り返し使うデータ」じゃないと有意義じゃない。
この処理だとCPUキャッシュ上のデータを排除可能になるまでの時間がボトルネックで、
つまり「CPU上のデータを処理しきって次の要素を受け付けれるようになるまでの時間」が支配的なはずで
そこがベクトル演算で高速化してる。

Java版も線形に変化した。

で、Javaのコードでr += data1[i] + data2[i]のところでdata1のみにしたら2倍速になったからベクトル演算未適用が原因でほぼ間違いない。
その行で+か-か^か&かは結論に影響しない。