最近在用做一个beamnrc 做一个电离室的例子,希望计算一下沉积到电离室内空气中的能量分布。用的是远程的cluster,结果干提交不久就发现cluster 连接不上了,隔天收到管理员的信才知道cluster因为我提交的作业往cluster上频繁写个头巨大的文件,导致cluster 直接崩溃了。要知道cluster 刚刚新换的几个T的硬盘。鉴于我已经是第二次做同样的事情,(上次是一个月前,让管理员抱着病体,冒着大雪,修了两天才搞定的),管理员遂警告我已经封了我的账户,在查出原因之前不能提交作业。
这可要了我的命了,我正在干的活被迫停止了。百思不得其解啊,抓破头皮也想不出。因为这个算例已经在cluster上运行过几次了,都没出什么问题。而且这是一个在dosxyz中使用source9即 beam treatment head simulation 的源,虽然手册要求必须设置phase space file,但是beamnrc 会直接忽略这个设置,理论上应该根本不会产生phase space file,而其它的egslst,log,error, dose, pardose的文件都是k级别的小文件,就算很多进程,也不至于把cluster搞崩溃啊。
小心翼翼地跟管理员写信问有什么提示信息没有,他才告诉我他已经删除了所有的大文件,只留了一个上次崩溃的时候的文件夹,作为我犯错的罪证。
赶紧登陆查看,才发现原来是两个4G的文件,一个egslst和一个egslog,都是并行计算时产生的中间文件。这就更令人费解了,这两个文件怎么会这么大,明明应该是几K才对。打开看了一下(windows下没法看,linux下用less或vi),除了开头的初始化信息,里面赫然写满了:?
***WARNING WHILE WRITING PHASE SPACE FILE:
2**32-1 particles in file. Due to size considerations
and the fact that the counter for the number of particles in
the file cannot be > 2**32-1, no more particles will be
writtento this phase space file
大意显然是粒子个数太多,没法写入phase space file了,居然用文本整整写了4G,也亏得是linux.
但奇怪的是,却并没有phase space file。照此计算,我开了100多个线程,确实,数据量也太大了,几次计算,足以把cluster的硬盘搞崩溃。
遍查了dosxy和beam的手册也没找出个所以然来,里面信誓旦旦地说不会产生phase space file.
万能的google和baidu也没给出什么有用的提示信息。beamnrc的官网也找不到什么合适的联系email可以投诉的。
实在没办法了,决定从egs的source code打打主意,就算是最后的救命稻草了。
果然在beamnrc.mortran里面找到了这个警告信息的出处,大意是写phase space file的时候,当粒子数大于某个限值(phsp_upper_limit?=2147483647?)的时候,就往交互窗口和egslst文件输出这个警告信息。
有个这个,剩下的好办了。
把这个限值的数改小(214),重新编译一下自己的case,然后只用100个粒子就生成了一个15M的egslst文件,同时还有一个3k的phase space file.可见元凶就是它了。
接下来,懒得再找什么好的主意,直接把这些警告信息屏蔽了事,估计我现在算的也是非常多的粒子了,不能再多了。
阅读(2049) | 评论(2) | 转发(1) |