с ++ звонки в фортран и обратно - PullRequest
1 голос
/ 09 декабря 2011

В моем коде c ++ (my_app) мне нужно запустить внешнее приложение (app_ext), которое динамически загружает мою библиотеку (dll, так), написанную на fortran (lib_fort). Из этой библиотеки (lib_fort) мне нужно перезвонить к какому-то методу из my_app, синхронно.

Так вот так: (my_app) --launches -> (app_ext) --loads -> (lib_fort) - "звонки" -> (my_app)

app_ext не разработан мной.

Есть ли у вас какие-либо предложения, как это сделать, и что самое главное, сделать это эффективно ??

Edit:

Разъяснение. Запуск внешнего приложения (app_ext) и загрузка из него моей библиотеки (lib_fort) произойдет только один раз за выполнение всей программы. Так что эта часть не должна быть ультра-эффективной. Связь между lib_fort и my_app критична для производительности. Lib_fort должен «позвонить» my_app миллионы раз.

Все дело в эффективной межпроцессной коммуникации. Роль My_app после запуска app_ext - ждать и обслуживать «вызовы» из lib_fort. Сложность заключается в том, что решение должно работать как для распределенной, так и для совместно используемой памяти, то есть my_app и app_ext + lib_fort на одном хосте (1) и my_app и app_ext + lib_fort на разных машинах (2).

В (1) сценарии я думал о MPI, но я не уверен, возможно ли связываться с MPI между двумя разными приложениями (в отличие от одного многопроцессорного приложения MPI).

В (2) сценарии возможно какое-то межпроцессное взаимодействие с использованием общей памяти? (или, может быть, также MPI?)

1 Ответ

0 голосов
/ 09 декабря 2011

ОК, реальная проблема заключается в том, как общаться между процессами. (Забудьте MPI, это для другой проблемы.) Вы можете говорить о COM (объектная модель компонентов) или RPC (удаленный вызов процедур) или каналах, но под ним будут использоваться сокеты. IME - самая простая и эффективная вещь - самостоятельно открывать сокетные соединения и общаться по ним. Это будет ограничение скорости, и на самом деле ничего быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...