multithreading - 在典型的 Intel/AMD 多核机器上实现快速计算/巨大内存的多线程效率
问题描述
对于使用多线程进行密集计算的开发人员来说,这是一个有点实际的问题。
在具有 Intel 或 AMD 多核处理器的典型架构的机器上,使用多线程在大面积内存上重复简单的演算是否有效?
例如,假设我想增加一个巨大的整数数组(或对它们进行一些非常简单的操作)并在具有每个子数组的不同线程之间共享工作负载。
根据处理器的核心数量以及是否超线程,机器可以同时拥有 N 个线程。我的微积分速度可以乘以接近 N 吗?或者 RAM 访问的瓶颈会更快出现吗?
我公司可以租用的典型机器有 N = 40。但是如果出现 5 个线程的瓶颈,这些机器将无法实现我们的目标。
我知道从理论上讲,RAM 访问可能是一个瓶颈,但是对于在大内存上重复的相同类型的快速操作,我需要实际经验反馈。
解决方案
这取决于机器架构和配置的细节。但是,对于像增加一个巨大的整数数组这样的事情,您通常可以在内核耗尽之前使内存总线饱和,因此内存成为瓶颈。
您可以从其详细规格中计算出机器的理论内存带宽,然后您可以期望通过多线程在现实生活中获得 80% 到 100% 的内存带宽。
推荐阅读
- spring-boot - 使用 Jasypt 加密的 Spring Boot 外部化配置(引导问题)
- kubernetes - 运行 kubectl 命令 Helm post install
- bash - 如何将命令行参数传递给 docker-compose run?
- python - 收到一封空白电子邮件
- php - 伙计们,那里的任何人都严重陷入了codeigniter 3路线
- ios - 如何使用swift中的自定义按钮选择tableview中的所有单元格?
- typescript - 为 DSL 扩展 TypeScript 编译器
- c# - 在 while 部分变为假 C# 后,Do-while 循环不会停止
- spring - 缺少肥皂动作 :: Spring 集成
- visual-studio-2017 - Visual C++ 中缺少视图设计 (Visual Studio 2017)