CPU架构及并发编程基础(一)
一、intel cpu发展计划tick-tock

Tick-Tock是Intel发展微处理器芯片设计制造业务的一种战略模式。Intel指出,每一次处理器微架构的更新和每一次芯片制程的更新遵循“Tick-Tock”规律,名称源于时钟秒针行走时所发出的声响。每一次“Tick”代表着一代微架构的处理器芯片制程的更新,而每一次“Tock”代表着在上一次“Tick”的芯片制程的基础上,更新微处理器架构提升性能。一般一次“Tick-Tock”的周期为两年,“Tick”占一年,“Tock”占一年。
二、现在CPU微架构

三、cpu cache
一个例子,下面loop1和loop2 哪个执行快
int []arr = new int[64 * 1024 * 1024];
// Loop 1
for (int i = 0; i < arr.Length; i++) arr[i] *= 3;
// Loop 2
for (int i = 0; i < arr.Length; i += 16) arr[i] *= 3; 第二个循环只执行了第一个1/16的计算量,但是两个循环在计算机上的耗时是差不多的70-80ms;造成这个问题的原因在于cpu cache line是64bytes,每次从内存加载64Bytes数据到cache;
3.1 Nehalem(三级)结构
L1(每核独有) 数据32k 指令32K分开
L2(每核独有) 256K
L3(共享) 8M
四、cache和内存的关联方式(associativity)

一类是全关联cache(full associative cache),一种是直接关联cache(direct mapped cache),还有一种是N路关联cache(N-ways associative cache)。
全关联(每个内存块可映射到任意cache line),冲突最低,定位慢;直接关联(每个内存块映射到固定的cache line),定位最快,冲突严重;N路关联折中。
下图是8路关联 cache line定位,共64个set:
其中:
index用于定位set
tag用于在set中定位cache line
offet在cache line中定位数据

五、cache一致性协议MESI
cache一致性问题描述:

步骤2 update时,根据一致性协议,会先发送Invalid消息到总线,失效core1的cache及RAM;core1读取Bar时,发现Invalid状态后,会向总线请求,core2会发送Bar=2给core1的cache。
MESI提供cache一致性保证,表示cache对应的四种状态及状态迁移。

Invalid:无有效数据
Shared:与memory有一致数据,读
Modified:更新数据,与memory不一致
Excusive:与memory有一致数据,单点持有;
CPU架构及并发编程基础(一)的更多相关文章
- python中并发编程基础1
并发编程基础概念 1.进程. 什么是进程? 正在运行的程序就是进程.程序只是代码. 什么是多道? 多道技术: 1.空间上的复用(内存).将内存分为几个部分,每个部分放入一个程序,这样同一时间在内存中就 ...
- Java并发编程基础
Java并发编程基础 1. 并发 1.1. 什么是并发? 并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力.如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可交互 ...
- TCP与UDP比较 以及并发编程基础知识
一.tcp比udp真正可靠地原因 1.为什么tcp比udp传输可靠地原因: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程 ...
- 并发-Java并发编程基础
Java并发编程基础 并发 在计算机科学中,并发是指将一个程序,算法划分为若干个逻辑组成部分,这些部分可以以任何顺序进行执行,但与最终顺序执行的结果一致.并发可以在多核操作系统上显著的提高程序运行速度 ...
- Java并发编程系列-(1) 并发编程基础
1.并发编程基础 1.1 基本概念 CPU核心与线程数关系 Java中通过多线程的手段来实现并发,对于单处理器机器上来讲,宏观上的多线程并行执行是通过CPU的调度来实现的,微观上CPU在某个时刻只会运 ...
- Java并发编程基础三板斧之Semaphore
引言 最近可以进行个税申报了,还没有申报的同学可以赶紧去试试哦.不过我反正是从上午到下午一直都没有成功的进行申报,一进行申报 就返回"当前访问人数过多,请稍后再试".为什么有些人就 ...
- Java高并发编程基础三大利器之CountDownLatch
引言 上一篇文章我们介绍了AQS的信号量Semaphore<Java高并发编程基础三大利器之Semaphore>,接下来应该轮到CountDownLatch了. 什么是CountDownL ...
- Java并发编程--基础进阶高级(完结)
Java并发编程--基础进阶高级完整笔记. 这都不知道是第几次刷狂神的JUC并发编程了,从第一次的迷茫到现在比较清晰,算是个大进步了,之前JUC笔记不见了,重新做一套笔记. 参考链接:https:// ...
- Java并发编程基础-线程安全问题及JMM(volatile)
什么情况下应该使用多线程 : 线程出现的目的是什么?解决进程中多任务的实时性问题?其实简单来说,也就是解决“阻塞”的问题,阻塞的意思就是程序运行到某个函数或过程后等待某些事件发生而暂时停止 CPU 占 ...
随机推荐
- 第30天:DOM对象操作
JS包括三部分:ECMAscript.DOM(文档对象).BOM(浏览器对象) 一.DOM(文档对象)DOM树节点(元素.属性.标签.标记等都是节点) 二.访问节点 documment.getElem ...
- BZOJ 1227 虔诚的墓主人(离散化+树状数组)
题目中矩形的尺寸太大,导致墓地的数目太多,如果我们统计每一个墓地的虔诚度,超时是一定的. 而常青树的数目<=1e5.这启发我们从树的方向去思考. 考虑一行没有树的情况,显然这一行的墓地的虔诚度之 ...
- Socket_SSH-2(大文件的一次传输)
import socket,os server=socket.socket() server.bind(('localhost',9999)) server.listen() while True: ...
- Android 常用控件自定义样式RadioButton、CheckBox、ProgressBar、
一.RadioButton / CheckBox 系统自带的RadioButton/CheckBox的样式,注定满足不了实际运用中的情况,有时候自定义自己的样式:此次把自己中工作学习过程中所学到的东西 ...
- [Leetcode] minimum window substring 最小字符窗口
Given a string S and a string T, find the minimum window in S which will contain all the characters ...
- BZOJ3521 [Poi2014]Salad Bar 【线段树 + 单调栈】
题目链接 BZOJ3521 题解 容易想到用前缀和搞 如果我们令\(p\)为\(1\),\(j\)为\(-1\),记前缀和为\(s[i]\) 我们就是要找到一段区间\([l,r]\),使得 \[\fo ...
- 洛谷 P1653 猴子 解题报告
P1653 猴子 题目描述 有N只猴子,第一只尾巴挂在树上,剩下的N-1只,要么被其他的猴子抓住,要么抓住了其他的猴子,要么两者均有.当然一只猴子最多抓两只另外的猴子.现在给出这N只猴子抓与被抓的信息 ...
- POJ.3624 Charm Bracelet(DP 01背包)
POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...
- 使用snmp4j实现Snmp功能(三)
相关链接:Snmp学习笔记使用snmp4j实现Snmp功能(一)使用snmp4j实现Snmp功能(二)使用snmp4j实现Snmp功能(三) 前两篇文章讲了如何使用Snmp4j实现Set.Get(使用 ...
- kubernetes创建资源对象yaml文件例子--pod详解
apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数据/属性 name: ...
