5 南方铁匠

尚未进行身份认证

我要认证

在深度学习和体系结构熔炉的铁匠

等级
TA的排名 1w+

CPU Memory: 为什么需要使用互斥量mutex

多线程的变成需要使用旗语,同步代码段,互斥量或者是任何调用它们的编程语言。我们大多数基本上知道为什么我们需要它们:为了阻止多线程访问同一块内存区域。你是否停下来真正想过,它们究竟是干什么的?为什么你需要保护存储空间?这个听上去应该是CPU该干的活。大多数是的时候,互斥量也就是一个简单的实现,但是理解为什么需要它却没那么容易。这个答案在于CPU是如何组织存储的,以及它是如何优化你的代码的。...

2020-07-11 21:05:28

互斥量mutex是如何工作的

并发变成要求同步。同一时刻不能有超过一个线程处理数据,否则我们就会遇到数据竞争。最常见的做法就是将关键数据的访问权限放置到mutex中。mutex当然不是免费的。mutex可以严重的影响我们编写的代码的性能。当正确使用的时候我们很难注意到mutex引入的性能支出。但是错误的使用的时候,可能多线程的性能还比不过单线程。 互斥量mutex,最基本的形式就是内存中的一个整数。这个整数基于mutex的不同状态可以有不同的值。当我们讨论mutexes的时候,我们也会需要讨论锁机制。存储在存储器的中的整数并不有趣,.

2020-07-08 00:47:49

断点是如何工作的

Overview在调试代码时,一个常见的问题就是断点到底是怎么工作的。另一个问题就是软件断点和硬件断点有什么不同,我应该选择哪种。本文将会深入的介绍软件和硬件断点的不同。也会更加详细的提供Code Composer Studio 和 Target的内部工作机制。并且,也会讨论特殊的断点的case和高级用法。 Abbreviation Used t CCS - Code Composer Studio (用于 TI DSP、微处理器和应用处理器的集成开发环境)t HWBP Hardware Brea.

2020-07-05 21:46:14

CPU Wiki: Sandy Bridge Microarchitecture 后端

Execution EngineSandy Bridge 的后端执行单元处理乱序执行。Sandy Bridge的back end将NetBurst和P6进行了融合。像P6一样,Sandy Bridge 独立的处理三种类型的uOPs(浮点,整型和向量)。然而实现的方式却十分不同。Sandy Bridge 借鉴了NetBurst中更加高效的追踪tracking和重命名renaming架构。Sandy Bridge 以下简称SNB使用了NetBurst中基于物理寄存器文件(PRF)的重命名机制进行追踪。在之

2020-06-17 01:29:14

CPU Wiki: Sandy Bridge Microarchitecture 前端(下)

MSROM & Stack Engine在X86指令中,有一些连复杂解码器都认为复杂的指令。这些指令会被翻译成超过4条uops,它们是从microcode sequencer(MS) ROM 绕道译码的。此时,MSROM每周期会发射超过4条指令,直到microcode sequencer完成了工作。在此期间,译码器停止工作。x86有这一个专门的stack machine 操作。像push,pop和call,ret这样的指令,是工作在stack pointer(ESP)上的。如果没有这样专门的硬件

2020-06-14 22:19:20

CPU Wiki: Sandy Bridge Microarchitecture 前端(上)

Sandy Bridge 可以看做是自从NetBurst和P6之后的一个全新microarchitecture。Sandy Bridge回溯了最去的drawing board阶段,从P6和NetBurst引入了很多有益的结构。尽管NetBurst是一个有严重瑕疵的结构,但是它引入了一些重要的创新,这些在Sandy Brdigy中被重新实现并增强。它与一直到Nehamlem基本都没有引入P4,P6的结构的早期Core结构不同。 Sandy Bridge引入了前辈们的优先,并且提升。PipeLineSa

2020-06-12 20:13:56

Microarchitecture:Macro Fusion

Macro-Operation Fusion (Macro-Op Fusion, MOP Fusion or Macrofusion) 在现代的微架构中被广泛的使用。该技术即为相邻的marco-operations 可以被合并为单条macro-operaton,在译码期间或者更早。这些指令在后面被译码为fused-uops。 影响处理器的性能的三个因素之一是指令个数。通过减少指令个数,可以使用更少的资源完成更多的工作。macro-fusion 背后的思想就是将邻近的指令进合并为一条指令。一条被融合的指令.

2020-06-08 22:42:18

【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.11-9.15】

9.11 部分寄存器访问一个通用寄存器的不同的部分可以存放在不同的临时寄存器中,以减少伪依赖。在向寄存器的一部分发起写操作,后续跟随一个读取完整寄存器的操作时会遇到问题。; Example 9.4. Partial register problemmov al, 1mov ebx, eax在Sandy Bridge中通过插入一个额外的uop以将不同的寄存器部分可以解决这个问题。我猜测这个额外的uop是在ROB-read 阶段生成的。在上述的例子中,ROB-read将会产生一个额外的uop,

2020-05-31 17:06:32

【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.8-9.10】

9.8 寄存器分配和重命名所有的整数,浮点,MMX,XMM,YMM,标志寄存器,并且可能段寄存器也可以被重命名。浮点数控制字也可以被重命名。寄存器重命名被RAT(寄存器重命名表)和重排序缓冲区控制,如图6.1所示。来自译码器和stack engine的uops通过queue进入RAT,而后进入ROB-read 和保留站。RAT可以每周期处理4条uop。RAT可以每周期重命名4个寄存器,并且它甚至可以一个周期内重命名同一个寄存器4次。非依赖的case通常将一个寄存器设置为0的方式是与其自身异或

2020-05-17 12:50:53

【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.7】

9.7 Stack EngineSandy Bridge 设计了独立的stack engine,工作方式与之前的处理器中的Stack Engine相同。引入7.7 Stack Engine对stack的介绍栈指令,比如push,pop,call 和ret都会修改栈指针。例如,指令push EAX将会在P3 处理器上产生3条uop,两条用于存储EAX,一条用于将ESP减4。在PM中,相同的指令只会产生一条uop。两条存储uops通过uop fusion的方式合并为一条,ESP-4则是通过一个专门用

2020-05-15 22:02:51

SPECCPU2006 Spec2006 使用说明

工具介绍SPEC CPU 2006 benchmark是SPEC新一代的行业标准化的CPU测试基准套件。重点测试系统的处理器,内存子系统和编译器。这个基准测试套件包括的SPECint基准和SPECfp基准。 其中SPECint2006基准包含12个不同的基准测试和SPECfp2006年基准包含19个不同的基准测试。SPEC设计了这个套件提供了一个比较标准的计算密集型,高性能的跨硬件的CPU测试工具。在SPEC CPU 2006基准有几种不同的方法来衡量计算机性能。 一种方式是测量计算机完成单一任务的速度

2020-05-10 16:31:55

【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.4~9.6】

9.4 LoopBack BufferNehalem 中的28uop loop buffer 在Sandy Bridge和Ivy Bridge中被保留。Loop Buffer被放置在uop cache之后,但是在uop cache miss的情况下,它也可以接受来自译码器的指令。Loop buffer可以提高微小循环的性能。如果uop cache不是瓶颈的话,loop buffer没有可以测量...

2020-05-03 00:20:03

C/C++中static的用法全局变量与局部变量

1.什么是static?  static是C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。1.1static的引入  我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题:如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但定义...

2020-05-01 10:55:38

【Microarchitecture of Intel and AMD CPU】 9 Sandy Bridge and Ivy Bridge pipeline 【9.1~9.3】

Intel命名Sandy Bridge 的微架构是基于Core 2 和Nehalem的第二代设计。在解码器后面加入了新的uop cache,并且浮点执行单元从128bit扩展到256bit。Sandy Bridge 有2-8 个core,其中的一些版本可以在每个core上运行双线程。支持新的AVX 指令。将16个128bit的XMM寄存器扩展到256bit的YMM寄存器用于支持浮点向量运算...

2020-04-29 00:59:51

Microarchitecture: HyperThreading(超线程)

线程并行当代的软件趋向于运行在多线程模式,或者是并行处理。网络包传输和web服务可以运行以多线程的方式运行以达到更高的性能。甚至是桌面应用也开始增加并行性。Intel架构师已经开始尝试利用TLP( thread-level parallelism) 线程并行性,用来在较少的晶体管和功耗下就能达到更高的性能。高端和终端的服务器市场,多核已经被广泛的使用,已获得更高的性能。通过增加处理器,应用...

2020-04-28 18:29:50

Leetcode 5. 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"题解:回文子串是一道老题了,做一个矩阵,初始化对角线[i][i] 以及[i][i+1]的元素,然后像左上方增长即可。class Solution ...

2020-04-17 20:38:39

Leetcode 61. 旋转链表

给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->...

2020-04-17 16:34:41

Leetcode 142. 环形链表 II

给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index ...

2020-04-15 22:30:52

Leetcode 面试题48. 最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的...

2020-04-14 21:40:48

LeetCode 845. 数组中的最长山脉

我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”:B.length >= 3存在 0 < i< B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1](注意:B 可以是 A 的任意子数组,包括整个数组 A。)...

2020-04-11 11:45:43

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。