2016-11-16 6 views
1

데몬에 의해 제어되고 그들 사이에 정보를 전달할 수 있어야하는 두 개의 코드 (하나는 Fortran77에, 다른 하나는 Fortran90에 있음)를 연결해야합니다.Fortran77 및 Fortran90 응용 프로그램을 어떻게 연결합니까? MPI, PVM 또는 다른 방법?

저는 검색 중이며 두 가지 옵션이 PVM 또는 MPI입니다. 문제는 내가 따로 따로 컴파일해야한다는 것인가?

+1

아이디어에 대한 의견이 있으십니까? –

+0

또한 그들은 검토해야 할 대안입니다. 예를 들어 둘 대신 하나의 실행 파일을 사용하거나 PVM이나 MPI 대신 소켓을 사용하는 것 등이 있습니다. –

+3

"F77"코드에 대해 다른 컴파일러를 사용해야한다고 생각하는 경우, 대부분의 컴파일러가 F90/2003 +뿐만 아니라 합리적인 확장을 통해 F77을 지원하기 때문에 그러한 생각은 아마도 여기서는 이해가되지 않을 것입니다. – tim18

답변

2

MPI는 SPMD 패러다임 (단일 프로그램/다중 데이터)에 잘 적용됩니다. 2 개의 다른 바이너리를 결합하고 싶다면, MPI는 아마도 가장 좋은 도구는 아닙니다. 프로세스 간 의사 소통은 원하는 것을 더 좋아합니다. 리눅스에서는 같은 머신에 있다면 이름 파이프 (man mkfifo 참고)를 사용할 수 있으며 Fortran I/O 호출을 사용하여 데이터를 전송할 수 있습니다. 서로 다른 컴퓨터간에 통신하려는 경우 또 다른 가능성은 예를 들어 ZeroMQ을 사용하는 것이며 Fortran binding이 있습니다.

1

가장 간단한 방법은 POSIX 소켓을 사용하는 것입니다. 그러나 데이터 직렬화/직렬화를 수행해야하며 일반적으로 느립니다. 그래서 소켓 사용을 권장하지 않습니다.

기술적으로 MPI가 작동 할 수 있습니다. MPI 2.0 호환 라이브러리를 사용할 수 있다면 거기에 구현 된 클라이언트 - 서버 메커니즘을 사용할 수 있습니다. MPI_Open_portMPI_Comm_connect에 대한 설명서를보십시오. 첫 번째 것은이 이름을 어떻게 든 클라이언트에 전달해야하는 포트 이름을 제공합니다. 한 가지 옵션은 name publishing을 사용하는 것이지만 MPI 라이브러리에서 작동하지 않을 수 있습니다. 다른 옵션은 다른 메커니즘 (소켓 연결, 파일 시스템 또는 다른 어떤 것)을 사용하여 공유하는 것입니다.

사실, 라이센스 문제가없는 한이 두 앱을 별도로 컴파일해야하는 이유는 아직 없습니다. 코드를 하나의 패키지로 컴파일하면됩니다 (일부 코드는 변경 될 것으로 예상되지만 minor)를 실행 한 다음 하나의 앱으로 실행하십시오.