int layer_for = 2;
int each_task_size_for = 100000 / 20;
int num_threads = omp_get_max_threads();
// int num_threads_limit = omp_get_thread_limit();//编不过?
printf("多线程:%d\t%d\n", num_threads);
omp_set_num_threads(num_threads);
#pragma omp parallel num_threads(num_threads) private(x)
{
#pragma omp for
for (int y = 1; y < height - 1; ++y)
{
for (int x = 0; x < width; ++x)
{
pGrad[y*dpitch + x] = pSrc[(y + 1)*spitch + x] - pSrc[(y - 1)*spitch + x];
}
}
#pragma omp master
#pragma omp single
#pragma omp for collapse(layer_for) //only 3.0?
#pragma omp for schedule(dynamic, each_task_size_for)
#pragma omp for nowait
}
1. omp Task以及taskwait还没确切掌握相关特性,有待更多资料
2. for语句加了nowait,但又希望再后续某阶段等待其结束,不清楚应该怎么处理,有待更多资料
3. 实际使用中collapse 与 omp_get_thread_limit似乎编不过,只有3.0以上才支持?
4.实际使用omp与自己使用thread比对,并行性能差不多,有效果,但多次跑似乎有不稳定现象,使用omp多线程性能时高时低,波动范围在最优性能的1.5倍之内,没找到原因在哪。 进一步测试,好像加了nowait会好一些?但自己写的thread比对代码也有wait,并不慢,还是没明白原因。