問題タブ [matlab-compiler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Cで呼び出されるmatlab関数で「グローバル静的」変数を使用する方法
こんにちは、現在 MATLAB と C でコーディングしています。MATLAB Compiler (mcc)を使用して MATLAB 関数を C 共有ライブラリにコンパイルし、C++ プログラムで共有ライブラリの関数を呼び出しました。
C++ で呼び出されたときに MATLAB 関数間でデータを共有するためにグローバル変数を宣言できますか?
正確には、関数matlabA()
と関数matlabB()
が matlab にあり、mcc コンパイラを使用して c++ 共有ライブラリにコンパイルされている場合、cppA()
およびでcppB()
変数をグローバルとして宣言するだけで変数を共有できますか?matlabA()
matlabB()
機能していないように見えますが、関数間で変数を共有するにはどうすればよいですか?
ありがとう!
MATLAB
C++
c# - C# ラッパー使用中の Matlab 例外
matlab に実装されたクラスタリング アルゴリズムの dll バージョンを作成しました。
また、入力データの作業サンプルをダウンロードし(Toy Problem データを使用しています)、それを読み取り、Matlab の既知のデータ型に変換しています。
ただし、アルゴリズムを実行すると、次のエラーが発生します。
... MWMCR::EvaluateFunction エラー ... 連結されている行列の次元が一致していません。エラー => apclusterSparse.m の 178 行目。
これが私のコードです:(すみません?)
ありがとう。
matlab - スタンドアロンの matlab アプリケーションの「メモリ不足」エラー - メモリの断片化
アプリケーションをスタンドアロンの Matlab 実行可能ファイルとしてクライアントに配信する必要があります。コードには、複数の cell 配列を内部的に作成する関数への一連の呼び出しが含まれています。
私の問題は、ユーザー負荷の増加に応じてこの関数の呼び出し数が増加すると、メモリ不足エラーが発生することです。ワークスペース変数はループ数から独立しているため、これは低レベルのメモリ断片化であると思います。
hereで述べたように、Matlab を終了して再起動することが、現時点でこのタイプのメモリ不足エラーの唯一の解決策です。
私の質問は、データを保存し、メモリ不足エラーが発生した場合 (またはそのようなエラーの可能性が高いと予測された場合) にそれ自体を終了して再起動するために、スタンドアロン アプリケーションにそのようなメカニズムをどのように実装できるかということです。
利用可能なベストプラクティスはありますか?
ありがとう。
matlab - ネットワーク上の Visual C++ ランタイム
社内に展開しようとしている MATLAB 実行可能ファイルがありますが、多くのものをインストールする必要はありません。実行可能ファイルはネットワークの場所に保存されているので、実行してもらいたいです。ネットワーク上に MATLAB Compiler Runtime (MCR) をセットアップしましたが、アプリケーションが正しくインストールされていないという Visual C++ Runtime (VC++R) の問題が発生しています。VC++R をネットワーク上の場所にインストールする方法はありますか。(人々は何かをインストールする権限を持っていません。そのため、MCR と VC++R をインストールする必要はありません。)
performance - matlab でコンパイルしたスタンドアロン アプリケーションの実行速度が、Matlab から実行した場合よりも遅いのはなぜですか?
だから、ここに私のセットアップがあります:
- Matlab (2011b 64 ビット) で記述された GUI を備えたアプリケーションがあります。
- 関連する ?このアプリケーションは、VC10 および nvcc (cuda コンパイラ) によってコンパイルされた c++ で記述された dll を呼び出します。
- 「mbuild -setup」を実行するときに VC10 でコンパイルするように Matlab を構成します。
- デフォルト設定を使用して、Matlab Compiler ツールボックスでこのアプリケーションをコンパイルします。コンパイル行は次のとおりです。
mcc -o ICEM -W main:ICEM -T link:exe -d C:\Users\Ernest\Documents\Matlab\icem\ICEM\src -w enable:specified_file_mismatch -w enable:repeated_file -w enable:switch_ignored -w enable :missing_lib_sentinel -w enable:demo_license -v C:\Users\Ernest\Documents\Matlab\icem\Main.m
明確にするために、問題はアプリケーションの起動にかかる時間ではありません。MCRをロードする必要があるため、起動に時間がかかることは承知しています。この問題は、アプリケーションの実行中ずっと、何らかの計算を伴う表示関数の実行中に発生しますが、どのように/なぜ遅くなる可能性があるのか わかりません。
これがどこから来たのか考えていますか?
c++ - MCR を初期化してロードする方法
MATLAB から生成された C++ 共有ライブラリを Win32 コンソール アプリケーションに組み込みました。MATLAB プログラムの実行には MATLAB で 2 ~ 3 秒かかりますが、コンソール アプリケーションの実行には 11 ~ 12 秒かかります。これは MCR の起動時間が原因であると読みました。MCR が初期化された後は、matlab でかかる時間と同じ時間がかかるはずです。では、コンソール アプリケーションの実行に 2 ~ 3 秒かかるように、MCR を常に RAM またはキャッシュにロードまたは初期化するにはどうすればよいでしょうか。MCR が継続的にロードされるように、無限ループを作成する必要がありますか?? 私は Windows OS で作業しており、PHP からコンソール アプリケーションを呼び出しています。そのためのチュートリアルやリンクはありますか?
MCR_CACHE_ROOT をフォルダー (一時的ではない) を指す環境変数として追加しました。私のコンソールアプリケーションコードは次のとおりです。
上記の行にコメントしましたが、それは速くなるが運が悪いと考えています。何か助けはありますか?
matlab - ツールキットを使用する Mex または Compile (mcc) Matlab 関数
環境:
- Matlab R2012a (必要に応じて他のユーザーにアクセスできます)
- すべてのツールボックス/コンパイラがインストールされています
- Ubuntu 12.04 64 ビットおよび/または Windows 7 64 ビット
私は、Matlab で書かれたソフトウェア パッケージのソースを使用しています (残念ながら独自仕様のため、コード例はありません... 申し訳ありません)。1 つの関数で、Control System Toolbox と Signal Processing Toolbox を簡単に使用しています。
すべてのツールボックスがインストールされているため、パーソナル コンピューターでコードを実行しても問題ありませんが、これら 2 つのツールボックスを使用して関数だけをコンパイル (mex または mcc) したいと考えています。もちろん、目標は、これらのツールボックスのないマシンでソフトウェアを実行し、残りのコードを変更できるようにすることです。
matlab によると、ほぼすべてのツールボックスを使用するコードをコンパイルしても問題ありません。mcc コンパイルをサポートするツールボックスのリストは次のとおりです: http://www.mathworks.com/products/compiler/supported/compiler_support.html
問題は、mcc-x
が関数の mex-ed バージョンを作成するオプションを使用してコンパイルすることを許可しなくなったため、C 実行可能ファイルを作成することを余儀なくされたということです (多分? できればそうしないでください)。この特定の関数は、大きな行列をパラメーターとして取り (コマンド ライン引数として記述するのは実際的ではありません)、セル配列の構造体を返します。
これを回避する唯一の方法 (私が今見ているように) は、引数 (大きな行列) をハード ドライブのバイナリ .mat ファイルに書き込み、コンパイルされた C バイナリに引数を読み込ませ、アルゴリズムを実行し、最後に保存することです。親スレッドがメモリにロードし直すための別の .mat の戻り値。
これはまったく実用的ではないようです。別の提案をいただければ幸いです。ここで不明な点があればお知らせください。前もって感謝します!
[編集 1] codegen パッケージはtf.m をサポートしていません。これは可能であるように思われます (そして、以前はmex -x
オプションで可能でした) が、私は途方に暮れています。どんな提案でも大歓迎です!