我有一些研究相关的问题.
目前我已经完成了基于MPI(特别是使用openmpi 6.3)的结构骨架框架的实现.框架工作应该在单台机器上使用.现在,我将它与其他先前的骨架实现(例如scandium,fast-flow,..)进行比较
我注意到的一件事是我的实现的性能不如其他实现.我认为这是因为,我的实现基于MPI(因此需要匹配发送和接收操作的双向通信),而我正在比较的其他实现基于共享内存.(...但我仍然没有很好的解释来证明这一点,这是我的问题的一部分)
这两个类别的完成时间有很大差异.
今天我也介绍了配置open-mpi for shared memory => openmpi-sm
我的问题出现了.
1,为共享内存配置MPI意味着什么?我的意思是MPI进程存在于自己的虚拟内存中; 究竟是什么标志就像在下面的命令一样呢?(我认为在MPI中,每次通信都是通过显式传递消息,进程之间没有共享内存).
shell$ mpirun --mca btl self,sm,tcp -np 16 ./a.out
Run Code Online (Sandbox Code Playgroud)
第二,为什么MPI的性能与为共享内存开发的其他骨架实现相比要差得多?至少我也在一台多核机器上运行它.(我想这是因为其他实现使用了线程并行编程,但我没有令人信服的解释).
任何建议或进一步讨论都是非常受欢迎的.
如果我需要进一步澄清我的问题,请告诉我.
感谢您的时间!
parallel-processing message-passing mpi shared-memory openmpi
有没有办法将ISO文件的内容(里面的所有目录和文件)提取到本地路径中的给定目录?特别是在Windows环境中使用Java.
你有什么建议的图书馆吗?或者有任何工作要做吗?
谢谢.
我有一个加密算法(AES)接受转换为数组字节的文件并加密它.由于我要处理非常大的文件,JVM可能会耗尽内存.我计划读取多个字节数组中的文件,每个数组包含文件的某些部分.然后我迭代地提供算法.最后,我将它们合并以生成加密文件.
所以我的问题是:有没有办法将文件逐个读取到多个字节数组?
我以为我可以使用以下内容将文件读取为字节数组:
IOUtils.toByteArray(InputStream input).
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令将数组拆分为多个字节:
Arrays.copyOfRange()
Run Code Online (Sandbox Code Playgroud)
但我担心读取文件的代码ByteArray会使JVM内存不足.
我正在寻找一种高效的单方面通信库,可用于高效地实现 RDMA。
目前,我研究了 MPI-2 实现,例如 MPICH2 和 MVAPICH2(使用 RDMA 的基于 InfiniBand 架构的 MPI-2 实现)。
MVAPICH2 有很多我正在寻找的功能,不幸的是,我无法使用它,因为我目前在我的大学无法访问 InfiniBand 架构。
所以我真正想要的是,是否有任何其他库(不是必需的 MPI 实现变体)可以被认为是有效的,可以减少通信进程之间的开销(例如:避免集合协议中的握手,从而减轻目标进程的开销)。
我也很感激任何可以帮助我做一些不同的事情而不是寻找一个合适的库的建议。
谢谢。
我有一个单例类,必须使用接口将它作为服务公开给其他应用程序。
例如:
public class MySingleSingletonClass{
private static final MySingleSingletonClass THIS_INSTANCE = new MySingleSingletonClass();
private MySingleSingletonClass() {}
public static MySingleSingletonClass getInstance(){
return THIS_INSTANCE;
}
//do other staff
public int methodA(){
//some service
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想通过接口公开此类的所有服务,这是我的第一次尝试:
public interface MyServiceInterface{
int methodA();
MyServiceInterface getInstanceThroughService();
}
Run Code Online (Sandbox Code Playgroud)
当MySingleSingletonClass实现此接口时:
public class MySingleSingletonClass implements MyServiceInterface{
private static final MySingleSingletonClass THIS_INSTANCE = new MySingleSingletonClass();
private MySingleSingletonClass() {}
public static MySingleSingletonClass getInstance(){
return THIS_INSTANCE;
}
@Override
public int methodA(){
//some service
}
@Override
MyServiceInterface getInstanceThroughService(){
return MySingleSingletonClass.getInstance();
}
} …Run Code Online (Sandbox Code Playgroud) 我所理解的研究MPI规范是MPI发送原语是指要发送的数据所指向的内存位置(或发送缓冲区),并将该位置的数据作为消息传递给另一个进程.
虽然在另一个进程内存地址中,给定进程的虚拟地址确实没有意义; 可以发送指针指向的数据,例如void指针,因为MPI会以任何方式将数据本身作为消息传递
例如,以下工作正常:
// Sender Side.
int x = 100;
void* snd;
MPI_Send(snd,4,MPI_BYTE,1,0,MPI_COMM_WORLD);
// Receiver Side.
void* rcv;
MPI_Recv(rcv, 4,MPI_BYTE,0,0,MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)
但是当我在结构中添加void*snd并尝试发送结构时,这将不会成功.
我不明白为什么前面的例子正常工作但不是以下.
在这里,我定义了一个typedef结构,然后从中创建一个MPI_DataType.以上相同的解释也应该成功,遗憾的是它不起作用.
这是代码:
#include "mpi.h"
#include<stdio.h>
int main(int args, char *argv[])
{
int rank, source =0, tag=1, dest=1;
int bloackCount[2];
MPI_Init(&args, &argv);
typedef struct {
void* data;
int tag;
} data;
data myData;
MPI_Datatype structType, oldType[2];
MPI_Status stat;
/* MPI_Aint type used to idetify byte displacement of each block (array)*/
MPI_Aint offsets[2], extent;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
offsets[0] …Run Code Online (Sandbox Code Playgroud) 请考虑以下Java脚本代码:
var myObj = function ( ) {
var x = 0;
return {
addup: function (y) {
x += y;
},
getX: function ( ) {
return x;
}
}
}();
Run Code Online (Sandbox Code Playgroud)
此函数返回一个具有两种方法的对象(如果我没有错).
现在,有两个问题:
谢谢,