C言語でテーブル引きしたら速度が遅くなった
プログラムに悩んでいるものです.
とある画像処理のプログラムを組んでいるのですが,処理が遅くテーブル引きを組んでいます.
この前もこの場を借りて質問しsqrt()のテーブル引きは実現したのですが,処理速度が遅くなってしまい原因が分からないので質問させていただきました.
前の質問URL:http://okwave.jp/qa/q7103550.html
前回から修正した現在のプログラムの一部を示します.
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
void filter(unsigned char* d, short *dx, short *dy, int w, int h)
{
///// テーブル生成 /////
static int c_size = 0; // static 値を保持
static double c_sqrt[1020][1020];
if(c_size != 1020){ // 初回呼び出しのみ実行
c_size = 1020;
for(int i=0; i<c_size; i++){ // 有りえるすべての値を生成
for(int j=0; j<c_size; j++){
c_sqrt[i][j] = sqrt( (double)(i*i + j*j) );
}
}
}
///// d = sqrt(dx^2 + dy^2) /////
for(int y = 1; y < h-1; ++y){
for(int x = 1; x < w-1; ++x){
double u = (double)dx[y*w+x];
double v = (double)dy[y*w+x];
if(u<0) u=-u;
if(v<0) v=-v;
int val = (int)c_sqrt[(int)u][(int)v] /4;
if(val>255) val=255;
d[y*w+x] = val;
}
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
テーブル引きをしない場合(プログラム省略)はこの関数の処理時間が約9[ms]だったのに対し,上記のプログラムは約15[ms]となってしまいました.
どういう風に修正すれば,テーブル引きの効果が出せるでしょうか?
長い文章を最後までお読みいただきありがとうございます.
ご回答,よろしくお願い致します.