现在云计算这个概念似乎更为热门一些.
最早的云产品, 云应用, 应该是无线电广播吧?
你看不见它在哪里, 但是就是能服务一堆人, 是吧.
现在的云计算也是啊.
你没有必要知道到底是哪一台机器、哪一个主板的上的哪一颗处理器给你了.
他们只给你一个key, 一个IP.
类似于听广播给你的频率,
然后就可以享用自己的资源了.
高性能计算, 高性能并行计算,
这两个差异不大.
和普通的单机相比,
可能在于强调,
多处理器核心, 比如上千个处理器核心;
大内存, 比如一个核心配备至少4GB, 甚至是16GB内存;
高并发I/O, 无论是内存I/O还是磁盘I/O, 带宽都足够高, 比如保证一颗处理器独享8个内存通道, 磁盘读写带宽高达40GB/s等等.
常见的计算化学和计算材料类的程序,
是一个主任务, 需要分好多步骤来做循环,
每一个循环可以切分为好多个小循环来做,
这些小循环之间, 并非相互独立, 而是要彼此交换数据.
分为1000个核心, 就需要1000个读写操作, 写内存或者写硬盘.
任何一个进程死掉, 或者任何一台机器死机, 计算基本死翘翘.
这种是计算化学 计算材料中常见的 多机器并行计算.
一般需要高并发I/O支持.
这类计算, 应该是单任务多核心多机器并行计算吧.
还有一种计算呢,
比如要计算10000个轨迹.
这些轨迹呢, 相互没啥关系.
我只要求完成10000个轨迹后,
然后汇总分析就可了.
比如每条轨迹需要4个核心来计算.
我只需向系统报告, 我提交了10000个计算, 每一个需要4个核心.
然后调度系统就会自动处理了.
这种计算, 基本不涉及通过网络的数据交换,
设计的好, 所有读写都可以限定在本机器操作,
整体读写压力很低的.
现在很多商用的云计算, 搞定这类计算, 没有任何压力.
这应该归类为比如多任务并发本地处理.
云计算, 仅仅是火起来的一个概念而已.
举个例子,
经常要做轨迹计算, 大量的轨迹.
比如动辄就算10万个.
每一个轨迹仅用一个核心跑 效率最佳.
不可能买100台机器, 编号1~100,
然后不停的找机器, 排布计算任务吧?
那么自己做一套并行计算集群,
就是一个典型的私有化的云计算啊.
自己不用费心记录哪些计算在哪些机器上,
也不用费心记忆每台奇迹的硬件规格.
调试为集群, 用户看到的就是“一台机器”,
这个平台上, 所有的资源都放在一个大池子里, 比如是一个cpu pool.
干活的时候, 只要喊一句, 给我资源, ----> 对应于qsub XXX, bsub XXX之类的操作.
剩下的, 单机怎么弄的, 这里还是怎么弄.
系统会自动记录, XX计算在YY机器上完成的, 几点完成的.
如果同时只能运行200个4核心计算,
那么剩下的会自动等待, 一旦有空闲资源出来, 立刻自动加载.
有了这套自动化, 就不用大半夜爬起来看, 有没有资源啊, 是否加载计算啊.
也会避免机器过载.
可以显著降低使用成本, 提高机器运行效率.
用不着大半夜起来了, 排队的计算会在有资源空出的时候, 自动加载.
有一个概念要纠正.
排队, 是为了提高资源利用效率, 而不是把事情搞慢.
如果很有钱, 可以买一万台机器呀,
就不用排队呀.
所有的计算, 一上来都是立即加载.
用调度系统排队,
不就是因为当前资源不足,
为了最大限度提升机器利用效率,
而采取的一种最佳的资源调度方式嘛.
我见过一个学生,
在一台56核心的机器上,
无任何调度系统,
自己弄VASP计算.
可能是新手,
不晓得什么是计算开始了, 什么事计算结束了, 或者什么是计算在运行.
就不停地 mpirun -np 56 vasp_std &
学生可能认为, 运行了提交指令, 应该有反馈呀. 怎么没有呀.
然后就不停重复操作.
然后, 发现机器越来越慢, 指令行卡的没法用了.
我看了一眼, 机器负载, load average, 2800多.
这玩意, 没死机, 系统真厉害呀.
商用的云计算,
无非就是多了, 灾备, 高可用保证, 冗余备份之类而已.
有些高可用, 可能是个笑话.
比如近期B站宕机一小时多; 一年前某个不存在的视频网站也宕机了好久.
高可用保证, 硬件成本挺高的,
一般的高性能计算, 都不会配置的.
高性能计算, 要想性能发挥的好,
准则就是, 尽量做到, X@node1 + X@node2 的计算效率接近于(X+X)@node1 or (X+X)@node2.
这对于 单任务多核心多节点并行尤为重要.
对于 并发多任务本地处理, 只要保证本地I/O性能就万事大吉了.
非计算机科班出身, 以上言论可能有偏差, 敬请谅解.
|