热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

如何启动两个CPU内核以同时运行指令?

如何解决《如何启动两个CPU内核以同时运行指令?》经验,为你挑选了1个好方法。

例如,在X86中,两个CPU内核运行不同的软件线程。
同时,这两个线程需要同时在其CPU内核上运行。
是否有办法同步这2个CPU内核/线程,或类似的方法以使它们(几乎)同时(在指令级别)开始运行?



1> BeeOnRope..:

使用共享变量rdtsc在两个线程之间传递基于基础的期限。例如,设置一个最后期限,例如说当前rdtsc值加上10,000。

然后让两个线程都旋转,rdtsc等待直到当前值和阈值之间的差距rdtsc小于阈值T(T = 100应该很好)。最后,使用最终间隔值(即,截止日期rdtsc值减去最后读取的rdtsc值)跳入从属相加指令的序列,以使相加指令的数量等于间隔。

最后一步弥补了以下事实:每个芯片相对于其rdtsc自旋环路通常不会“同相” 。例如,假设rdtsc读取的背对背吞吐量为30个周期,则一个芯片可能会获得890、920、950等的读数,而另一个芯片可能会读取880、910、940等,因此如果出现以下情况,则会出现10或20个周期的错误rdtsc单独使用。使用加法滑动补偿,如果最后期限为1,000,且阈值为100,则第一个线程将触发rdtsc == 920并执行80个加法,而第二个线程将触发rdtsc == 910并执行90个加法。原则上,然后两个内核都大致同步。

一些注意事项:

上面假设CPU频率等于标称rdtsc频率-如果不是这种情况,则在计算跳转到添加幻灯片的位置时,您必须基于标称频率比真实频率给定应用补偿因子。

不要指望您的CPU长时间保持同步状态:诸如中断,可变延迟操作(如高速缓存未命中)之类的操作,或许多其他事情可能会使它们失去同步。

您希望所有有效负载代码以及附加幻灯片在每个内核的icache中都很热,否则它们很可能立即不同步。您可以通过在同步之前对该代码进行一次或多次虚拟运行来预热icache。

您希望T足够大,以使间隙始终为正,因此比背对背rdtsc延迟要大一些,但又不要大到增加添加幻灯片期间发生中断等事件的机会。

您可以通过在同步之后在“有效负载”代码中的各个点处发出rdtsc或来检查“同步”的有效性,rdtscp并查看记录的值在线程之间的接近程度。


完全不同的选择是使用Intel TSX:事务扩展。为两个要进行协调的线程进行组织,以同时读取事务区域内的共享线然后旋转,并让第三个线程写入共享线。这将导致两个等待线程中止。根据内核间的拓扑,两个等待线程可能会收到无效消息,因此随后的TSX几乎同时终止。从中止处理程序中调用要同步运行的代码。


推荐阅读
  • 本文详细介绍了在Linux环境下如何有效地管理任务,包括撤销操作、挂起与恢复任务、终止后台程序以及取消定时任务的方法。这些技巧对于提高日常工作效率和系统维护至关重要。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 本文探讨了SSDP(简单服务发现协议)和WSD(Web服务发现)协议,特别是SSDP如何通过固定多播地址239.255.255.250:1900实现局域网内的服务自发现功能。文中还详细介绍了SSDP协议的关键操作类型及其应用场景。 ... [详细]
  • 本文介绍如何在Linux系统中卸载预装的OpenJDK,安装指定版本的JDK 1.8,并配置防火墙以确保系统安全性和软件兼容性。 ... [详细]
  • 本文探讨了大型服务端开发过程中常见的几个误区,包括异步任务处理不当、日志同步模式使用、网络操作未设置超时、缓存命中率及响应时间未统计、单一缓存模式、分布式缓存加锁不当以及团队管理上的误区,旨在帮助开发者避免这些常见错误。 ... [详细]
  • 本文探讨了使用Java创建高效且可靠的基准测试的方法,强调了选择合适的工具和理解潜在影响因素的重要性。 ... [详细]
  • 探讨手机时间显示停止的问题,分析可能的原因并提供有效的解决办法。 ... [详细]
  • Java 架构:深入理解 JDK 动态代理机制
    代理模式是 Java 中常用的设计模式之一,其核心在于代理类与委托类共享相同的接口。代理类主要用于为委托类提供预处理、过滤、转发及后处理等功能,以增强或改变原有功能的行为。 ... [详细]
  • 本文介绍了一个优化过的JavaScript函数,用于从API获取电影信息并渲染到网页上,同时注册Service Worker以提升用户体验和性能。 ... [详细]
  • 深入解析MySQL查询优化:特定类型查询的高级策略
    本文详细探讨了MySQL中特定类型查询的优化方法,包括COUNT()查询、关联查询、LIMIT分页及UNION查询的优化技巧,旨在提高数据库查询效率。 ... [详细]
  • MySQL性能测试标准倡议:老叶提出的压测基准
    进行MySQL的压力测试通常是为了评估新旧版本之间的性能差异、验证硬件升级的效果、测试参数调整的影响以及评估新业务的负载承受能力。老叶提出了一个MySQL压力测试基准值倡议,旨在促进行业内的标准化和成果共享。 ... [详细]
  • 深入分析十大PHP开发框架
    随着PHP技术的发展,各类开发框架层出不穷,成为了开发者们热议的话题。本文将详细介绍并对比十款主流的PHP开发框架,旨在帮助开发者根据自身需求选择最合适的工具。 ... [详细]
  • 在M1 Mac上使用Xcode编译iOS模拟器项目时,可能会遇到错误提示 'building for iOS Simulator, but linking in object file built for iOS, for architecture arm64',本文将提供解决方案。 ... [详细]
  • 本文探讨了如何利用 Hibernate 进行高效的批量更新和删除操作,包括直接使用 Hibernate API 的方法及其局限性,以及如何通过 JDBC 或存储过程实现更优的性能。 ... [详细]
author-avatar
手机用户2502937657
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有