Ranger (巡游者) 超级计算机
[更新]Jiaxin发来了他用手机拍的照片,我放在了相册里
http://picasaweb.google.com/usa.chen/TACCTour
UT Austin和Sun公司合作搭建了一台有62976个核的超级计算机 Ranger (字面翻译“巡游者”,我给它起中文名为“润哲”,老婆称其为“大电脑”
),就坐落UT的pickle工程校区,在我办公室几百步远的地方。这台计算机的理论峰值为每秒504万亿浮点运算,预计今年2月一号投入正式运营,按照理论峰值排序,仅次于美国核武器安全局在LLNL的IBM蓝色基因L超级计算机(按照去年11月top500的报告其理论峰值每秒593万亿浮点运算)。
Ranger “润哲” 超级计算机。图片来自TACC网站
因为工作的关系我是UT的另一台超级计算机Lonestar(孤星,理论峰值62万亿次)的用户并且将来有可能会使用Ranger,所以这个星期4/5在UT的高性能计算中心(TACC)参加了为期两天的培训成为第一批试用Ranger的用户之一, 并进入Ranger的机房零距离接触了这台世界第二的大家伙。
先说说Ranger的硬件:
其实超级计算机并不是很多人想象的主频巨高的类似个人电脑的机器,而是一台由成千上万个CPU通过网络(infiniband, ethernet等)连接起来组成的集群(cluster)。Ranger共有3936个计算节点(node),每个节点的主板上有4个socket,每个socket上插着一个AMD的4核barcelona处理器,每个处理器有8G内存,这样Ranger总计有3936×4x4=62976个核心(每个核心的主频是1.994G)和8Gx4×3936=125TB的内存。
计算节点的主板。图片来自TACC网站。
AMD的barcelona四核和Intel的“伪”quad-core相比的不同是后者没有独立的L2二级缓存, core0/1 和 core2/3之间的通讯需要经过内存,而前者在L2和内存之间加了一个L3三级缓存从而实现了L2的独立,要知道核心对L2/L3/memory的访问速度依次递减大约一个数量级,从而barcelona的核间通信速度大为提高。不仅如此,在每个node的主板上采用了非对称的HyperTransport进行连接(CPU0和CPU3之间没有直接连接),CPU之间的通信不需要通过”local”的内存,这提高了4个CPU之间的通信速度。
世界上最大的Infiniband交换器,上方闲置的插槽预示着Ranger可以进一步扩展CPU数目。图片来自TACC网站。
对超级计算机来说,比单个CPU的主频更重要的性能指标是计算节点之间的连接速率,Ranger采用的是两台topspin270 infiniband 交换机,P2P的fat tree拓扑结构。我用PALLAS MPI(IMB) MPI-I实测的速度可以达到1GB/s以上,已经非常接近硬件的极限:
#---------------------------------------------------
# Benchmarking PingPong
# #processes = 2
# ( 62 additional processes waiting in MPI_Barrier)
#---------------------------------------------------
#bytes #repetitions t[usec] Mbytes/sec
0 1000 1.86 0.00
1 1000 2.16 0.44
2 1000 2.21 0.86
4 1000 2.29 1.67
8 1000 2.17 3.52
16 1000 2.24 6.82
32 1000 2.29 13.31
64 1000 2.36 25.87
128 1000 2.47 49.41
256 1000 2.95 82.70
512 1000 3.16 154.44
1024 1000 3.89 251.30
2048 1000 5.56 351.54
4096 1000 8.04 486.15
8192 1000 16.81 464.85
16384 1000 27.81 561.80
32768 1000 49.79 627.63
65536 640 92.94 672.44
131072 320 140.81 887.70
262144 160 240.18 1040.87
524288 80 445.92 1121.28
1048576 40 883.92 1131.32
2097152 20 2007.03 996.50
4194304 10 3950.14 1012.62
这么大的机器(占地面积大约13mx13m),需要耗费大量的电能来驱动和水冷散热,每年消耗的电费大约是一百万美元,我站在机器中间能听到巨大的噪音并感到炙热的散热气流扑面而来。机器的计算节点采用了易插拔设计,更换节点很容易,维护人员给我们演示了一块刚刚坏掉拔出来的blade,很牛逼的设计是主板中央有个蓝色按钮,按下去那么主板相应的坏掉的硬件边上的灯会亮,发现是内存挂了
其次谈谈软件:
登录Ranger的登录节点和登录其他Linux系统没什么区别。我登录时的界面:
chen@chen:~$ ra
xxxxxxx@ranger.tacc.utexas.edu's password:
Last login: Thu Jan 17 15:00:02 2008 from xxxxxxx.utexas.edu
------------------------------------------------------------------------------
Welcome to the Ranger Opteron Linux Cluster
Texas Advanced Computing Center, The University of Texas at Austin
** Unauthorized use/access is prohibited. **
------------------------------------------------------------------------------
** Welcome Early Users!
--> Ranger uses the modules program to control your user environment. To see
what packages are available, issue: "module avail"
--> Draft User Guide: http://www.tacc.utexas.edu/services/userguides/ranger/
--> Please contact your assigned early-user support liaison with any questions
--> Example SGE job scripts available in /share/doc/sge
--> ** NEW **: the OpenMPI stack is available for testing. To access,
--> issue: "module swap mvapich2 openmpi" from a default login shell.
--> ** System Maintenance **: Ranger will be down beginning Friday,
--> January 11th at 11am (Central) to prepare for final acceptance
--> testing.
--> ** normal queue is currently *closed* to all users.
------------------------------------------------------------------------------
--> ** Notes for OSU MVAPICH Team: (1/15/08): systest queue is now open
------------------------------------------------------------------------------
login4$
系统使用的是CentOS Linux系统(基于RedHat), 登录节点的一些系统信息如下:
login4$ cat /proc/version
Linux version 2.6.9-55.0.9.EL_lustre.1.6.3smp (root@master.ranger.tacc.utexas.edu) (gcc version 3.4.6 20060404 (Red Hat 3.4.6-8)) #2 SMP Mon Dec 17 18:34:43 CST 2007
login4$ cat /proc/meminfo
MemTotal: 32916688 kB
MemFree: 32062484 kB
Buffers: 91164 kB
Cached: 423900 kB
SwapCached: 0 kB
Active: 270068 kB
Inactive: 265000 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 32916688 kB
LowFree: 32062484 kB
SwapTotal: 4192824 kB
SwapFree: 4192824 kB
Dirty: 392 kB
Writeback: 0 kB
Mapped: 29768 kB
Slab: 161024 kB
CommitLimit: 20651168 kB
Committed_AS: 56416 kB
PageTables: 2292 kB
VmallocTotal: 536870911 kB
VmallocUsed: 11888 kB
VmallocChunk: 536858999 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB
系统中安装的软件组件:
login4$ module avail------------ /opt/apps/intel10_1/modulefiles ----------
acml/4.0.1 fftw3/3.1.2 hdf5/1.6.5 mvapich/0.9.9 mvapich2/1.0 netcdf/3.6.2 openmpi/1.2.4---------- /opt/apps/pgi7_1/mvapich2_1_0_1/modulefiles ----------
fftw2/2.1.5 petsc/2.3.3-complexdebug petsc/2.3.3-debug tao/1.9(default)
petsc/2.3.3(default) petsc/2.3.3-cxx slepc/2.3.3(default) tao/1.9-debug
petsc/2.3.3-complex petsc/2.3.3-cxxdebug slepc/2.3.3-debug--------- /opt/apps/pgi7_1/modulefiles ----------
acml/4.0.1 hdf5/1.6.5 mvapich-devel/0.9.9 netcdf/3.6.2
fftw3/3.1.2 mvapich/0.9.9 mvapich2/1.0 openmpi/1.2.4--------- /opt/modulefiles ----------
Linux TACC cluster java/1.4.2 java/1.5.0 java/1.6.0(default)--------- /opt/apps/modulefiles ---------
binutils-amd/070220 gsl/1.10 intel/9.1 pgi/7.1
gotoblas/1.22 intel/10.1(default) mkl/10.0 sun/12---------- /opt/apps/teragrid/modulefiles --------
apache-ant/1.6.5 globus/4.0.1(default) gsissh/4.1 teragrid-basic tgresid/2.0.0
condor/6.7.18(default) globus/4.0.5 gx-map/0.5.3.2 teragrid-dev tgresid/2.0.3(default)
condor/6.9.1 globus/4.1.3 pacman/3.20 tg-policy/0.2 tgusage/2.9
condor-g/6.7.18 globus-4.0 srb-client/3.4.1 tgproxy/0.9.1
Ranger上的编译器主要是Intel compiler(c/c++/fortran)和portland group的c/c++/fortran编译器,使用openmp和MPI(mvapich2)进行并行编程,函数库包括MKL, ACML等。由于Ranger每个节点有16个计算核和32GB内存,这就为openmp/mpi混合(hybrid)编程提供了用武之地,在第二天上午的培训课程中就包括混合并行编程的讲座和lab。
作业调度(batch system)使用的是SGE和NUMA control。
值得一提的是培训中见到了牛人Goto(数值库gotoblas的作者)。我们培训时的lab code中有一段他用C汇编写的timer程序,据说可以把测量精度提高到8个时钟周期。
其他:
感觉TACC的工作人员极度热情,有问必答,还抢着帮我扔用过的纸杯
机房的环境也很开放,打个电话过去就可以带着进入机房内部参观,放置Ranger的building没有保安,机房的墙壁是玻璃的从走廊就可以看到内部。完全是一副为人民服务的作派
并行计算还是很好玩的,等我有时间一定写篇这方面的介绍。
阅读(2184 次)

一月 19th, 2008 at 3:54 下午
太酷了
一月 19th, 2008 at 4:28 下午
回复得好快啊!
一月 19th, 2008 at 4:40 下午
因为你的饭否提醒在我的 gmail 里面跳出来了。:)
一月 19th, 2008 at 4:44 下午
一直不知道fanfou有这样的功能,我也试试.
一月 19th, 2008 at 9:10 下午
呵呵,cluster只是一种架构,并非所有的并行机都采用这种架构,尽管现在cluster是种趋势。
cluster容易实现分布式共享内存,从而系统有很好的模块性和扩展性,有利于快速构造超大型的系统。和共享内存的并行机相比,它的缺点是并行程序必须通过消息传递来实现,从而严重依赖于网络的通信会成为瓶颈,并且使开发代价大大提高。共享内存并行机上的开发可以和串行机一样,cluster上则只能用MPI之类的并行库。
一月 19th, 2008 at 9:59 下午
你说的对,MIMD(multiple instruction multiple data)模型的并行计算机按照内存模型分为shared memory和distributed memory。前者通过bus和crossbar进行通信(在Ranger的每个节点内部是共享内存的),后者通过网络通信(比如Ranger的各个节点之间)。SMP的标准之一是OpenMP,分布式编程的标准是MPI。在Ranger上可以根据物理模型的需要进行混合编程,就是在程序中嵌套使用MPI和OpenMP,这样作的可行性原因之一是Ranger每个节点有16个核和32G内存而且HyperTranport技术保证了4个CPU内存共享的有效性。
Ranger上有一个numactl工具,可以控制在每个计算单元上16个CPU的使用优先级。
一月 21st, 2008 at 8:10 下午
cool
一月 24th, 2008 at 10:31 上午
你好Hui:
很高兴看到你介绍的超级计算机,在看到一篇介绍我们国家用龙芯制造的刚刚上万亿次的超级计算机,美国已经到达504万亿次,速度差距还是很大阿。
login4$ cat /proc/meminfo
MemTotal: 32916688 kB
MemFree: 32062484 kB
这是不是单个节点,4×4核 AMD处理器,32G内存阿?这和普通的单颗CPU 4个核心有什么区别呢?
另外,这么多节点组成Cluster,是怎么样用centos搭的?能粗略讲讲么
要是在这种机器上编译软件改多爽阿,快的一塌糊涂阿
一月 24th, 2008 at 11:23 上午
我个人认为科大的KD50I还是很牛逼的,虽然和Ranger这样的计算机有很大差距,但不能这样做简单对比。毕竟KD50I是以自己有知识产权的CPU搭建起来的超级计算机,实现了从无到有的突破,而且只是一台样机。而且,我的母校是科大,当然要无条件支持
每个节点采用了4个barcelona通过hypertransport相连,比单颗CPU 4个核心多4倍核心。区别在于ranger有很多节点,节点之间有高速网路相连。具体细节看TACC的网站。
我不清楚机器是怎么搭建起来的。
编译软件的速度并不快,还没有我家的超频E6600快,因为单个CPU的频率不高,编译是串行的。至于运行程序的速度,只有并行程序才能显示其优势。
一月 26th, 2008 at 9:53 下午
可以衍生多个编译作业达到并行编译的目的,比如make -jn将生成n个编译作业。不过,如果makefile写得不规范,多个编译作业可能会互相踩踏导致make异常退出。
如果是类C语言,可以考虑distcc,就是分布式编译类C,比单纯的make -jn好用。
一月 27th, 2008 at 12:28 上午
@Sun:
谢谢你的介绍,我还是第一次听说distcc这样一个并行编译工具。
一月 31st, 2008 at 4:16 上午
AMD的处理器?
用Intel compiler(c/c++/fortran)
为什么?
一月 31st, 2008 at 11:43 上午
@cers
intel compilers 支持 amd 处理器:
http://www.intel.com/cd/software/products/asmo-na/eng/277618.htm
Systems based on the AMD Athlon64* and Opteron* processors running a 64-bit operating system are also supported by Intel compilers for Intel 64 architecture-based applications.
Ranger上装intel compiler是为了考虑兼容性,一些人的code是在旧平台上用intel编译器调用MKL的。
五月 25th, 2008 at 8:21 上午
看到了这篇,想学习OpenMP和MPI混合编程的源代码,请一定推荐一下。
五月 26th, 2008 at 10:05 下午
我对Hybrid编程没什么经验,你可以找找英文的资料。比如google
http://www.google.com/search?hl=en&q=mpi+openmp+hybrid