设计用于执行HPC计算的java GUI

设计用于执行HPC计算的java GUI,java,swing,mpi,hpc,Java,Swing,Mpi,Hpc,很抱歉,如果这个问题太开放或不合适,但这是因为我对一些技术/软件缺乏了解,我完全迷路了。我有一个项目,其中我有一个现有的JavaSwingGUI,它在本地机器上运行MPI作业。但是,它需要支持在HPC集群上运行MPI作业(假设linux集群具有ssh访问)。更具体地说,我需要执行的主要后端可执行文件(linux和windows)使用一个非常简单的主从系统,其中所有相关输出仅由主节点执行。目前,要在多台机器上运行我的后端可执行文件,我只需要将所有必要的文件复制到机器上(假设没有共享文件空间),并按

很抱歉,如果这个问题太开放或不合适,但这是因为我对一些技术/软件缺乏了解,我完全迷路了。我有一个项目,其中我有一个现有的JavaSwingGUI,它在本地机器上运行MPI作业。但是,它需要支持在HPC集群上运行MPI作业(假设linux集群具有ssh访问)。更具体地说,我需要执行的主要后端可执行文件(linux和windows)使用一个非常简单的主从系统,其中所有相关输出仅由主节点执行。目前,要在多台机器上运行我的后端可执行文件,我只需要将所有必要的文件复制到机器上(假设没有共享文件空间),并按照惯例调用“mpiexec”或“mpirun”。主设备生成的输出需要由GUI读入(或部分读入)

我看到的主要问题是:在哪里运行GUI?几个选项:

  • 本地机器—潜在的问题是需要将数据从集群读回本地机器(同时读取集群进程的stdout/stderr),以便向用户显示当前进度
  • 登录节点-占用宝贵资源的明显问题,在许多情况下将被禁止
  • 计算节点-听起来相当狡猾-尤其是如果集群有一个排队系统(slurm、sun grid等)!也可能被禁止
在这三个选项中,第一个似乎是最合理的,也似乎最不可能让任何HPC管理员感到不安,但也是最难实现的!该设置存在多个相关问题:

  • 将数据从集群传递到本地计算机-因为我们使用的是集群-根据定义,我们可能会生成大量数据,用户希望看到这些数据的至少一部分!还有,应该如何做到这一点?我可以看到如何使用jsch或类似工具通过ssh在远程机器上执行命令,但如果我当前登录到远程机器上,如何将信息传回本地机器
  • 在本地计算机中显示后端的stdout/stderr。与上面类似
  • 处理单个集群的特殊方面——我看到的唯一方法是允许用户编写自定义slurm脚本或类似的脚本
  • 如何检测后端计算是否已完成/失败-此问题与用户编写的任何自定义slurm脚本交互
希望从上面可以清楚地看出我很困惑。我已经看过ApacheCamel、jsch、ganemede ssh、ApacheMina、netty、slurm、Sun Grid、OpenMPI、mpich、pmi,但是有太多的信息,我想我需要寻求一些帮助和建议。如果您对这些问题有任何意见,我将不胜感激

谢谢

================================

编辑
实际上,我刚刚遇到了这个问题:这似乎表明,如果集群允许“交互式”模式的作业,那么您可以从计算节点运行GUI。然而,我对此不太了解,也不知道这是否常见。如果您能就这方面发表意见,我将不胜感激。

您可以利用所示的方法:a用于在a的后台执行命令,而命令的输出则显示在适当的组件中。在这个例子中,
ls-l
将变成
sshusername@host“ls-l”
。根据需要使用。

您可能会发现检查Eclipse并行工具平台()的体系结构很有帮助。谢谢您的输入。我一定会看一看。嗨,谢谢你的回答。然而,我已经知道如何使用ProcessBuilder执行系统命令——这就是我在本地机器上执行MPI作业所做的。我还知道,我可以按照您描述的方式使用ssh登录,或者使用JSch或类似的库。困难在于设计出一个可靠、健壮的系统,以扩展到在HPC集群上运行MPI作业;我猜没有普遍的解决办法。另见潜力。如果集群在一个已建立的TCP端口(例如JDBC++)上公开了一个众所周知的服务,那么您可以通过SSH转发端口。我的JavaGUI只处理MPI后端的执行,而不是执行MPI通信本身。关于没有通用解决方案,您可能是对的-也许我需要仔细定义我的范围-但是,这意味着知道足够多来定义范围!:(