У меня есть две независимые программы, написанные на C ++, которые теперь должны быть связаны во время выполнения через какой-то интерфейс. Я попытался набросать это ниже с помощью псевдокода:
program1.cpp:
program1(){
initializeProgram1();
for (i = 0; i < nIterations; i ++){
A = veryComplexParallelCalculation();
postProcessAndOutput(A);
}
finishProgram1();
}
program2.cpp:
program2(){
prepareProgram2();
for (i = 0; i < nIterations; i ++){
B = evenMoreComplexParallelCalculation();
OutputAndPostProcess(B);
}
finishProgram2();
}
Нам нужно добавить еще одну функцию в цикл program1.cpp
который использует результат program2.cpp
во время выполнения при том же значении итерации i
, Например, измененные циклы двух программ будут выглядеть так:
for (i = 0; i < nIterations; i ++){
A = veryComplexParallelCalculation();
postProcessAndOutput(A);
//iB is the iteration number from program2
getBfromProgram2(B, iB);
if (iB == i )
C = foo(A ,B);
}
И в program2.cpp
это будет что-то вроде
for (i = 0; i < nIterations; i ++){
B = evenMoreComplexParallelCalculation();
OutputAndPostProcess(B);
//send data and iteration number to program1
sendBtoProgram1(B, i);
doSomeOtherStuff();
}
Так что мне интересно, если это возможно, чтобы поймать переменную B
во время выполнения программы2 и отправьте ее в программу1. Обратите внимание, что две программы — это два огромных проекта, которые невозможно объединить!
Или, может быть, какой-то интерфейс или обертка могут быть использованы (какой-то межпрограммный MPI_Send / Recv :)? Я также думал о вводе / выводе из файла. Я бы оценил любые идеи по этому поводу.
Задача ещё не решена.
Других решений пока нет …