我正在努力调整一个程序以使用 OpenMP。我有一组嵌套的 for 循环。最外面的 for 循环是沿着图像向下的 y 轴循环。我想在循环上运行多个并行线程,但我无法让它快速运行。
目前,当我运行 8 个线程时,它的运行方式如下:
thread 0 -> row 0,8,16...
thread 1 -> row 1,9,17...
thread 2 -> row 2,10,18...
thread 3 -> row 3,11,19...
我希望它以块的形式运行,以便线程 0 执行前 1/8 行。做这个的最好方式是什么?
当前代码:
...
int y_percent = data_size_Y/8;
int thread = 0;
#pragma omp parallel for num_threads(8) firstprivate(vecs, bufferedOut,data_size_X, data_size_Y, kern_cent_X, kern_cent_Y, sum)
for(int y = y_percent*omp_get_thread_num(); y < (omp_get_thread_num()+1)*y_percent; y++){ // the y coordinate of theoutput location we're focusing on