Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么C#MPI.NET无法从排名为1的进程中控制台.ReadLine?_C#_Mpi - Fatal编程技术网

为什么C#MPI.NET无法从排名为1的进程中控制台.ReadLine?

为什么C#MPI.NET无法从排名为1的进程中控制台.ReadLine?,c#,mpi,C#,Mpi,我有一个简单的MPI C#程序,其中我希望有一个排名为1的进程,要求用户提供一些输入。然而,这不起作用 我想知道为什么这不起作用?只有一个进程可以访问控制台,因为它是一个共享资源,这有点道理,但是有什么办法可以解决这个问题吗 MPI标准很少提到标准I/O(这样做是为了不限制标准对没有I/O功能的奇特体系结构的适用性),而这正是不同实现可能而且有时确实不同的地方。根据经验,所有列组的标准输出由启动器重定向和显示(如果有,例如mpiexec,mpirun,aprun,等等),但只有列组为0的进程才能

我有一个简单的MPI C#程序,其中我希望有一个排名为1的进程,要求用户提供一些输入。然而,这不起作用


我想知道为什么这不起作用?只有一个进程可以访问控制台,因为它是一个共享资源,这有点道理,但是有什么办法可以解决这个问题吗

MPI标准很少提到标准I/O(这样做是为了不限制标准对没有I/O功能的奇特体系结构的适用性),而这正是不同实现可能而且有时确实不同的地方。根据经验,所有列组的标准输出由启动器重定向和显示(如果有,例如
mpiexec
mpirun
aprun
,等等),但只有列组为0的进程才能访问标准输入。这就是为什么许多MPI程序包含类似以下内容的代码:

if (rank == 0) {
   // Read data from standard input
}
MPI_Bcast(&data, some_size, some_type, 0, MPI_COMM_WORLD);
上面是用C++编写的,但这个概念也适用于C。可以访问标准输入的列组(在这种情况下,列组0)读取用户输入,然后广播读取的数据

这仍然不是完全可移植的。MPI不要求秩0具有I/O访问权限—这只是许多流行的MPI实现的功能。便携式应用程序应查询
MPI\u COMM\u WORLD
中的
MPI\u IO
属性,从而确定是否可以使用标准I/O设备。即使在可用的情况下,标准输入也不能是集体的,并且将其连接到秩0是大多数供应商认为最合适的(但对于开放MPI,可以在运行时指定哪个秩将接收标准输入)

由于MPI主要用于在批处理模式下不使用控制台运行的应用程序,因此最好使用文件来提供输入数据