omp


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 
}

 

omp_第1张图片

1. omp Task以及taskwait还没确切掌握相关特性,有待更多资料

2. for语句加了nowait,但又希望再后续某阶段等待其结束,不清楚应该怎么处理,有待更多资料

3. 实际使用中collapse 与 omp_get_thread_limit似乎编不过,只有3.0以上才支持?

4.实际使用omp与自己使用thread比对,并行性能差不多,有效果,但多次跑似乎有不稳定现象,使用omp多线程性能时高时低,波动范围在最优性能的1.5倍之内,没找到原因在哪。 进一步测试,好像加了nowait会好一些?但自己写的thread比对代码也有wait,并不慢,还是没明白原因。

 

你可能感兴趣的:(算法题)