問題タブ [mex]
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 - MATLAB と C/C++ プログラムとのインターフェイス
こんにちは、C プログラムから MATLAB を外部ソルバーとして使用する方法を知りたいと思っていました。具体的には、私のコードでは、Ax=b の形式のいくつかの線形システムを解きたいと考えています。
逆に言うと、MATLAB ルーチンで C 関数を呼び出すには MEX ファイルを使用すると聞きましたが、Mex ファイルの使用方法もよくわかりません。
ありがとうございました
matlab - lg2cが見つかりません
いくつかの cpp および fortran ファイルから matlab 用の mex を作成しようとしています。それらはすべて適切にコンパイルされ、.obj ファイルが作成されます。しかし、リンク中にエラー lg2c not found が表示されます。
Win Vistaにmatlab 2007をインストールしました。mingw と gnumex もインストールしています。matlab の mex -setup は、lcc と VS 2003 の 2 つのコンパイラを返します。
G77 fortran コンパイラを使用しています http://www.cs.ubc.ca/~pcarbo/Compile_LBFGSB_on_Windows.txtの指示に従いました
wcf - WCF サービスの WSDL にアクセスする際のエラー: 「... 操作は、... から既にエクスポートされているメッセージ要素を参照しています...」
Web サービスに Web ブラウザーでアクセスすると奇妙な動作が発生し、生成中に例外が発生します。
これが私のシナリオです:
Web ページへのアクセス: http://localhost:10100/WCFService1.svc?wsdl
Web ページへのアクセス: http://localhost:10100/WCFService2.svc?wsdl
問題は、WCFService2.svc WSDL の出力に、WCFService2 とマージされた WCFService1 のすべての定義が含まれていることです。
さらに、以前に生成された WSDL と同じ名前のメソッドを含む別の WSDL にアクセスすると、この例外が発生します (確かに、WSDL がマージされているためです)。
また、サービス名の前に「:」が付いているコントラクトの名前が奇妙であることに気付きました: http://MyCompany.ca/:IWCFService3
「WSDLエクスポート拡張機能」で何が起こっているのか、誰かが手がかりを持っていますか?
ExceptionDetail ( IncludeExceptionDetailInFaults =true によって作成される可能性が高い) の値は次のとおり
です。
----> System.InvalidOperationException: MyCompany.IWCFService3.Import 操作は、MyCompany.IWCFService2.Import 操作から既にエクスポートされているメッセージ要素 [http://MyCompany.ca/:Import] を参照しています。メソッド名を変更するか、OperationContractAttribute の Name プロパティを使用して、いずれかの操作の名前を変更できます。または、MessageContract プログラミング モデルを使用して、要素名をより詳細に制御できます。System.ServiceModel.Description.MessageContractExporter.AddElementToSchema (XmlSchemaElement 要素、文字列 elementNs、XmlSchemaSet schemaSet) で System.ServiceModel.Description.MessageContractExporter.ExportWrappedPart (メッセージ メッセージ、文字列 elementName、文字列 elementNs、XmlSchemaSet schemaSet、
c++ - 単一の Visual Studio プロジェクトで複数の .dll ファイル (.mexw32 ファイル) をビルドする方法は?
膨大な数の MEX ファイルで構成される Matlab ライブラリを管理しています。これまで、Matlab スクリプトを使用してライブラリを構築してきましたが、ビルド プロセス全体で Microsoft Visual Studio IDE の使用を開始したいと考えています。私は次の指示でかなり遠くまで行きました:
- Visual Studio を使用した MEX ファイルのコンパイル
- Matlab 7.1+ および Visual Studio 2005
- MathWorks: Windows システムでのカスタム ビルド
ただし、これらの手順は単一の MEX ファイルでのみ機能するようです。私が抱えている問題は、単一の Visual Studio プロジェクト内で複数の .mexw32 ターゲット (または同等の .dll ターゲット) をビルドする方法ですか? MEX ファイル用に (同じソリューション内で) 別のプロジェクトを作成することは、私が検討したいオプションではありません。これらのファイルは数百に数えられます。
Matlab に慣れていない方のために説明すると、MEX ファイルは C++ で記述された拡張ファイルであり、本質的に特別な拡張子 .mexw32 を持つ .dll ファイルにコンパイルされます。これらはそれぞれ、1 つのエントリ ポイントをエクスポートしvoid mexFunction(...)
ます。私の知る限り、これらを単一の.dllにリンクすることはできません。これは私がやりたいことです。
c - Matlabのmexプログラムにより多くのメモリを与える
C mexでコンパイルされたファイルのメモリが不足しています(具体的には、を呼び出すとmxMalloc
returnが返されることがありますNULL
)。簡単な計算から、ファイルmxMalloc
には合計で約500 MBのメモリ(おそらく1 GB)が必要であると推定され、Matlabをほぼ排他的に実行する16GBのメモリを備えた64ビットLinuxマシンでファイルを実行します。それでも、かなり頻繁にmxMalloc
戻ります。NULL
これが発生する理由はいくつかあると思いますが(メモリの断片化など)、いずれにせよ、16GBのメモリマシンに500MBを要求することはそれほど多くないようです。
Matlabのヒープからメモリを要求するための呼び出しは、mxMalloc
100%確実ではないと思います(mxMalloc
要求は、OSによって直接ではなく、結局Matlabによって処理されます)。では、mexファイルの「ヒープ」サイズを増やす方法はありますか?
ありがとう
matlab - mexGetArrayPtr が期待どおりに機能しない
次の test_mex mex 関数があります。
そして、次の test.m ファイル:
- 実行すると、常に失敗し、「oopsie」が出力されます。
- グローバルを作成
a
し、mex 関数の「caller」文字列を「global」に変更すると、正常に動作します。
私は何を間違っていますか?
ノート:
- これは、正に古いバージョンの matlab です: バージョン 6.1.0.450 リリース 12.1
- mexGetArrayPtr は mexGetVariablePtr の古いバージョンであり、その引数の順序は異なります
matlab - MatlabのMEXコンパイル中にリンクする方法
私は次の形式のプログラムを作成しました。
これは、次のコマンドで正しくコンパイル、リンク、および実行されます。
「gcc44」は単にgccバージョン4.4であり、gccのいくつかのバージョンを維持するクラスター上でコンパイルされているため、このように名前が付けられています。ライブラリsundials_cvodeおよびsundials_nvecserialは、配列の構築中にいくつかの微分方程式を解く際に使用されます。
ここで、Matlabに転送して、次の形式のmexファイルをコンパイルしようとすると次のようになります。
Matlabで次のコマンドを使用してコンパイルしてみてください。
次のメッセージが表示され、リンクエラーが発生します。
どういうわけか、私は適切にリンクするための正しいフラグを与えていません。gcc44コマンドでリンクするコマンドを削除すると、同じ一連のエラー(およびさらにいくつかのエラー)が発生するため、コンパイラーにライブラリーを「認識」させていないことは間違いありません。
私の質問は:
- エラーの分析が正しい場合、正常にリンクするには、mexコンパイルコマンドにどのフラグを渡す必要がありますか?
- または、Matlab環境の外部でコンパイルおよびリンクして.mex64実行可能ファイルをコンパイルするためのgccフラグは何ですか?
- 私の分析が間違っている場合、ここからどこに行くのですか?
gcc 4.4を使用してOpenMPプログラムで単純なmexをコンパイルできたので、サポートされていないコンパイラの警告を除外したと思いますが、これらは数学ライブラリ以外のものとリンクする必要はありませんでした。また、「-fopenmp」フラグの有無にかかわらず、バージョンgccバージョン4.1.2または4.3.4でコンパイルすると、同じエラーが発生します。
以前のバージョンには表示されなかった特定のOpenMPサポートのため、最終的にはバージョン4.4が必要です。
助けてくれてありがとう。
-アンドリュー
編集:(@ KWATFORD)
そのため、引用符の外側のステートメントを使用してコマンドを試したところ、エラーが発生しました。
「-fPIC」を使用して再コンパイルするという提案については少し混乱しています。gcc44コマンドを見ると、-fPICがオプションとして表示されているためです。
彼らは-fPICでライブラリを再コンパイルすると言っていますか?
ライブラリのソースがありません。ライブラリを再コンパイルすることが提案されている場合、回避策はありますか?
「ローカルオブジェクトに対する再配置」とはどういう意味ですか?
今後ともよろしくお願いいたします。
wcf - IISでホストされているWCFでスキームHTTPSエラーに一致するベースアドレスが見つかりませんでした
https経由でWCFサービスを使用するようにほぼすべてを設定しています。IISアプリケーションが稼働しているので、ローカルホストでsvcとwsdlを読み取ることができます。そこで、Visual Studioに戻って、サービスを呼び出すことができるクライアントを作成しようとしました。ServiceReferenceを追加すると、次のエラーが発生します。
バインディングMetadataExchangeHttpsBindingを持つエンドポイントのスキームhttpsに一致するベースアドレスが見つかりませんでした。登録されているベースアドレススキームは[http]です。
組み込みの開発サーバーとIISExpressを試してみました。どちらも同じエラーを出しました。
これが私のweb.configです。
私は何が間違っているのですか?
c - Matlab mex ファイルは、そのままの C 版に比べて遅い
Matlab mex プログラムと対応する Matlab インターフェイスのない C プログラムとの速度の違いを説明 (および回避) するのに途方に暮れています。私は数値解析プログラムのプロファイリングを行ってきました:
同等の Matlab-Mex に対して gcc 4.4 でコンパイル (gcc44 を使用するように指示されています。これは現在 Matlab でサポートされているバージョンではありませんが、他の理由で必要です):
私は次のようにタイミングを実行しました:
対。
タイミングの違いは歴然です。コマンド ラインから実行されるバージョンは、平均で 5.8 秒かかります。Matlab のバージョンは 21 秒で実行されます。コンテキストとして、mex ファイルは、実行に約 26 秒かかる SimBiology ツールボックスのアルゴリズムを置き換えます。
Matlab のアルゴリズムと比較して、C と mex の両方のバージョンは、openMP への呼び出しを使用して最大 27 スレッドまで直線的にスケーリングしますが、プロファイリングの目的で、これらの呼び出しは無効化され、コメント化されています。
mex ファイルとしてコンパイルするために必要なフラグを除いて、2 つのバージョンは同じ方法でコンパイルされています。mex ファイルの左と右の引数へのすべての参照を削除しました。つまり、入力も出力もありません。プロファイリング専用です。
偉大で輝かしい Google は、位置に依存しないコードがスローダウンの原因であってはならないと通知してくれました。
どんな助けでも大歓迎です、
アンドリュー