Lecture 6 多线程编程

Lecture 6 Multicore Programming

课程内容

本节课主要讲的就是多线程编程的一些基础知识,重点在各个线程库的使用上。

多核处理器

为什么需要多核处理器?

因为摩尔定律的『失效』,因为时钟频率的客观局限性,单核可容纳的晶体管数已经达到上限。

抽象的多核架构

Chip Multiprocessor (CMP)

在这里插入图片描述

图源本课课件

Cache缓存一致性

多核系统中,比较重要的问题就是缓存的一致性问题。

问题发生在当不同的核对同一个变量读取后,放到自己核的Cache中。其中某一个核对这个变量更改后,其他的核再从自己的Cache读取这个变量的时候,Cache中所存储的数据已经过期了,不是最新的。

因此而产生了MSI协议。

MSI协议

每一个Cache Line都被打上了一个状态标签。

M (modified):Cache Block 被修改过了。
S (sharing):其他的 Cache 也共享了这个Block。
I (invalid):Cache Block 失效了。

在每一个Cache修改了一个数据后,硬件系统会先将其他Cache的拷贝置为失效。

几个问题

为什么是按Cache Line粒度的?

理论上可以为每个内存中的位置都设置一个状态标签。但是这样带来的开销是特别大的。选了一个适中的粒度。

这个协议是硬件上实现的,而非软件的。
相似的协议有很多,这只是其中一种。

并发平台

以斐波那契的计算为例,单线程代码:

#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>

int64_t fib(int64_t n) {
   
	if (n < 2) {
   
		return n;
	} else {
   
		int64_t x = fib(n - 1);
		int64_t y = fib(n - 2);
		return x + y;
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值