Intel的朋友帮个忙,求多核或者SMP平台下最快的同步锁

danscort2000 2007-07-30 09:21:39
windows平台
多核心或者SMP平台
求最快的用户态同步锁
目前用的是 critical_section
在单核心平台,确实很快,但是换到多核心或者SMP平台,效率下降了10倍,几乎和内核对象一样慢,
Intel的朋友有没有好的同步锁?
boot::mutex快吗?
这个BOOST没装过,不知道在WIN 平台是映射到什么东西
...全文
473 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
danscort2000 2007-08-01
  • 打赏
  • 举报
回复
好象扯远了
我只想要个最快的锁,也就是CPU开销最少的
就象 redleaves(程序员) 说的那种
可以用InterlockedXXXX来实现,
但是一但一次没锁定,那么如何循环?
UNIX好象用yeild?是这个吗?不太清楚,那WIN下是使用Sleep(0)
还是用WHILE死循环等待?或者有其他的指令?总不会用HALT吧

僵哥 2007-08-01
  • 打赏
  • 举报
回复
之所以有各种同步机制存在,根据优胜劣汰原则,从理论上来讲,肯定不存在绝对性优势的东西。关键要从几个点出现,比较推荐的就是使用同一竞争资源的线程分派到相同的处理器(核)当中,对于不同的共享资源访问尽可能在设计逻辑上面分离到不同的处理逻辑组当中,从而达到更高的资源利用率。线程数量非必要时不需要太多,尽可能合理,以减少线程间切换所带来的性能压力。
redleaves 2007-08-01
  • 打赏
  • 举报
回复
TO danscort2000(danscort.yu) :
我写了"在任何情况下".因为如果是一个周期能完成的操作,CPU会一次性锁定总线进来操作,不会出现操作一半再切换成其它操作的问题.而无论是几个CPU,都不可能出现同时进总线的情况.
至于你的多线程问题,那无疑是冲突引起的等待.通常,你这种测试没有什么意义.因为一般不可能会有你测试中那种密集的内存分配,而且是多个线程的....所以正常使用中,也不会有太多冲突.
另外我也写过内存池,在这种高性能的代码中使用锁定机制是很影响效率的,有可能锁定就占用了10%以上的CPU时间.而且有的时候没有必要使用锁定机制..比如把分配器用做STL allocator这种.
另外,小内存分配,系统的分配器是很快的.测试的时候用大块内存.肯定一下就超过它了.这下心里就平衡了.....^_^
danscort2000 2007-07-31
  • 打赏
  • 举报
回复
不是
我用在自己设计的平坦内存池上
在多核心多线程环境下,必须有高效的同步锁
否则意义就不大了
测试在单核心下,速度很快,大于NEW/DELETE N倍
但是在多核心CPU下,由于锁的原因,速度基本和NEW/DELETE打平,顶多只快了一点
不正常
所以想要个最高效的锁
ah__fu 2007-07-31
  • 打赏
  • 举报
回复
个人觉得研究锁无关的数据结构才是王道!
housisong 2007-07-31
  • 打赏
  • 举报
回复
能否不用锁,比如使用数据并行方案
danscort2000 2007-07-31
  • 打赏
  • 举报
回复
Studio 2005
release
2 个或者以上并发 thread 300* 20000 次
对比测试以下就知道了
ppc686 2007-07-31
  • 打赏
  • 举报
回复
critical_section在单核心平台,确实很快,但是换到多核心或者SMP平台,效率下降了10倍.

根本没有的情况,真不知道你是用什么测试得出这个结论的?
danscort2000 2007-07-31
  • 打赏
  • 举报
回复
intel 说在任何情况下,读写单字节,字对齐的单字,双字对齐的双字都是原子操作

这个适合双核心或者SMP平台?
我怎么觉得不是原子操作,不会出现2个核心同时对一个参数写的情况吗?
redleaves 2007-07-31
  • 打赏
  • 举报
回复
intel 说在任何情况下,读写单字节,字对齐的单字,双字对齐的双字都是原子操作(新的CPU还有一些特例).除此之外只有用LOCK前缀锁CACHE或BUS.
而且内核对象之所以慢,主要是切换现场以及一些等待的机制.这是无法避免的,要改进,只能改进你的锁定逻辑.
ysminnpu 2007-07-31
  • 打赏
  • 举报
回复
自己实现,给你些提示:google下ticket lock, queue-based lock
应该能找到些现成的,可能要稍微改下
flyingdog 2007-07-30
  • 打赏
  • 举报
回复
有些同步功能可以自己用汇编实现的。

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧