07/04/23 21:22:20
>>573
CPU側をこんな感じにすればGPUの計算量に近くなるかな
void transform(float * rdata, float* g_odata, int width, int height, float theta)
{
float inv_width = 1.0f / width;
float inv_height = 1.0f / height;
float sin_theta = sinf(theta);
float cos_theta = cosf(theta);
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
float u = x * inv_width;
float v = y * inv_height;
u -= 0.5f;
v -= 0.5f;
float tu = u*cos_theta - v*sin_theta + 0.5f;
float tv = v*cos_theta + u*sin_theta + 0.5f;
rdata[y*width + x] = getData(g_odata, tu, tv, width, height);
}
}
}
逆にCUDAのほうでsin, cosの中身をthetaだけじゃなくビルトイン変数blockIdxとかに依存させたら
各入力に対して毎回三角関数を計算せざるを得なくなるから劇的に遅くなるんじゃないかな