我在各种情况下运行我的代码,导致我认为是奇怪的行为.我的测试是使用HT的双核Intel Xeon处理器.
没有OpenMP’#pragma’语句,总运行时间= 507秒
使用OpenMP’#pragma’语句指定1个内核,总运行时= 117秒
使用OpenMP’#pragma’语句指定2个内核,总运行时间= 150秒
使用OpenMP’#pragma’语句指定3个内核,总运行时间= 157秒
使用OpenMP’#pragma’语句指定4个核心,总运行时间= 144秒
我想我不知道为什么注释我的openmp行使程序在1个线程之间没有openmp和1个线程WITH openmp的速度减慢.
我正在改变的是:
//#pragma omp parallel for shared(segs) private(i,j,p_hough) num_threads(1) schedule(guided) and... #pragma omp parallel for shared(segs) private(i,p_hough) num_threads(1,2,3,4) schedule(guided)
无论如何,如果任何人有任何想法为什么会发生这种情况,请让我知道!
感谢任何帮助,
布雷特
编辑:我会在这里解释一些评论
我使用num_threads(1),num_threads(2)等.
经进一步调查,结果是根据代码中是否包含“计划(指导)”行,我的结果不一致.
– 当我使用计划(指导)行时,我生成最快的解决方案,不管线程数.
– 当我使用默认调度程序时,我的结果显着变慢和不同的值
– 随着线程增加,时间表(指导)的改进不会得到改善
– 没有计划(指导)我增加线程获得改进
我想我没有找到一个足够的描述,对于什么时间表(指导)对我来说,我明白,它试图拆分循环,以便最时间密集的迭代首先发生,这应该有最少的影响一个线程等待其他人完成迭代的时间量.
看来对于我的〜900迭代循环,当我使用schedule(引导),我只处理〜200次迭代,在那里没有进度(指导)我正在处理所有的900次迭代.有什么想法吗?