有没有一种办法知道程序执行了多少条CPU指令的执行过程

CPU里指令和数据的关系是什么?打开一个程序执行的是指令还是数据?_百度知道
CPU里指令和数据的关系是什么?打开一个程序执行的是指令还是数据?
在大学里面,需要你自己看一些书,直到你结束程序,是处理数据的,“微机原理”你可以看一下,X64处理器基本沿用了其模型,也有数据,有一些是用于运算的(+-*&#47,既有指令,处理后又放回内存,也就是利用指令运算单元处理数据,有一些是用于数据操作(移动,打开一个程序执行的应该是指令,把程序调入内存,转移等)。你可以简单认为这是一个死循环。而指令又有分类,而这些指令负责去处理数据,现代的X86。而打开一个程序。程序是以数据的形式存放在硬盘里;),然后由CPU给出指令。在系统中这个问题回答清楚就有深度了,CPU叫做“中央处理器”顾名思义。所以说要简单的说明白你的问题,然后CPU不断的从内存里面调出数据,首先吧
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁> 问题详情
计算机的CPU每执行一个( ) ,就完成一步基本运算或判断。 A.语句 B.指令 C.程序 D.软件
悬赏:0&答案豆
提问人:匿名网友
发布时间:
计算机的CPU每执行一个( ) ,就完成一步基本运算或判断。 A.语句 B.指令 C.程序 D.软件
网友回答(共0条)
我有更好的答案
您可能感兴趣的试题
1会计信息化的发展快慢与企业单位(  )的改造与创新速度成正比。A.会计软件B.会计电算化C.会计信息系统D.管理思想2微型计算机中,运算器的主要功能是进行(  )。A.算术运算B.算术和逻辑运算C.逻辑运算D.以上都不正确
相关考试课程
请先输入下方的验证码查看最佳答案
图形验证:
手机号码:
验证码提交中……让天下没有难学的技术
从JVM并发看CPU内存指令重排序(Memory Reordering)
从JVM并发看CPU内存指令重排序(Memory Reordering)
这两天,我拜读了
写的一片博文 (中译文)。
对主存的一次访问一般花费硬件的数百次时钟周期。处理器通过缓存(caching)能够从数量级上降低内存延迟的成本这些缓存为了性能重新排列待定内存操作的顺序。也就是说,程序的读写操作不一定会按照它要求处理器的顺序执行。
这段话是作者对内存屏障重要性的定义。通过cache降低内存延迟,这句话很好理解。但后面那句“为了性能重排序内存操作顺序”,让没学好微机原理的我倍感疑惑。
CPU为何要重排序内存访问指令?在哪种场景下会触发重排序?作者在文中并未提及。
为了解答疑问,我在网上查阅了一些资料,在这里跟大家分享一下。
重排序的背景
我们知道现代CPU的主频越来越高,与cache的交互次数也越来越多。当CPU的计算速度远远超过访问cache时,会产生cache wait,过多的cache ?wait就会造成性能瓶颈。
针对这种情况,多数架构(包括X86)采用了一种将cache分片的解决方案,即将一块cache划分成互不关联地多个 slots (逻辑存储单元,又名
或 Cache Bank),CPU可以自行选择在多个 idle bank 中进行存取。这种
的设计,显著提高了CPU的并行处理能力,也回避了cache访问瓶颈。
Memory Bank的划分
一般 Memory bank 是按cache address来划分的。比如 偶数adress 0×?分到 bank 0, 奇数address 0×?分到 bank1。
重排序的种类
编译期重排。编译源代码时,编译器依据对上下文的分析,对指令进行重排序,以之更适合于CPU的并行执行。
运行期重排,CPU在执行过程中,动态分析依赖部件的效能,对指令做重排序优化。
实例讲解指令重排序原理
为了方便理解,我们先来看一张CPU内部结构图。
从图中可以看到,这是一台配备双CPU的计算机,cache 按地址被分成了两块 cache banks,分别是?cache bank0 和 cache bank1。
理想的内存访问指令顺序:
1,CPU0往?cache address 0× 写入一个数字 1。因为address 0×是偶数,所以值被写入 bank0.
2,CPU1读取 bank0 address 0× 的值,即数字1。
3,CPU0往 cache 地址 0× ?写入一个数字 2。因为address 0×是奇数,所以值被写入 bank1.
4,CPU1读取 bank1 address ?0× 的值,即数字2。
重排序后的内存访问指令顺序:
1,CPU0 准备往 bank0 address 0× 写入数字 1。
2,CPU0检查 bank0 的可用性。发现 bank0 处于 busy 状态。
3, CPU0 为了防止 cache等待,发挥最大效能,将内存访问指令重排序。即先执行后面的 bank1 address 0× 数字2的写入请求。
4,CPU0检查 bank1 可用性,发现bank1处于 idle 状态。
5,CPU0 将数字2写入 bank 1 address 0×。
6,CPU1来读取 ?0×,未读到 数字1,出错。
7, CPU0 继续检查 bank0 的可用性,发现这次?bank0 可用了,然后将数字1写入 0×。
8, CPU1 读取 0×,读到数字2,正确。
从上述触发步骤中,可以看到第 3 步发生了指令重排序,并导致第 6步读到错误的数据。
通过对指令重排,CPU可以获得更快地响应速度,但也给编写并发程序的程序员带来了诸多挑战。
内存屏障是用来防止CPU出现指令重排序的利器之一。
通过这个实例,不知道你对指令重排理解了没有?
不同架构下的指令重排优化
从图中,可以看到,X86仅在 Stores after loads 和 Incoherent instruction cache pipeline 中会触发重排。
Stores after loads的含义是在对同一个地址进行读写操作时,写入在读取后面,允许重排序。即满足弱一致性(Weak Consistency),这是最可被接受的类型,不会造成太大的影响。
Incoherent instruction cache pipeline是跟JIT相关的类型,作用是在执行 时预防JIT没有flush指令缓存。我不知道该类型跟指令排序有什么关系,既然不在本文涉及范围内,就不做深入探讨了。
原创文章,转载请注明: 转载自本文链接地址:
花名晓锋,淘宝网技术专家。
Latest posts by TB晓锋 ()
Related posts:
(4 votes, average: 3.00 out of 5)
Loading...
(window.slotbydup=window.slotbydup || []).push({
id: '980251',
container: s,
size: '300,80',
display: 'inlay-fix'cpu为什么能一个时钟周期内执行四条指令?不是要n个时钟周期才能执行一条指令吗_百度知道
cpu为什么能一个时钟周期内执行四条指令?不是要n个时钟周期才能执行一条指令吗
可以多条指令同时进行,现代cpu有流水线处理和超标量执行技术首先,晶体管在一个cpu周期内可以运算多次(一般十几次);其次,自然就可以执行多条指令了;最后,还有多核心并行运算
奇怪cpu的最小计算单位是什么,流水线跟超标量有何区别?
其他类似问题
为您推荐:
时钟周期的相关知识
其他2条回答
开了个20平米的小卖铺!突然发现比上班强啊!奶奶的mp3
转自花粉俱乐部
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁比如,我得到一个命令行程序cmdx,当然我没有它的源代码,但是我想知道在我敲下 cmdx 1 2 3 直到它返回退出一共执行了多少条CPU指令?是否有比较好的办法呢?
CreateProcess DEBUG_ONLY_THIS_PROCESSstep by step
已有帐号?
无法登录?
社交帐号登录
c++/算法/IDA/逆向工程/ring 0爱好者

我要回帖

更多关于 指令执行过程 的文章

 

随机推荐