如何通过.NET Core查找物理CPU核心数(不是逻辑SMT超线程)?

2024-01-21

我想检测实际物理核心的数量,而不是逻辑核心的数量,因为当更多线程竞争私有每核心缓存时,工作负载会出现负扩展,和/或具有足够高的 IPC,每个核心运行多个逻辑线程不会吞吐量的增加超过线程开销的增加,特别是对于无法完美扩展到大量内核的问题。

或者换句话说,在没有任何线程相互竞争执行资源(内存带宽除外)的情况下可以运行的线程数量。 (编者注:超线程的一些替代方案,例如 AMD推土机系列 CMP https://en.wikipedia.org/wiki/Bulldozer_(microarchitecture)#Bulldozer_core有 2 个整数核心共享一个 FPU/SIMD 单元;您可能希望根据工作负载将其算作 2 个真正的核心,即使您不想算作 2 个与物理核心共享的逻辑核心SMT https://en.wikipedia.org/wiki/Simultaneous_multithreading例如英特尔的超线程。)


我知道以前曾有人问过类似的问题,但答案看起来已经过时了。或者获取物理处理器数量 .NET Core 2.2 https://stackoverflow.com/questions/56139338/getting-physical-processor-count-net-core-2-2没有答案,问题中的代码不完全可移植。

System.Environment.ProcessorCount返回的计数logical仅限核心,因此我的超线程系统的数量是双倍的。对于某些密集的并行计算,启动的线程数不超过physical可用核心 - 至少我的测试表明,当我启动更多线程时,性能会显着下降。

我发现一些仅适用于 Windows 的解决方案调用 WMI 或 kernel.dll 来获取物理核心的数量。但是如何在.net core 上保持平台独立性?是否有隐藏的核心数量或可靠的计算方法?

到目前为止,我发现的最有前途的想法是在一个线程上进行一些较长的计算并测量它的时间。然后并行执行相同的计算(即 ProcessorCount 线程)并测量总时间。比较两次来猜测物理核心的数量。这可能有效,但对我来说看起来成本高昂且不可靠。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过.NET Core查找物理CPU核心数(不是逻辑SMT超线程)? 的相关文章

  • StringComparison.InvariantCultureIgnoreCase 去哪儿了?

    我正在将 C 代码移植到 Windows 应用商店应用程序 令我惊讶的是 以下代码不再起作用 someString Equals someOtherString StringComparison InvariantCultureIgnore
  • 如何完全禁用签名程序集?

    我有一个包含多个项目的 VS NET 2010 解决方案 我刚刚添加了一个新的库项目 the library assembly 启动项目是一个网站 当我运行该网站时 出现以下错误 无法加载文件或程序集 the library assembl
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • KeyValuePair - 没有无参数构造函数?

    我有一个具有 KeyValuePair 类型属性的对象 我想从数据库读取一些数据并将结果存储在这个 KeyValuePair 类型字段中 myObject KeyValuePairs ctx ExecuteQuery
  • WCF WebHttp 混合身份验证(基本和匿名)

    所有这些都与 WebHttp 绑定有关 托管在自定义服务主机中 IIS 目前不是一个选项 我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy 当我将端点的绑定配置为使用
  • 记录共享和映射的诊断上下文

    据我所知 其他人做了什么来解决 Commons Logging 项目 针对 NET 和 Java 不支持映射或嵌套诊断上下文这一事实 执行摘要 我们选择直接使用实现者日志框架 在我们的例子中为 log4j 长答案 您是否需要一个抽象日志框架
  • Asp.net core默认路由

    简化版Startup code public void ConfigureServices IServiceCollection services services AddMvc public void Configure IApplica
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 我需要安装什么才能获取 Microsoft.TeamFoundation.WorkItemTracking.Client.dll?

    我只需要安装VS2010 SDK http www microsoft com downloads en details aspx FamilyID 47305cf4 2bea 43c0 91cd 1b853602dcc5 是否有 TFS2
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • Docker 中的 Web api 无法连接到主机上的 SQL Server,并出现登录前握手错误

    首先有一些类似的问题 但我已经尝试了我能找到的所有建议 但似乎没有任何效果 如果你能找到我没有提到的 请评论 我会尝试一下 概要是我正在尝试将 Docker 容器中的 NET Core 3 1 Web api 连接到主机上的 SQL Ser
  • project.json 等效于 InternalsVisibleTo

    Net Core 的项目 json https learn microsoft com en us dotnet articles core tools project json copyright允许配置传统 Net 应用程序使用通常放置
  • 点击浏览器后退按钮时如何刷新 ASP .NET MVC 页面

    我刚刚发现 当我单击任何 ASP NET MVC 页面上的浏览器后退按钮时 没有任何反应 并且页面不会更新 并且只有当您单击 F5 时才会更新 主要问题是我对页面的 DOM 进行了一些更改 即添加表格行 选择单选按钮等 当我通过点击浏览器后
  • C# 转换为小数

    如果有的话 有什么区别 decimal d decimal myDouble decimal d new decimal myDouble decimal d Convert ToDecimal myDouble 没有区别 如果你看一下源码
  • 如何将 Integer8 值转换为 DateTime?

    如何将 Integer8 类型值转换为 DateTime 类型值 特别是 我正在尝试获得帐户过期采用人类可读形式的 Active Directory 用户属性 SearchResult GetDirectoryEntry Propertie
  • C# 数据表来保存表格(无限嵌套)

    我相对较新C 但来自C C 背景 我需要一个类似于的数据类型 类 DataTable 但允许存储的列保存 简单 类型 int float boolean string 以及相同类型的数据 以便一个列可以保存另一个表 该表也具有存储表等的列
  • .Net core 中的 log4net AdoNetAppender 不支持?

    我正在尝试在我们的 dot net core 1 1 2 应用程序中实现 log4net 2 0 8 ConsoleAppender 工作正常 但 AdoNetAppender 抛出错误 无法加载类型 log4net Appender Ad
  • azure webjob:读取 appSettings.json 并将配置注入 TimerTrigger

    我无法从 webjob 中的 appSettings json 文件读取配置值 webjob 使用以下 nuget 包 我的控制台应用程序 webjob 中有两个设置文件 应用程序设置 development json 应用程序设置 生产
  • 如何打开 Windows 资源管理器窗口并选择特定文件夹

    我有一个 winform 应用程序 这个 winform 应用程序创建了几个文件 我想在我的应用程序中实现 查找目标 功能来显示这些文件 这些文件位于同一文件夹中 看图片 假设我创建了几个文件 C Test 文件夹 该文件夹包含以下文件 C

随机推荐

  • 在 Qt、QtCreator 和 QMake 中配置 GCC 编译器开关

    我最近尝试使用Qt创建者 http en wikipedia org wiki Qt CreatorWindows 7 64 位 上的 1 3 2 Qt 4 6 2 和 GCC 4 4 0 32 位版本 使用一些实验性 C 0x 扩展来编译
  • 如何在heroku上部署夹层?

    我创建了一个夹层项目 其名称为 mezzanine heroku test 我创建了一个 Procfile 其内容如下 网络 python manage py run gunicorn b 0 0 0 0 PORT w 3 接下来 我访问网
  • JPQL 中的 LEFT JOIN ON()

    我有两个实体 User id long name String Player id long owner User 点 int 现在我想在一个 JPQL 查询中选择一个用户及其关联的玩家 在 SQL 中我会这样做 SELECT u p FR
  • 在使用 R 进行 PCA 分析之前省略 NA 和数据插补

    我正在尝试使用进行 PCA 分析princompR 中的函数 下面是示例代码 mydf lt data frame A c NA rnorm 10 4 5 B c NA rnorm 9 4 5 NA C c NA NA rnorm 8 4
  • Pyspark 根据另一个数据帧替换数组列上的值

    我有两个数据框 一个仅包含一些独特的数据框ids与相关的names像这样 Id name 0 name a 1 name b 2 name c 第二个数据帧包含存储在数组中的第一个数据帧的 id 每行 Row 1 row 2 0 0 2 1
  • Canvas绘制速度非常慢

    我想显示带有标记的比例尺 效果很好 最重要的是 我还想用红色指示器在刻度中显示鼠标位置 因此 我在运行应用程序时绘制画布 然后在更改鼠标位置时重新绘制整个画布 我是画布新手 不明白我的代码有什么问题 我一直在尝试解决它但没有运气 问题可能出
  • SwiftUI 可选环境对象

    我在用着 EnvironmentObject像这样 struct MyView View EnvironmentObject var object MyObject 但我的代码不需要有值object 仅将其设为可选是行不通的 甚至无法编译
  • 使用 RankNTypes 和 TypeFamilies 的非法多态或限定类型

    我一直在慢慢地致力于移植llvm https github com alphaHeavy llvm包使用数据类型 类型族和类型 nats 并在尝试删除用于对值进行分类的两种新类型时遇到了一个小问题 ConstValue and Value
  • 进程的开始时间

    如何使用 C 代码检索进程的启动时间 如果可能的话 我还想知道如何使用 Widows 内置的功能来做到这一点 public DateTime GetProcessStartTime string processName Process p
  • 在数据库表中存储整数或字符串之间的区别

    我关心性能 工程和可读性 假设我有一个博客 每个帖子都有其状态 已发布 4 待审核 2 草稿 1 建议将这些信息存储在什么位置status column status lt storing status as string pending
  • URI 模板可以用于将 URI 与路由匹配吗?

    ASP NET 或 Nancy 等框架提供了可用于指定路由的语法 例如 MapRoute customers id invoices invoiceId 在 ASP NET 中 路由有两个方向 他们能match请求 URI 例如 custo
  • Spring 的 AspectJ 模式缓存与 AspectJ 模式事务

    我的问题与 Spring 的 AspectJ 模式有关 特别是如何启用它 交易管理 Caching 1 我注意到 为了启用AspectJ模式进行事务管理 我只需要执行以下操作 Configuration EnableTransactionM
  • Spring JPA 存储库忽略 FetchType.LAZY

    我有我的实体类OneToMany定义的映射和通过扩展创建的 Spring JPA 存储库接口JpaRepository弹簧接口 我已将 fetch 设置为FetchType LAZY明确地在关联OneToMany注解 我面临的问题是 当我使
  • 如何在 IAuthenticationFilter 实现中设置 WWW-Authentication 标头?

    我正在使用 MVC5 的 IAuthenticationFilter 接口实现基本身份验证 我的理解是 这是现在的首选方法 而不是使用 DelegatingHandler 我已经让它工作了 但是 www authenticate 标头没有在
  • 在 collectionView Swift 中加载数据时显示活动指示器

    当我的 collectionView 中的数据加载时 我将如何显示活动指示器和白色背景 我目前有这个 let activityView UIActivityIndicatorView activityIndicatorStyle white
  • AndEngine游戏优化

    我在我的游戏中使用 java AndEngine 在游戏过程中我遇到了一些卡顿 我查找了信息并找到了一些如何优化游戏性能的步骤 避免GC 垃圾收集器 在游戏的主要动作中调用 a 游戏时不要创建物体 b 不要创建不必要的对象 优化重复次数较多
  • 为什么$a + ++$a == 2?

    如果我尝试这个 a 0 echo a a PHP EOL echo a 我得到这个输出 2 1 Demo http codepad org ncVuJtJu http codepad org ncVuJtJu 这是为什么 我希望得到这个作为
  • 如何停止(和重新启动)Rails 服务器?

    我正在按照此处的说明进行操作http railsinstaller org mac http railsinstaller org mac在运行 OS X 10 8 2 的 Mac 上启动并运行 Rails 在第 8 步 我被要求重新启动
  • 在带有 Weld 的 Spring Boot 环境中使用时,Omnifaces 2.x 失败

    最后 我在 Spring Boot 环境中成功引导了 Weld 如下所述here https stackoverflow com a 48140084 1907872 CDI 对于使用 Mojarra 的 JSF 和使用 Jersey 的
  • 如何通过.NET Core查找物理CPU核心数(不是逻辑SMT超线程)?

    我想检测实际物理核心的数量 而不是逻辑核心的数量 因为当更多线程竞争私有每核心缓存时 工作负载会出现负扩展 和 或具有足够高的 IPC 每个核心运行多个逻辑线程不会吞吐量的增加超过线程开销的增加 特别是对于无法完美扩展到大量内核的问题 或者