这篇文章主要讲解了“OpenMP创建线程中的锁及原子操作性能分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“OpenMP创建线程中的锁及原子操作性能分析”吧!windows CriticalSection, OpenMP的锁操作函数在多核CPU中的性能。原子操作选用InterlockedIncrement来进行测试,对每种锁和原子操作,都测试在单任务执行和多任务执行2000000次加锁解锁操作所消耗的时间。测试的详细代码见后面。测试机器环境: Intel 2.66G 双核CPU 机器一台测试运行结果如下:SingleThread, InterlockedIncrement 2,000,000: a = 2000000, time = 78MultiThread, InterlockedIncrement 2,000,000: a = 2000000, time = 156SingleThread, Critical_Section 2,000,000:a = 2000000, time = 172MultiThread, Critical_Section, 2,000,000:a = 2000000, time = 3156SingleThread,omp_lock 2,000,000:a = 2000000, time = 250MultiThread,omp_lock 2,000,000:a = 2000000, time = 1063在单任务运行情况下,所消耗的时间如下:原子操作 78msWindows CriticalSection172msOpenMP 的lock操作 250ms因此从单任务情况来看,原子操作最快,Windows CriticalSection次之,OpenMP库带的锁最慢,但这几种操作的时间差距不是很大,用锁操作比原子操作慢了2~3倍左右。在多个任务运行的情况下,所消耗的时间如下:原子操作 156msWindows CriticalSection3156msOpenMP 的lock操作 1063ms在多任务运行情况下,情况发生了意想不到的变化,原子操作时间比单任务操作时慢了一倍,在两个CPU上运行比在单个CPU上运行还慢一倍,真是难以想象,估计是任务切换开销造成的。Windows CriticalSection则更离谱了,居然花了3156ms,是单任务运行时的18倍多的时间,慢得简直无法想象。OpenMP的lock操作比Windows CriticalSection稍微好一些,但也花了1063ms,是单任务时的7倍左右。由此可以知道,在多核CPU的多任务环境中,原子操作是最快的,而OpenMP次之,Windows CriticalSection则最慢。同时从这些锁在单任务和多任务下的性能差距可以看出,,多核CPU上的编程和以往的单核多任务编程会有很大的区别。需要说明的是,本测试是一种极端情况下的测试,锁住的操作只是一个简单的加1操作,并且锁竞争次数达200万次之多,在实际情况中,一由于任务中还有很多不需要加锁的代码在运免费云主机、域名行,实际情况中的性能会比本测试的性能好很多。测试代码如下:感谢各位的阅读,以上就是“OpenMP创建线程中的锁及原子操作性能分析”的内容了,经过本文的学习后,相信大家对OpenMP创建线程中的锁及原子操作性能分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是云技术,小编将为大家推送更多相关知识点的文章,欢迎关注!
这篇文章主要介绍“react怎么管理状态”,在日常操作中,相信很多人在react怎么管理状态问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”react怎么管理状态”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! react管理状…