multithreading - 为什么在多核 CPU 上增加计算过程需要更长的时间
问题描述
我用 docker 运行简单的算术计算测试
操作系统:ubuntu 20.4
中央处理器:i5-8250U @ 1.60GHz - Kaby Lake - Goldmount - 4 core
在单个 docker 容器上运行测试需要 1.5(显然在主机上)
在双容器上,每个容器也需要1.5
几秒钟
1.7
每个三个
2.0
每个有四个
和 5 他们似乎开始工作而不是并行
所以我可以理解为什么我们失去了 5 个容器的并行性,因为只有 4 个内核。但是为什么 <= 4 我们会看到计算时间的增长?
Docker 文件:containres 运行docker run -v <path>:<path> <imagename> /app/a.out <test_name> & docker run ... <test_name_2> & docker run ...
FROM ubuntu:20.04
WORKDIR /app
测试代码:
testFloat
运行 10 次并从中获取 avg 编译g++ -O0 -static
double testFloat(Timer tmr) {
float total = 0.0;
tmr.reset();
for (unsigned long long int i = 0; i < 100000000; i++)
{
float r1 = randf();
float r2 = randf();
total = r1/r2;
}
double elapsed = tmr.elapsed();
return elapsed;
}
我不知道还有什么有用的,所以请问您是否需要更多信息
解决方案
它的基本频率为 1.6 GHz,最大涡轮频率为 3.4 GHz。这意味着它可以以大约 2 倍的速度运行,但并非一直如此。具体来说,并非所有 4 个内核都能以 3.4 GHz 运行。这可能就是您在同时运行 3 个或 4 个进程时观察到每个内核速度变慢的原因——它迫使所有内核减慢速度以避免过热。
推荐阅读
- python - DeleteView 不适用于 Django 中的 Ajax 和 Bootbox
- python - Python:在熊猫系列中连接用逗号分隔的字符串
- android - 使用 ktor 发送推送通知
- php - PHP将项目从多维数组添加到导航菜单
- node.js - 如何在 vue-cli 应用程序中为 WebSocket 代理正确设置 devServer
- firebase - WidgetsFlutterBinding.ensureInitialized() 有什么作用?
- algorithm - 鉴于它是完全的,如何找到递归方程的基本情况?
- generics - 通用 SwiftUI 视图的字符串推理协议
- c++ - 如何在 C++ 中删除输出末尾的空格?
- python - 如何对 seaborn relplot 的轴使用对数刻度?