2C4T与4C4T在计算密集型任务下的效率对比

1. 环境

机器1:Intel® Core™ i5-4200H CPU @ 2.80GHz,双核四线程,win10 x64,16G内存
机器2:Intel® Core™ i3-9100T CPU @ 3.10GHz,四核四线程。wn10 x64,8G内存

目的:大概测试一下2C4T与4C4T在计算密集型任务下的效率提升对比,内存大小、频率暂且忽略。

方法:使用openMP控制计算任务中的线程使用数量,测试12层for循环所消耗的时间(12是1、2、3、4的公倍数,防止openMP分配任务不均)。实际是测120层的耗时,再除以10。

2. 代码

环境:

#include <iostream>
#include <omp.h>

using namespace std;

const int N = 1e9;

int main() {

	int ans = 0;
	int peat = 120;
	double start = omp_get_wtime();
#pragma omp parallel for num_threads(1)
	for (int i = 0; i < peat; ++i) {
		
		for (int j = 0; j < N; ++j) {
			++ans;
		}
	}

	double end = omp_get_wtime();
	// 计算12层for循环所消耗的时间
	cout << "time: " << (end - start)/10 << endl;

	return 0;
}

3. 结果

机器1(2C4T):

线程数耗时(秒)
12.0653
21.37322
31.15472
41.10587

机器2(4C4T):

线程数耗时(秒)
11.72509
20.877413
30.618491
40.49988

在双核四线程的机器上,单线程执行与双线程执行有明显的效率提升,但是当线程数开到3、4时,效率提升几乎可以忽略不计。原因在于,双核四线程,真正的核心只有2个,也就只有两个物理线程。多出来的两个线程是模拟出来的。但是,这种计算密集型的任务,类似等待IO这种耗时的操作也比较少,核心也就不会切换,虚拟出来的线程几乎派不上用场。所以,最多就是两个线程的效率。

而,四核四线程,是实打实的四个线程在工作。从任务耗时来看,所消耗的时间与线程数量成反比,4线程的仅是1线程耗时的四分之一,4倍左右的效率提升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值