Есть кусок кода, как по мне он достаточно простой, но выполняется целых 5 миллисекунд, как-то это много, как для параллельных вычислений.
__global__ void kernel_compute_global_lighting(float* device_lenght_buff, CudaRenderWindow render_window, CudaRenderCamera camera, CudaRenderMap map, CudaRenderTextures textures, CudaRenderLight lights) {
int pixel_coordinate_y = blockIdx.x * blockDim.x + threadIdx.x;
int pixel_coordinate_x = blockIdx.y * blockDim.y + threadIdx.y;
if (pixel_coordinate_y >= render_window.render_height || pixel_coordinate_x >= render_window.render_width)
return;
render_window.device_rendered_window[pixel_coordinate_y*render_window.render_width + pixel_coordinate_x].r = render_window.device_render_window[pixel_coordinate_y*render_window.render_width + pixel_coordinate_x].r * lights.device_light_pointers[0]->r;
render_window.device_rendered_window[pixel_coordinate_y*render_window.render_width + pixel_coordinate_x].g = render_window.device_render_window[pixel_coordinate_y*render_window.render_width + pixel_coordinate_x].g * lights.device_light_pointers[0]->g;
render_window.device_rendered_window[pixel_coordinate_y*render_window.render_width + pixel_coordinate_x].b = render_window.device_render_window[pixel_coordinate_y*render_window.render_width + pixel_coordinate_x].b * lights.device_light_pointers[0]->b;
}
Для того чтобы вызвать этот Kernel, использую такие параметры:
Сетка
X : (900 + 31) / 32
Y : (1400 + 31) / 32);
Потоки
X: 32
Y: 32
Пытался сжимать косвенную адресацию, делал промежуточный обьект для проведениче вычислений, чтоб сократить количество обращений к памяти. Но все что как по мне должно ускорять выполнение, наоборот делает задержку только больше.
Как мне тогда быть с изображениями выше 1024х800
Просто подскажите что именно тут больше всего влияет, устал рыть без результата...