我想要一些资源链接,这些资源提供了用于高性能计算的脚本(最好是在 python 中)代码。我正在寻找可以的示例代码和示例,
(1) 根据为输入值提供的范围或通过执行输入值的组合自动创建各种输入文件(例如:可以在量子力学模拟中切换的原子位置)
(2) 根据提供的 no 输入值创建批量提交文件(例如:PBS)。提供的节点/处理器。
(3) 比较标准和非标准(仅列)格式的输出文件,并根据需要创建绘图。
我想要一些资源链接,这些资源提供了用于高性能计算的脚本(最好是在 python 中)代码。我正在寻找可以的示例代码和示例,
(1) 根据为输入值提供的范围或通过执行输入值的组合自动创建各种输入文件(例如:可以在量子力学模拟中切换的原子位置)
(2) 根据提供的 no 输入值创建批量提交文件(例如:PBS)。提供的节点/处理器。
(3) 比较标准和非标准(仅列)格式的输出文件,并根据需要创建绘图。
就个人而言,我会将问题分解为单独的部分,Python 部分(如果这是您选择的武器)进行文件处理等和 PBS 作业启动脚本部分。我肯定会为 PBS 部分使用 bash 脚本,因为听起来您想(轻松)使用 PBS 变量并利用 PBS 为您提供的以多种方式启动。然后,您的 PBS 脚本使用这些选项从 bash 脚本中调用您的 Python 代码。
我使用的是作业数组,它允许 PBS 变量在 $PBS_ARRAYID 环境变量中为每个作业赋予不同的值。
我还使用了 -v 选项来传递我自己的用户定义的变量名。这样做的好处是您可以在启动时定义变量。
您还可以使用作业名称本身来启动带有特定参数的代码。这样做的好处是结果日志文件也将具有作业名称。
查看您正在处理的内容的最快方法是使用“env”启动一个作业,您可以在输出中看到您正在处理的内容。这样做是值得的,因为我发现您得到的结果取决于批处理系统以及作业的启动方式。另请注意,文档(man qsub)所说的选项“应该”做什么和它“实际”做什么通常是不同的(因此需要反复试验)。
这是我如何启动 OpenFOAM 以适应提供的核心/节点数量的示例。它创建了一个配置文件,OpenFOAM 解释该配置文件用于拆分计算。我使用jobname来配置模拟的速度。
#!/bin/bash
#PBS -N vespa_LES
#PBS -l walltime=48:00:00
#PBS -l nodes=2:ppn=10,pmem=4000MB
#PBS -m abe
cd $PBS_O_WORKDIR
echo Here are the Vespa variables used
cat ./vespa_variables
echo Running with $PBS_NP processors across $PBS_NUM_NODES nodes. $PBS_NUM_PPN procs per node
rm ./vespa_env
echo "vespa_env_procs $PBS_NP;" >> ./vespa_env
echo "vespa_env_num_nodes $PBS_NUM_NODES;" >> ./vespa_env
echo "vespa_env_num_ppn $PBS_NUM_PPN;" >> ./vespa_env
echo "vespa_env_jobname $PBS_JOBNAME;" >> ./vespa_env
cat ./vespa_env
module purge
module load openfoam/2.2.2
. $foamDotFile
./Allclean
./Allrun
上面的简短版本是 PBS 提供了一些辅助变量,我将使用这些变量来简化使用相同代码启动各种作业。
UNCORE 可能符合要求吗?它不仅仅是一种脚本语言,因为它试图为用户提供一个统一的计算界面,所以不需要担心接受任务的集群类型等(即不需要手动调整 PBS 或其他排队格式)。它还提供了一个图形化的工作流程,可以帮助数值实验的可复制性。
这将需要集群管理员在服务器端安装软件,但我认为来自 UNICORE 的人通常很乐意提供帮助。
也就是说,我倾向于回归我的旧习惯,即结合 awk 和 bash 脚本对给定任务非常具体的一次性解决方案。
我的一个朋友即将完成这本书,其中涵盖了许多优化 python 脚本以实现高性能速度的方法: