搜索
查看: 1958|回复: 5
收起左侧

深入Barcelona

[复制链接]
foxhound
发表于 2007-7-3 14:27:22 | 显示全部楼层 |阅读模式
Barcelona的核心面积为283mm2 使用了4亿6千3百万个晶体管。它使用了四个核心以及共享2M L3 Cache并采用65nm制程。最新公布的消息是他的频率将会在2.2-2.8GHz之间,电压将会是1.15v,最大共耗是95W。

系统构架
    K8的系统构架已经相当优秀了,对于四路服务器平台来说,它确实实x86的当家老大了。但是K8却有两个致命的问题,缺少四核心的处理器以及八路服务器系统的表现十分糟糕。
    Barcelona所一直强调的卖点就是他的四核心处理器,把他拿来和Intel的Xeon 53xx系列来比较。Xeon 53xx(Clovertown),事实上是有两个双核心的Woodcrest组成的,我们把它称作MCP(Multi-chip package),两个处理器之间的通信是通过FSB进行的,这比通过芯片之间的总线和Cache要好得多。而在AMD方面,他们选择了共享L3缓存通信的方法,其共享的L3缓存可以被四个核心所使用。下面的这张图就是一张Revision F的Opteron Barcelona以及Intel即将推出的3GHz的Clovertown 之间的构架比较图。


Barcelona的设计构架选择了完全整合的MPU。特别是在对一些不能依靠Cache带来性能的带宽敏感性的负载中,采用单一的芯片的设计可以比增加Cache让CPU发挥出更好的性能,比如在HPC或者数据挖掘方面。但是,任何设计上的考量都不可能不作均衡的考量。首先,将CPU做成全整合芯片必须在工程的起步阶段就决定。使用MCP的方法可以大大的节省开发时间,而且可以在已有的设计上作少许的修改已实现目标。最重要的是,这些改进可以在日后的设计周期中进行。而单一芯片的产量是一个棘手的问题,因为更大的核心面积意味着满足要求的晶圆数量越少,并且晶圆上的一个小问题都会带来核心比较大的麻烦。另一方面,MCP的结构又会带来频率上的问题,因为整个CPU要运行在同一个频率下,所有的四个核心都必须超过CPU所要求的频率而且在功耗方面还应当尽可能的低。最重要的是,必须要从设计技术上保证MPU中相对快一些的核心按照相对慢一些的核心的速度运行,当然这样的功耗也会小一些。

    AMD的市场部门在宣传的时候总是会采用“原生”、“真”这样的字眼来修饰他们的四核心,而且这样的宣传相当的有效,可惜AMD的决策者过了很久才意识到这一点。虽然Intel的Clovertown也是四核心的,操作系统依然会把Clovertown认做一个四核心处理器,当然它也拥有比双核心的MPU高很多的性能,但是必须承认,在大多数情况下AMD所说的原生四核心的性能会更加强劲一些。

    就Barcelona来说,这样的高集成度的核心带来的好处已经被I/O带宽所证明了。仔细的观察Barcelona中的内存控制器,最大的变化就是每一个控制器都支持独立的64B的数据交换带宽,这要比多个控制器之间共享128B的数据交换带宽要先进一些。由于DDR2的爆发值只有32B,这样的改进可以提高命令的执行效率,但是当时使用DDR3内存的时候,命令的执行效率将会下降,因为DDR3的爆发值将会使两倍的64B。每一个控制器还支持DRAM中的打开页的独立操作,当然这需要基于一定模式的预测。预测单元利用per-bank存取历史以及Bank之间的页面存取来决定是保持页面的打开来提高性能还是关闭页面以节省功耗。最后,Barcelona还引入了数据毒药(data poisoning),他确保如果ECC可以侦测出两个比特的错误,那么这个错误只影响包含它并第一次使用它的进程,而不会导致整个系统的崩溃。

    当Revision F的Opteron开始支持DDR2的时候,在性能方面只有些许的提高的。要更好的发掘DDR2现有的带宽优势,就需要更加长的请求和响应队列。这些改变没有在Revision F中实现,现在AMD将它应用在了Barcelona上了。它在内存控制器中引入了一个16-20通路的写缓冲,这样写操作可以被缓冲、延迟而且不需要消耗总线资源。最后,内存控制器支持DRAM 预取单元,他们共享写缓冲并且可以侦测有用或者无用的调取。服务器版本的Barcelona将可以支持667Mhz的寄存器内存(Registered DIMM服务器专用),而桌面版本将会稍微快一些,支持800MHz的DDR2内存。

    Barcelona还加入了第四条HyperTransport管道(Lane)用于处理器之间的通信和其他的I/O设备。拥有了这第四个管道,系统制造商可以制造出全连接的四路平台,这样可以有效的降低传输的延迟,因为任意两个处理器之间的通信都有一个直接的管道。在系统中的每一个节点都可以拥有一个I/O Hub。最初,每个连接(Link)的运行速度都将是2GT/s并且他们兼容HT3.0,在未来新系统中的他们的速率将会达到5.2GT/s。HT3.0将会规定连接的宽度以及频率来节省功耗。HT也会为降低延迟做一些改变,K8构架取cache line(一次被传输的字节)到L1 D或者L2 中必须要探测系统,并且等待结果。在特殊的情况下甚至要探测内存和其他所有的Cache,只有得到了所有的响应,才可以使用所取的cache line。而Barcelona是只要察看cache line是处在M还是O的状态(意味着内存中有一个错误拷贝Dirty Copy),而不需要等待来自内存的探测结果,减少了数据交换的或延迟,新的协议还加入了重试机制来挽回在高频率状态下的瞬时错误。

    HT 3.0还加入了一种叫做’unganging’或者通道分离(lane-splitting)的特性。每一个HT 3.0通道实际上都是一个单方向为16bit的通道,而且可以分裂成两个独立的8bit的连接。这对于连接I/O设备相当的有用,因为目前还很少有系统的I/O设备可以用完8GB/s的带宽。即便是8 SAS硬盘以及两个10GBE卡也无法消耗掉这样的带宽。所以AMD准备将这项技术用在8路全连接的服务器中的。上一代基于Opteron的8路系统系统在一些公开的测试中表现出的性能非常一般(主要是SAP 2以及SPECjbb2005),当Barcelona组成的8路平台拥有强劲的性能的时候不知道有多少终端用户会有这样的诉求。Sun和Fujisu现在正在销售他们的8路服务器,而HP和Dell早在2003年就放弃了这样的计划。
取指阶段

    初期的Barcelona是相当的复杂,而且已经完全的脱离了K8的设计,就像在下面的这第二张图片里面显示的一样,每一个周期,Barcelona从L1I cache(L1指令缓存)取32B的指令到预译码/取指(pick buffer)缓冲器中。而上一代的K8每个周期却只能取16B,这和Intel的Core2的数目一样。取指令的宽度的增加主要是由于SIMD和64bit指令越来越长而且越来越常用,取指的长度变长也有助于平衡核心之间的负载。因此,Barcelona的预译码以及取指缓冲器被放大到了至少32B。虽然显得有些大,但是按照K8的预译码缓冲器是取指宽度的1.5倍来算,那么48B的缓冲器在Barcelona上可能才是大小合适的。

    这看起来Barcelona的首要目标是服务器领域,在这个领域中64bit模式非常普遍。另一方面,Core2在设计的时候考虑得更多的普通的用户,当然这些人也是购买电脑的主力军。目前的情况时,即使到现在64位的操作系统离我们的桌面系统还是十分的遥远,特别是在笔记本电脑上。在这些市场上,Barcelona的这些改进不会带来多大的好处而且似乎还增加了成本,倒是一件出力不讨好的事情。



K8使用分支预测选择子来选择使用bi-modal预测单元还是全局预测单元。Bi-modal预测单元和分支选择子都是存储在指令Cache的ECC位上作为预译码信息的。全局预测单元则联合了相对指令指针(relative instruction pointer RIP)作为条件分支以及追踪至少8个分支的全局历史寄存器来索引包含2 bit计数器(saturating counters)16K通路的预测表格。如果分支和预测的一样,则目标必须预测在2K通路目标矩阵内。当Call指令确定目标而且更新返回地址堆栈的时候,则间接分支在矩阵中使用单一目标。分支目标地址计算器(branch target address calculator BTAC)检查这些目标的相关分支,然后耗费两个周期纠正目标矩阵的预测,返回值使用12通路的返回地址堆栈来预测。

    在分支预测方面Bacelona并没有作全新的设计,只是在K8的基础上作了一些精度方面的改进。Barcelona的全局历史寄存器现在追踪最后12个分支而不是K8的最后8个。Barcelona还加入了全新的间接预测单元,专门用来控制多重目标的分支(例如程序设计中的switch case语句)。间接分支预测最先是由Intel的Prescott构架以及之后的PentiumM引入的。单一目标的间接分支依然使用现有的2K通路分支目标缓冲器,当一个间接目标预测失败的时候,512通路分支预测单元可以分配一个通路。目标的地址被全局分支历史寄存器和分支RIP所索引,因此考虑到间接分支存取所使用的路径以及分支自身的地址。最终,返回地址堆栈应当拥有48通路。

评分

参与人数 1经验 +2 收起 理由
hoo9 + 2 版区有你更精彩: )

查看全部评分

foxhound
 楼主| 发表于 2007-7-3 14:28:22 | 显示全部楼层
译码阶段
      
    X86的指令的译码是相当的复杂的,指令的长度不固定,而且由于前缀的缘故,操作码的位置不可能在第一时间获知。为了简化译码,K8和Barcelona都使用了预译码信息来标注出指令的结尾(同时也是下一个指令的开始),但是当指令第一次被取入Cache的时候是不包含预译码信息的。指令Cache包含有可以在每个周期扫描4B的指令流,并且加入预译码信息预译码器,并且这些预译码信息和每条指令一起都存储在L1I和L2以及L3 Cache的ECC位中。因为几乎没有写入的指令流,使用预取内存以及奇偶校验位用来防止指令寄存器和ECC中的错误的方法对于代码来说已经不是必须的了。就像之前提到的,这个预译码信息也包含分支选择和其他相关信息。
      
    就像Pentium Pro一样,K 7/8拥有类RISC内部指令集,每条指令由多个微操作组成。每一个微操作都相当的复杂,都可以包含一个读取,一个计算,以及一个存储动作。任意一个指令从取指缓冲器送到微代码引擎中被译码成3个或者更多的微操作(称为向量路径指令 VectorPath instruction)。举个例子,任意一个字符串操作指令都被微代码化。微代码单元可以在每个周期发出3个为操作,直到他将一个x86指令完全译码。当微代码引擎正在译码,传统的译码单元将会空闲,两个不能进行同步操作。大多数的x86指令被译码成1-2个微操作,这个也被称为直接路径指令(DirectPath instruction)。
      
    在Barcelona中,128bit的SSE计算被译码成一个微操作,而不是两个。这样可以使用余下的乱序工具工作更有效率,比如重排序缓冲器以及保留站。对于用来补充成新的SIMD(单指令数据流)的整数 浮点数的转换以及128bit的读取指令也是同样被译码成为一个微操作。但是,128bit的存操作还是会译码为两个微操作。另外一个改变就是AMD加入了非SSE指令的内存存取,这样可以更多地使用包代码来取指令。
      
    在译码阶段,指令将要通过Barcelona的一个全新的硬件,旁路堆栈优化单元(Sidebank stack optimizer)。X86指令集支持硬件的堆栈,并且可以直接利用每一个线程的堆栈使用PUSH POP CALL RET等指令。在K8中需要生成一个微操作让这些指令修改栈指针(ESP),更糟糕的是这些指令需要通过冗长的电路,这对于乱序工具来说不是一个好消息。
      
    AMD引入旁路堆栈优化单元来消除指令流中像K8那样的堆栈操作,而是采用类似PentiumM中的专用堆栈引擎。两个MPU都使用两个寄存器ESPO和ESPD(Intel的技术术语)。ESPO是堆栈指针的原始数据,并且存放在乱序单元的一个寄存器中,而增量寄存器(delta register)ESPD用来在开始的时候追踪ESP的变化。因为ESP是一个结构寄存器,所以必须要用一个特殊的微操作用来从ESPO和ESPD中将值恢复到ESP里,在Barcelona中这样的修正操作已经被减少了。当一个堆栈修改指令被侦测到,这个指令就被修改ESPD的专用ALU移出和执行。这就意味着许多的堆栈操作可以被并行的执行,这样就解放了保留站,重排序缓冲器以及普通的ALU,让他们从事其他的任务。不过这需要在高负载的情况下才能体现出优势,AMD和Intel认为这样的改进可以消除大约5%的微操作。

乱序引擎(Out-of-Order) 重命名和时序
      
    首先需要说明的是K8和Barcelona的乱序控制逻辑相对于Core2来说要复杂许多。不像Intel的微构架,拥有分布式时序单元/备用站的K8和Barcelona分离了整数和浮点集群(Cluster)。Core的微构架,只有单一的执行集群,以及统一的时序单元/保留站和并联的发布端口(multiple issue port)。追溯到Athlon和P6的时代,这也是造成AMD的处理器在浮点运算方面十分强大的一个主要原因。



作为译码单元一部分的包缓冲器负责发送3个一组的微操作到重排序缓冲器(re-order buffer ROB)。但是,72个指令重排缓冲器实际上并不拥有72个独立的入口,而是只有24个入口,每个入口含有3个通道(lane)。重排序缓冲器包含有重命名寄存器,保证每个操作都可以执行。
      
    要确保ROB被完全的利用,每个周期只有一个精确含有三个指令的组被送入ROB。因此,包缓冲器的作用是双重的,他把三个指令合并成一个组,让他们可以进入ROB。重要的是包缓冲器可以在通道之间移动指令,这样可以避免阻塞的下游保留站,或者发现发布限制。举个例子,浮点数或者整数的乘法必须在第一个通道中,而此时LZCOUNT必须在第三个通道,每一个通道与流水线中其下游的特定的保留站保持通信,并且一旦一个指令进入了ROB的特定的通道,它将不能被移动。因此包缓冲器也是指令更换通道的最后一次机会。
      
    从这点上来说,浮点数以及整数/内存的指令的路径是分离的。整数的再往下将流向整数存储器和寄存器(Integer Future File and Register File IFFRF)。IFFRF包含的40个寄存器被分成完全独立的三个部分。第一个部分,构架寄存存储器,它包含有16x64 bit非推测寄存器(non-speculative registers),用于识别x86-64指令集。一旦指令被重复执行,他只能修改结构寄存存储器,而且没有例外。推测型指令代替对Future File的读写,它包含16个结构指令最新的推测状态。微代码则使用最后8个中间结果寄存器。在分支预测失败或者意外的情况下,管道必须反转,而且结构寄存存储器覆盖Future File的内容。
      
    指令从ROB流出到适当的时序单元。整数集群包含三个保留站(或者时序单元),每一个都帮定ROB中的特殊通道并且保存8条带有源操作数的指令。源操作数可以来自Future File。
浮点集群
      
    控制浮点指令的方法完全不同。与整数操作方法不同,他不是直接输送到保留站中,而是首先送入FP Mapper以及重命名单元中。X86指令集最让人诟病的地方就是它的浮点操作是基于堆栈的,FP Mapper用单一的寄存存储器(flat register file)来替代堆栈操作,所以重命名就发生了。
      
    在重命名单元中,每个周期有最多3个FP指令从120通路的FP寄存存储器中赋值给目标寄存器。存储器的容量完全可以满足重命名最大72条活动指令的需求。和FP寄存存储器一起还有两个矩阵,结构和Future File矩阵。在Barcelona中,结构存储矩阵包含指向120个FP寄存器中44个寄存器的指针,这些寄存器包含了非推测的(non-speculative)状态:8个用于x87/MMX,8个微代码的中间结果寄存器以及8x128bit的XMM寄存器。之前,K8将XMM寄存器设置为16x64bit,现在改变为128bit作为原始的数据格式。同样的Future File也包含有指向44个重命名寄存器的指针,这些寄存器包含有FP寄存器存储单元中最新的推测性的数值。
      
    一旦微操作被重命名,他们可能被送到三个FP时序单元。每个保留站存有至多12条带有源操作所数的指令。就像整数时序单元一样,操作数可以来自FP寄存存储器也可以是前向网络(forwarding network),并且每个时序单元都和ROB中特定的通道邦定。
foxhound
 楼主| 发表于 2007-7-3 14:31:26 | 显示全部楼层
乱序引擎 执行单元

        一旦操作进入了时序单元,他们就等待,直到源操作数准备完毕。然后,时序单元将会把最老的一个指令和与之相关的操作数发送到适当的功能单元。在Barcelona的整数功能单元和K8相比几乎没什么变化。K8和Barcelona中的三个整数ALU可以执行大多数的指令并且在最大程度上达到均衡。有两个例外的情况是,只有第一个ALU拥有整数乘法器,并且第三个被用来做POPCOUNT以及其他相类似的指令。



Bacelona的整数单元的第一个真正的改变是整数的除法的延迟已经变得不确定,而是根据操作数发生变化。IDIV指令被一个迭代算法所控制。在K8中,每一个IDIV都要经过固定次数的迭代,而不管实际需要多少次迭代才能获得结果。32bit的除法需要耗费42个周期,而完整的64bit的除法更是需要74个周期来计算。相比较,Barcelona的迭代只执行最小的次数来获得精确的结果。Barcelona在执行除法时延迟被缩短到了23个周期加上被除数绝对值的有效位数,而无符号数的除法大概还要快10个周期。另外,第三个ALU管道用来控制新的LZCOUNT/POPCOUNT指令。
  
        Barcelona中的FPU也发生了一点点的变化,他们被加宽到128比特,这样SSE指令可以在一次通过FPU中执行,而之前是两次通过64bit的FPU,就像PentiumM一样。同样的,存取单元和FMISC单元现在可以读取128bit宽度的数据以提高了SSE的性能。
  
        AMD和Intel的为构架之间一个重要的不同点在于,AMD将他们的地址发生单元(address generation units AGUs)分离出了存取单元(load store units LSUs)。就像我们早前提到的,这是因为,AMD的微操作可以包含读取,操作,以及存储操作。所以至少应当有和AGUs数目相同的ALUs。而Intel的微操作减少了内存存取的计算,所以AGUs被整合进入了存取管道。不同的微指令造成了不同的AGU的安置。
  
        Barcelona和Core构架的另外一个不同点是AMD的ALUs是均衡的而且可以几乎所有的整数指令,而Core2的ALUs并不是均衡的并且有一些限制。为了让AMD的分布式时序单元和指令分组工作在最优状态,必须让每一个通道都大致相同。这样清晰的构架就平衡了性能与功耗以及降低所控制复杂度与提高执行复杂度之间的问题。复制三个全特征ALU需要更大的核心面积和消耗更多的功耗,但是在某些极端的情况下确实可以提高性能,而且使得ROB和时序单元的设计更为简单。
内存系统
  
       Barcelona中的内存管道和Cache完全进行了重新的设计。他们都拥有了一定的乱序能力以及每个管道可以在每个周期执行128bit 读取或者64bit存储操作。K8和Barcelona的内存操作都是从整数时序单元开始,并且被派遣到AGU和12通路的LSU1。地址的产生需要消耗一个周期,其结果将送到数据存取等待单元LSU1中。



Barcelona和K8的内存操作是不一样的。在K8中,内存的存取是按照顺序的,所以一旦读取操作没有通过,那么他就阻塞住了下面所有的读取和存储的操作。Barcelona提供了非推测内存存取的重排序的功能,他保证内存的操作可以乱序的进行。
  
       在发送阶段,读取操作的低12地址被用来和之前的存储操作的地址比较。如果他们不相同,然后读取则可以在存储之前执行,如果他们相同,则有可能出现一个读存一体的操作。这就相当于P6种内存的拥有的重排序的能力。一个读取操作可以排在另一个读取操作的前面,当而且仅当存取不同的地址的时候,一个读取操作可以移到一个存储的前面。而Core2,由于没有预测和覆盖机制,在不知道地址的情况下不可能让一个读取操作超越存储操作。
  
       在12个通路的LSU1,最早的操作是使用L1 DTLB将虚拟地址转换成物理地址。L1 DTLB现在包含管理1G的页面的8个入口,这对于数据库或者HPC这样的高负载的应用来说好处明显。任何在L1 DTLB中的找不到的都会到L2 DTLB中查找。在任意一个读取和存储联合操作中,一旦物理地址被找到,两个微操作可以在每个周期从Cache中探测(存储操作的情况下)或者读取(读取操作的情况下)。一个周期执行两个128bit读取操作的能力对于HPC来说是有巨大帮助的, 一旦读取或者存储指令被侦测到了Cache那么他就被移动到LSU2中去。
  
       LSU2控制着内存管线中最复杂的部分。它使用调整时序和侦测必要的结构来解决所有的Cache或者TLB失配的问题。如果出现Cache失配的情况,搜索将会扩展到L2  L3或者内存。而在TLB失配的情况下会转到拥有页表L2 TLB,或者主内存。LSU2中也存储有存储指令,他们并不被允许去修改Cache直到最终确认无误。因为所有的存储指令都存放在LSU2中,他也做读取存储转换。注意,存储依然是64bit宽的,因为两个入口用来检测一个完整的128bit的SSE写。这是指令序列的一个小小的退步,特别是在设计到内存中数据复制进行同等数量的读和写操作的时候。但是送的趋势还是在大多数的应用程序中,读操作是写操作的两倍还要多一点。
  
       64KB的L1D Cahce是两路的,拥有64byte的通道以及3个周期的存取时间。他对于L2 Cahce使用回写的策略,这样可以排除L1.数据进出L1D Cache的路径也被加宽到了256bit(128bit传输128bit接收)。所以一个64byte的通道可以在4个周期内传送完毕。而在K8中,L2 Cache是每个核心私有的。L2的容量也减半为512KB,但是通道的大小和数量依然保持64B和16路。
  
       Barcelona中的L3 Cache是一个全新的单元。共享的2M L3 Cache是由32路64B通道组成的。AMD的技术文档也暗示他可以升级到8M的L3 Cache。L3 Cache是专门设计用来做数据共享的。它继承了AMD传统Cache的三项改变。第一,独占最大化,当然也并不全是这样,如果一个通道将L3 Cache的数据输送到L1D Cache的时候,如果Cache通道是共享的或者似乎是被共享的,那么他将保留在L3中,复制在完全完全独占中是不会发生的。取指Cache通道如果含有代码或者代码之前就曾被共享过,那么他就会被共享。第二,L3 Cache的推出策略也被更改了,在K8中,当一个数据从内存送到了Cache中,pseudo-least便是用算法将最老的管线从Cache中收回。而在Barcelona中的L3,替代算法被改变成偏重共享收回非共享的通道。最后,由于L3有四个核心共同共享的,所以需要采用一个叫做round-robin的算法来解决共享公正的问题,他在每个周期给予四个核心中的一个核心一次存取的机会。L3 Cache的延迟目前还没有相关的资料披露,但是这个数值一定和北桥以及核心频率有关系。
  
       Barcelona在内存管道方面的最后一个进步是预取。每一个核心都有8个数据预取(整个CPU一共有32个)他们存在于L1D Cache中。在K8里,与取得结果是存放在L2当中的,Barcelona的指令预取单元扩展到2个取指单元可以读取任意地址,而在之前的K8中一个被限制只能取奇数地址一个取普通地址。
电路技术 节能以及其他
  
       从电路的角度来看,Barcelona相对于K8的进化是天翻地覆的。Barcelona的工作电压非常的宽泛,从0.8-1.4V。而且,目前所使用的双和心四核心不通,Barcelona中的每一个核心都拥有自己的时钟系统(包括PLL)以及电网。每一个核心的电压和频率相对于其他的核心以及其他非核心区域来说是独立的,这样便可以在低电压低频率的情况下有效的控制功耗。为了支持AMD的这样独立时钟的设计,异步动态FIFO(先进先出)缓冲器被用来在各个核心以及南北桥/L3 Cache之间通信。这些FIFO缓冲器可以接受任何的频率的变化,但是数据的延迟却取决于分配和频率的异同,这也就是为什么L3的延迟是可变的。北桥和L3 Cache构成了核心的75%并且独立于四个核心共享电压和频率,这对于移动设备来说是一项必须的措施。之前,北桥和电压是被跟着在处理器上走的,所以带有整合显卡的系统不可能降低电压和频率来节省电力。除去睡眠状态,北桥和处理器的电压和频率应当低于AMD的平均功耗,这样有助于在移动市场上的发展。

wyrmboy
发表于 2007-7-3 16:28:44 | 显示全部楼层
现在除了网络节点服务器这种高负荷应用,一般人平时应用没什么会被CPU卡住了~
foxhound
 楼主| 发表于 2007-7-3 19:35:45 | 显示全部楼层
原帖由 wyrmboy 于 2007-7-3 16:28 发表
现在除了网络节点服务器这种高负荷应用,一般人平时应用没什么会被CPU卡住了~



我跑模拟器就经常被卡住~~~
夏春秋
发表于 2007-7-3 20:45:17 | 显示全部楼层
用大蜘蛛扫描上G的压缩文件,不知道4核的CPU扛不扛得住
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛|卡饭乐购| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 苏ICP备07004770号 ) GMT+8, 2019-11-14 14:42 , Processed in 0.090869 second(s), 19 queries .

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