本日もよろしくおねがいします。
今、1600*1600画素のRAW画像を読み込み、補正を行って書き出すプログラムを作成しています。
画像を読み込む配列の宣言、読み込み、処理、書き出しの速度の合計を測定しているのですが、疑問に思うことがあります。
1画素ずつ読み込んで、書き出す方式は、とても処理速度が遅かったので…
1600*1600画素の画像を、1600*1600個要素を持つ配列に、1枚いっきに読み込む方法の方が
1600画素を、1600個要素を持つ配列に、1600回読み込む方法よりも、処理速度が速いと予想していたのですが
gettimeofday関数を用いて、速度の測定を行ったところ、
前者は10回実行した平均が 16980マイクロ秒
後者は10回実行した平均は 15532マイクロ秒
となりました。
ほとんど差はありませんが、少し、1600回に分けて読み込んだ方が速いです。
これが、なぜだかわかりません。
なぜ
1600回<1回<1600*1600回 (読み込み)
となってしまうのでしょうか。
また、下のプログラムでは、buf,buf2をstaticの領域に確保していますが、
staticをはずして、stack領域に確保したところ、少しだけ速度が落ちてしまいました。
これも、stackのほうが速いと思っていたので、予想外の結果でした。
曖昧な質問で申し訳ありませんが、どなたか詳しい方がおられましたら、ご教示お願い致します。
下にソースコードを記します。
(コード全体は長いので、速度を測っている部分以外は割愛します。見たい部分がありましたらご指摘ください)
1600画素を1600回読み込み
time_a=get_dtime();
static unsigned char buf[1600];
static unsigned char buf2[1600];
for(i=0; i<1600; i++){
fread(buf,1,1600,fp);
for(j=0; j<1600; j++) buf2[j]=table[buf[j]];
fwrite(buf2,1,1600,fp_adjusted);
}
time_b=get_dtime();
1600*1600画素を1回読み込み