2016-08-10 6 views
3

MATLABで書かれたコードベースの一部と、サードパーティ製のプログラムのスクリプトに使用されているLuaの別の部分がある状況です。今のところ、ファイルI/Oシステムを使用して、それらの間でのデータの交換は控えめです。これは実際には計画されていなくても、コードの実質的な部分に進化しました。Coupling LuaとMATLAB

プログラムはいくつかのLuaスクリプトが実行されるような方法で構造化されており、いくつかのMATLAB評価はいくつかのLuaが実行されるなどに基づいて行われます。シミュレーションと評価(科学的コード)を処理し、それに基づいて新しいシミュレーションを作成します。何千ものファイルやシムを処理します。

プロセスを合理化するために、データI/Oを変更したり、簡単に呼び出しを行う方法を検討し始めました。

問題を解決する方法についていくつかの意見を聞きたかったが、最適な解決策は、MATLABまたはLuaからすべてを呼び出すことができ、大規模なデータセットをより一貫性のある方法で整理することでした。

ソリューション:

  1. Luaのモジュールのバインディングを作成するために、LuaのCのAPIを使用して、C-ライブラリとしてMATLABにこれを追加します。このようにして私は目標を達成し、システムの複雑さを減らすことができればと思っています。

  2. データセット(HDF?)の交換のためのよりスマートなデータ形式と、必要な作業領域変数を読み取る関数があります。このようにして、プログラムの部分は独立したままになりますが、データ交換が解決されます。

  3. Lua/MATLAB関数用のラッパーを作成すると、より簡単に呼び出すことができます。データ交換は、関数のリターンパラメータを介して行うことができます。

  4. 提案?

+0

MATLAB MEX APIを使用すると、MATLABからC/C++にデータを渡すことができます。その逆も同様です。 –

答えて

1

私は1をお勧めします。また、たくさんのお金を費やすことに有害ではない場合は、分析のMATLAB側からC関数を生成するためにMATLAB coderを使用して、共有ライブラリとして生成されたコードをコンパイルし、インポートライブラリをLuaJIT FFIで実行し、Luaのすべてを実行します。このソリューションでは、配列索引付けに関するLuaJITのセマンティクスのおかげで、MATLABコードを変更する必要はなく、Luaコードの多くを変更する必要はありません。ソリューション1は無料ですが、2つの言語のデータ構造の間に一定のマーシャリングがあるため効率的ではありません。それはまた、インターフェイスを書く多くの仕事になります。しかしどちらのソリューションもファイルI/Oよりも効率的です。

簡単なパフォーマンスの向上として、RAMディスクまたはtmpfsを使用してファイルをメモリに保存してみましたか?