我一直在浏览IBM Platform Load Sharing Facility的文档,以了解它是否支持并行任务计算。
以下是我认为与此问题相关的内容,如果我的看法错误,请纠正我。
重点似乎是并行作业执行,其中计算必须被拆分并作为不同的进程运行。
然而,我们拥有的代码针对并行任务执行进行了优化。这是一些伪 C# 代码:
for(timeStep=0; timeStep < MaxTimeSteps; timeStep++)
{
Parallel.ForEach(Cube.Cells, currentCell =>
{
Compute(currentCell, Cube);
}
}
此代码将计算时间序列并在每个时间步对每个单元格执行一些计算。计算需要同一时间步内其他单元的状态来进行计算。注意Parallel.ForEach指令。
这个问题不能轻易地分解成单独运行的进程,每个进程计算一个时间步长。当前时间步需要上一个时间步的每个单元的状态。将问题进一步拆分为每个时间步中每个单元的作业,将需要同步和广泛的数据交换,无论是进程间还是通过文件或数据库系统。
另一方面,Parallel.ForEach 指令可以极大地受益于许多 CPU 的可用性。
那么,作为单个进程运行的这个问题能否从运行 LSF 的网格中受益?它对进程是否透明,以便它感知一个巨大的系统,具有许多 CPU 和一个大内存地址空间?