最早接触FAH是在高中时候写一篇关于分布式计算的乌七八糟的文章。那个时候算的叫一个慢啊。。。
对于FAH就不做介绍了,大家可以到http://folding.stanford.edu/Chinese/Main进行更详细的了解,以及http://fahwiki.net/,更为详细深入的介绍。
严格来说,FAH并不是一个理论化学或者计算化学软件包,更确切地说,FAH是一个分布式计算平台,类似于BOINC;真正的算法部分则采用了GROMACS分子动力学软件包和AMBER分子力场。之前还有基于Tinker和QMD量子化学的计算程序,但是现在都不采用了。不妨从整个计算过程来探讨这个问题。主程序fah6本身并不负责计算,准确来说fah6只是一个调度程序,负责收发数据、平衡负载以及进程管理。fah6有一个重要的功能,就是根据当前运行的平台下载相应的计算内核。举例来说,如果是系统采用多核心处理器或者多处理器,fah6就会自动下载FahCore_a2作为计算核心。FahCore_a2是一个采用了MPI实现并行的计算内核,以GROMACS作为计算方法。类似的内核还有很多,在http://fahwiki.net/index.php/Cores可以看到一份完整的列表,例如FahCore_11是采用Nvidia CUDA技术使用GPU运行的内核。
我们可以看一眼FAH网站上的统计数据(http://fah-web.stanford.edu/cgi-bin/main.py?qtype=osstats),截止当地时间2008年12月24日05:08:54。
OS Type | Current TFLOPS* | Active CPUs | Total CPUs |
Windows | 243 | 255033 | 2349894 |
Mac OS X/PowerPC | 5 | 6582 | 123083 |
Mac OS X/Intel | 28 | 8872 | 72696 |
Linux | 45 | 26181 | 350540 |
ATI GPU | 993 | 9031 | 23771 |
NVIDIA GPU | 1753 | 15932 | 57854 |
PLAYSTATION®3 | 1553 | 55076 | 707720 |
Total | 4620 | 376707 | 3685558 |
我们可以计算一下X86处理器(我们假设几乎所有Windows系统都是基于X86构架的处理器)和GPU在进行这样的分子动力学计算时的平均效率:
X86平台计算效率:0.00102688 TFLOPS/CPU (其中Mac OS X/Intel平台达到了0.0031560 TFLOPS)
GPU平台计算效率:0.110003 TFLOPS(NVIDIA:0.110030 TFLOPS;ATI:0.109955 TFLOPS)
二者相差:107倍
这个数据是软件的计算核心反馈的真实数据,而非峰值或理论值。因此NVIDIA官方所声称的250倍性能应该并非虚言。根据个人经验,分子力学以及分子动力学中大量的矢量运算很可能是造成这种性能差异的主要原因。
最后说说Macintosh平台上的安装吧。推荐去http://www.stanford.edu/group/pandegroup/folding/release/FAH6.02-OSX-Intel-Console.tgz下载Console版本(http://www.stanford.edu/group/pandegroup/folding/console-userguide.html 有一份比较详细的参数说明),手动建立~/Library/Folding@home目录,将fah6和mpiexec解压缩至该目录下,然后:
Armadillo:Folding@home Armadillo$ cd ~/Library/Folding@home/
Armadillo:Folding@home Armadillo$ ./fah6 -configonly -smp
接下来根据自己需要进行一些设置。为了使fah6能够自动运行,我们需要将启动脚本加入launchd中:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>HOME</key>
<string>/Users/Armadillo</string>
</dict>
<key>Label</key>
<string>edu.stanford.folding.client</string>
<key>OnDemand</key>
<false/>
<key>ProgramArguments</key>
<array>
<string>/Users/Armadillo/Library/Folding@home/fah6</string>
<string>-smp</string>
<string>-verbosity</string>
<string>9</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceDescription</key>
<string>Folding@home client</string>
<key>Umask</key>
<integer>22</integer>
<key>UserName</key>
<string>Armadillo</string>
</dict>
</plist>
将上面这些文本保存为/Library/LaunchDaemons/Folding@home.plist,你也可以在ProgramArguments中加入更多参数,但是注意不得包含空格,分成两个string即可。接下来就可以启动FAH了:
launchctl load -w /Library/LaunchDaemons/Folding@home.plist
如果执行ps -ef|grep fh6以及ps -ef|grep FahCore能看到相应的进程就证明已经开始计算了。可以通过执行fah6 -queueinfo查看队列情况,在unitinfo.txt中查看计算进度,在FAHlog.txt中查看输出信息。相应的计算log在work文件夹下。