POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
楼主: Tempestglen
打印 上一主题 下一主题

Arm vs X86的论文

[复制链接]
161#
发表于 2013-3-16 21:57 | 只看该作者
本帖最后由 largewc 于 2013-3-16 21:58 编辑
huangpobu 发表于 2013-3-16 17:15
关于X86的寄存器数量问题,我补充一句。

1.寄存器数量影响编译器调度,这个是写在教科书上的共识性问题, ...


基本同意你的观点

我写的那个例子,我没看到资料,我个人的猜测是intel从core以后的x86的寄存器重命名要复杂很多,可能会把近处的内存操作也重命名为寄存器操作,弥补寄存器不足的问题,反正现在的寄存器堆栈数量也比较多。

不过也许不正确,我个人的猜测是如果不是寄存器重命名的话,没有理由解释为什么效率能够跟寄存器一个等级,即使是一次缓存效率应该仍然会有下降才对,而测试根本跟寄存器是完全相同的。



过一段时间在测试一下吧。


这两天我出差,等回去加你吧,挺高兴认识一个精通汇编级别的朋友。
回复 支持 反对

使用道具 举报

头像被屏蔽
162#
 楼主| 发表于 2013-3-16 22:34 来自手机 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

163#
发表于 2013-3-16 22:38 | 只看该作者
Tempestglen 发表于 2013-3-16 22:34
这种分析比较中肯,我喜欢。

比较中肯吗?
不过也是他一家的观点,他的观点到底对不对有谁论证过?
对个P都不懂一点的人,还是少出来丢人现眼!
回复 支持 反对

使用道具 举报

164#
发表于 2013-3-16 22:49 | 只看该作者
本帖最后由 koppie 于 2013-3-16 23:07 编辑
huangpobu 发表于 2013-3-16 15:34
我已经越来越看不懂你在说什么了。

我先说寄存器数量影响编译器调度。
说句不好听的话。
不学好architecture去优化汇编code,就如同没练九阴真经就练白骨爪。寄存器重命名可以增加寄存器数量,正如梅超风的“摧其首脑”啊
回复 支持 反对

使用道具 举报

165#
发表于 2013-3-16 22:59 | 只看该作者
huangpobu 发表于 2013-3-16 21:19
就是一个意思。编译器的优化很大程度上就是code scheduling,什么software-pipeling, code elimination都 ...

不过大家都可以用common subexpression elimination,最终的graph coloring的空间还是归结到寄存器数量上去啊。Btw,说人家是女硕士,小心告你歧视。。。
回复 支持 反对

使用道具 举报

166#
发表于 2013-3-16 23:05 | 只看该作者
PS5 发表于 2013-3-16 16:43
GPU上也是这么解决问题的?

现在的GPU也有复杂的缓存结构。不过GPU的侧重点在于带宽而不是延时。GPU数据的locality往往是不如CPU的,它通过硬件级别的多线程来掩盖内存的latency。

当然GDDR5要比DDR3性能强大,对电气性能的要求更高,所以都是焊在板子上的
回复 支持 反对

使用道具 举报

167#
发表于 2013-3-16 23:10 来自手机 | 只看该作者
koppie 发表于 2013-3-16 23:05
现在的GPU也有复杂的缓存结构。不过GPU的侧重点在于带宽而不是延时。GPU数据的locality往往是不如CPU的, ...

延时太高也不好的。都是尽可能的低延时啊!
回复 支持 反对

使用道具 举报

168#
发表于 2013-3-16 23:14 | 只看该作者
PS5 发表于 2013-3-16 23:10
延时太高也不好的。都是尽可能的低延时啊!

那当然啦,就如同钱是身外之物,但是还是越多越好啊
回复 支持 反对

使用道具 举报

169#
发表于 2013-3-16 23:21 | 只看该作者
本帖最后由 huangpobu 于 2013-3-16 23:22 编辑
largewc 发表于 2013-3-16 21:57
基本同意你的观点

我写的那个例子,我没看到资料,我个人的猜测是intel从core以后的x86的寄存器重命 ...

我是半路出家的渣渣呀,一点儿都不精通汇编 :)

我觉得我们可以合力做一些更加深入的测试,因为我之前也说了你的代码局部性太强,太容易预测了,每一次都在缓存里面,L1-cache VS 寄存器只有寥寥2~3个时钟周期的差别,其实就跟移位与乘法的区别差不多,我以前自己测试的移位和乘法运算,在i7上做个几亿次,差距也只有毫秒级别。

我一直呆在学校里面没有接触到太多的视野,能和大家讨论讨论是很好的!~
回复 支持 反对

使用道具 举报

170#
发表于 2013-3-16 23:30 | 只看该作者
koppie 发表于 2013-3-16 22:59
不过大家都可以用common subexpression elimination,最终的graph coloring的空间还是归结到寄存器数量上 ...

说实话那篇文章的基本观念我是同意的,作者在尝试论证微架构的影响远超过ISA,ISA的劣势可以通过微架构实现来弥补,我觉得这个完全是共识,主要是论证过程的问题,不过我之前也说了,跨ISA比较确实是难,没办法,作者也很贴心,后面搞了张表写出了他们实验过程中的主要问题,以后的人可以参考。

我去看了她的学术主页啊,感觉是个牛人,似乎今年暑假就硕士毕业,本科期间Paper就有好多篇了。水平肯定远超过我,我来做这个比较一定会比她差。而且他们那个研究组在架构研究上应该也是实力蛮强,扫了一眼一堆ISCA文章。。。。
回复 支持 反对

使用道具 举报

171#
发表于 2013-3-17 00:22 来自手机 | 只看该作者
koppie 发表于 2013-3-16 23:14
那当然啦,就如同钱是身外之物,但是还是越多越好啊

如果低延时不好 那为什么XB720要用ESRAM?
回复 支持 反对

使用道具 举报

172#
发表于 2013-3-17 01:21 | 只看该作者
huangpobu 发表于 2013-3-16 23:30
说实话那篇文章的基本观念我是同意的,作者在尝试论证微架构的影响远超过ISA,ISA的劣势可以通过微架构实 ...

UWisc的Architecture一直很强啊,8个faculty

回复 支持 反对

使用道具 举报

173#
发表于 2013-3-17 11:19 | 只看该作者
本帖最后由 largewc 于 2013-3-17 11:30 编辑
huangpobu 发表于 2013-3-16 23:21
我是半路出家的渣渣呀,一点儿都不精通汇编 :)

我觉得我们可以合力做一些更加深入的测试,因为我之前 ...


我觉得,局部性才能测试出绝对情况的,就是专门测试大量某些特定的指令。

x86做了足够的优化,早期移位跟乘法差距很大的,但是后期的cpu,应该做了特殊处理了。

做x86优化,典型的一个发展就是,很多以前p2需要优化的地方,到了core,都不需要了,比如说乱序,比如说移位,比如说最近的内存改为寄存器操作。

x86就是一个为了性能,可以对任何情况可以优化的设计,它为了性能可以无限堆积晶体管……。



我非常讨厌说x86时risc化的过程,显然并不完全如此,现在的编译器,显然在x86上,是cisc指令化优化得更好了,而不是更差了,没有编译器有把编译结果risc的趋势。我的观点还是,除去x86本身寄存器只有9个,比arm少7个这个先天缺点,x86是包含了所有简单指令的,arm的所有指令集对于x86只是一个子集而已,x86是完全可以risc化的,显然从编译器的结果来看,最终仍然是cisc的,因为cisc指令仍然对性能有巨大的贡献。


我同意这个文章的一个结论,就是x86就是为性能优化的一种方案,它对功耗没有那么敏感,个人用计算机,历史证明,对性能更加敏感,所以x86胜出了。现在pc陷入停滞,很大的问题就是构架无法提升,性能已经无法再大规模提升了,对于整个软件业,陷入停滞了。

性能根本没有过剩,单核性能如果能继续提升,对于整个软件业的价值仍然是巨大的。
回复 支持 反对

使用道具 举报

174#
发表于 2013-3-17 14:03 | 只看该作者
largewc 发表于 2013-3-17 11:19
我觉得,局部性才能测试出绝对情况的,就是专门测试大量某些特定的指令。

x86做了足够的优化,早期移 ...

很同意性能没有过剩。我刚刚在Mathematica上跑一个最短路径算法都卡的半死,内存都爆了。

另外我介绍一下这篇文章的一个结论吧,他们使用跨平台的GCC编译器,编译结果显示x86的平均指令长度的确比ARM短,因此他们认为编译器倾向于使用X86里面的简单指令。

在浮点测试里面,编译器才开始使用一些复杂的特殊指令,导致指令长度抬高。
回复 支持 反对

使用道具 举报

175#
发表于 2013-3-17 14:15 | 只看该作者
本帖最后由 largewc 于 2013-3-17 14:24 编辑
huangpobu 发表于 2013-3-17 14:03
很同意性能没有过剩。我刚刚在Mathematica上跑一个最短路径算法都卡的半死,内存都爆了。

另外我介绍一 ...


应该不会,x86指令短跟简单指令完全没关系。

具体说一下吧,比如说arm

ldr r0,r3,0xXX,无论这个xx是多少,这个指令都是32bit。如果xx超过一个长度,也可能会被变成两条或者三条到四条指令,之前我说过,不用thumb-2,mov 32bit最长需要三条指令。所以这个指令总长度在32bit-128bit之间。

对于x86,mov,[ebp+xx],跟据xx的长度不同,这个指令可能是两个字节,可能是三个字节,可能是四个字皆,可能是6个字节,也就是16bit-48bit之间。

比如更多的add eax,[ebp+xx],用x86则更短,单条指令16-48bit就ok了,arm需要增加额外的32bit


上面那个例子,编译器在x86上一定结果是add eax,[ebp+xx],而不是mov ebx,[ebp+xx],add eax,abx这种类似arm代码框架的结果的。

x86指令短是肯定的,因为动长指令和更丰富的指令集,如果x86也改用简单指令,其实编译结果会变长的,而不是变短。

浮点为啥x86长,是因为x86的浮点是不能操作寄存器的,只能通过图灵机的压栈出栈操作,这玩意很浪费指令长度,不过考虑到浮点的运算周期很长,所以压栈退栈对于性能的影响并不高,所以没有整数那么敏感。

具体就是x86的浮点没有 mul aaa,bbb这种操作,而是 push bbb; push aaa; mul;这种,而浮点也不能压缩,肯定至少要浪费4字节,所以动长没有意义,最后指令比arm更长是很有可能的。
回复 支持 反对

使用道具 举报

176#
发表于 2013-3-17 15:50 来自手机 | 只看该作者
GPU是几发射的?
回复 支持 反对

使用道具 举报

177#
发表于 2013-3-17 16:29 | 只看该作者
PS5 发表于 2013-3-17 15:50
GPU是几发射的?

这货相当于单发射的……甚至频率都不用太高,它只要并行数量足够多就够了。
回复 支持 反对

使用道具 举报

178#
发表于 2013-3-17 19:29 来自手机 | 只看该作者
largewc 发表于 2013-3-17 16:29
这货相当于单发射的……甚至频率都不用太高,它只要并行数量足够多就够了。

频率虽然不高
但是核心多啊
回复 支持 反对

使用道具 举报

179#
发表于 2013-3-18 02:07 | 只看该作者
koppie 发表于 2013-3-15 10:04
指令级并行ILP是有上限的,有些依赖关系是不可能完全消除的。六发射至少多一倍资源和功耗,但是性能却提高 ...

谢谢大虾指教!
回复 支持 反对

使用道具 举报

180#
发表于 2013-3-18 02:09 | 只看该作者
huangpobu 发表于 2013-3-15 09:43
ILP Wall啊

能发掘的指令级并行性越来越少,而且多发射的开销是随着发射宽度的提高而指数级增长的,90 ...

谢谢大虾指教,我原来一直错误的以为发射宽度和晶体管面积是线性关系。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-1-23 21:30

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表