割り当てのために、次のように記述された「スムーズな」関数のコードを最適化するように依頼されました。
平滑化関数は、ソース画像 src を入力として受け取り、平滑化された結果を宛先画像 dst に返します。実装の一部を次に示します。
void naive_smooth(int dim, pixel *src, pixel *dst) {
int i, j;
for(i=0; i < dim; i++)
for(j=0; j < dim; j++)
dst[RIDX(i,j,dim)] = avg(dim, i, j, src); /* Smooth the (i,j)th pixel */
return; }
struct ピクセルは、赤、緑、青の値 (整数) を格納します。関数 avg は、(i,j) 番目のピクセルの周囲のすべてのピクセルの平均を返します。あなたの仕事は、可能な限り高速に実行するためにスムーズ (および平均) を最適化することです。(注: 関数 avg はローカル関数であり、別の方法で Smooth を実装するためにそれを完全に取り除くことができます。) このコード (および avg の実装) はファイル kernels.c にあります。
これを最適化する方法についてアドバイスがあることを知っている人はいますか?