我对mex端点有几个问题.
在旧版Web服务中,我们使用wsdl创建代理.WSDL公开Web服务的元数据.在wcf中,另一个术语是mex端点,它也暴露了元数据,但wsdl仍然存在于wcf中.我是wcf的新手,我对此感到困惑difference between wsdl & mex endpoint
?
是什么意思httpGetEnabled="false" or httpGetEnabled="true"
?
如果我确定httpGetEnabled="false"
会发生什么?是否意味着客户端无法从IDE添加服务引用?但是,如果我设置httpGetEnabled="false"
,并看到客户端可以添加服务引用.什么httpGetEnabled
设置确实十分混乱.
一个人说
MEX和WSDL是两种不同的方案,可以告诉潜在客户您的服务结构.因此,您可以选择将服务合同公开为(MEX)或WSDL.
如果上述说法属实,请告诉我何时使用MEX以及何时使用 WSDL?
如何禁用mex并仅通过WSDL公开我的服务?
WSDL support all bidning like wshttp,wsdualhttp or tcp etc...
如果可能,请详细讨论wsdl&mex.
你说
5. How can I disable mex and expose my service only through WSDL?
Do not specifiy a mex endpoint in your config and use httpGetEnabled.
Run Code Online (Sandbox Code Playgroud)
你是否意味着在配置中应该没有与mex端点相关的条目,而httpgetenable看起来如下所示?
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/SampleService?wsdl"/>
Run Code Online (Sandbox Code Playgroud)
你说
WSDL通常通过http或https get url公开,您无法真正配置(例如出于安全限制或向后兼容性).MEX端点通过可配置端点公开元数据,并且可以使用不同类型的传输,例如TCP或HTTP,以及不同类型的安全机制.
你说mex是可配置的,但是wsdl不是.你什么意思mex is configurable
?请讨论mex支持的配置类型以及配置方式.
如果我设置httpGetEnabled="false" then the …
我在matlab中心发布了这个,但没有得到任何回复所以我想我会转发到这里.
我最近在Matlab中编写了一个简单的例程,它在for循环中使用FFT; FFT主导了计算.我在mex中编写了相同的例程仅用于实验目的,它调用了FFTW 3.3库.事实证明,对于非常大的数组,matlab例程比mex例程运行得更快(大约快两倍).mex例程使用智慧并执行相同的FFT计算.我也知道matlab使用FFTW,但它们的版本是否可能稍微优化一下?我甚至使用了FFTW_EXHAUSTIVE标志,它对大型数组的速度仍然是MATLAB的两倍.此外,我确保我使用的matlab是单线程的"-singleCompThread"标志,我使用的mex文件不在调试模式.只是好奇,如果是这种情况 - 或者如果有一些优化,matlab正在使用我不知道的引擎盖.谢谢.
这是mex部分:
void class_cg_toeplitz::analysis() {
// This method computes CG iterations using FFTs
// Check for wisdom
if(fftw_import_wisdom_from_filename("cd.wis") == 0) {
mexPrintf("wisdom not loaded.\n");
} else {
mexPrintf("wisdom loaded.\n");
}
// Set FFTW Plan - use interleaved FFTW
fftw_plan plan_forward_d_buffer;
fftw_plan plan_forward_A_vec;
fftw_plan plan_backward_Ad_buffer;
fftw_complex *A_vec_fft;
fftw_complex *d_buffer_fft;
A_vec_fft = fftw_alloc_complex(n);
d_buffer_fft = fftw_alloc_complex(n);
// CREATE MASTER PLAN - Do this on an empty vector as creating a plane
// with FFTW_MEASURE will erase the …
Run Code Online (Sandbox Code Playgroud) 我试图将Python 2.6嵌入到MATLAB(7.12)中.我想嵌入一个用C编写的mex文件.这对于使用标量的小型简单示例很有用.但是,如果导入Numpy(1.6.1),MATLAB崩溃了.我说无论如何,因为我已经尝试了许多方法来加载numpy库,包括
在python模块(.py)中:
from numpy import *
Run Code Online (Sandbox Code Playgroud)随着PyRun_SimpleString
在MEX文件:
PyRun_SimpleString(“from numpy import *”);
Run Code Online (Sandbox Code Playgroud)调用numpy函数Py_oBject_CallObject
:
pOut = PyObject_CallObject(pFunc, pArgs);
Run Code Online (Sandbox Code Playgroud)最初,我认为这可能是将Numpy嵌入C中的问题.但是,当嵌入在使用Visual Studio 2005 C编译器的/ MD(多线程)开关的命令行编译的简单C文件中时,Numpy工作正常.接下来,我想我只需要在MATLAB中更改make文件以包含/ MD开关.没有这样的运气,mexopts.bat与/ MD开关编译.我还手动注释了Numpy init模块中的行,以找出崩溃的MATLAB.似乎加载任何扩展名为pyd的文件会导致MATLAB崩溃.在NumPy中加载的第一个这样的文件是multiarray.pyd.MATLAB文档描述了如何使用Visual Studio调试mex文件,并在下面放置了错误消息.在这一点上,我知道问题是pyd的内存问题和MATLAB的一些冲突.有趣的是,我可以在MATLAB中使用系统命令来启动使用numpy的python中的进程,并且不会生成错误.我将在MATLAB的错误消息下面粘贴,然后在可视化工作室中粘贴MATLAB崩溃的过程中的DEBUG输出.但是,我并没有粘贴整个事情,因为第一次机会的例外列表很长.有没有解决这个集成问题的建议?
MATLAB error
Matlab has encountered an internal problem and needs to close
MATLAB crash file:C:\Users\pml355\AppData\Local\Temp\matlab_crash_dump.3484-1:
------------------------------------------------------------------------
Segmentation violation detected at Tue Oct 18 12:19:03 2011
------------------------------------------------------------------------
Configuration:
Crash Decoding : Disabled
Default Encoding: windows-1252
MATLAB License : 163857
MATLAB Root : C:\Program Files\MATLAB\R2011a
MATLAB Version : 7.12.0.635 (R2011a)
Operating System: …
Run Code Online (Sandbox Code Playgroud) 我无法解释(并避免)Matlab mex程序与没有Matlab接口的相应C程序之间的速度差异.我一直在分析数值分析程序:
int main(){
Well_optimized_code();
}
Run Code Online (Sandbox Code Playgroud)
使用gcc 4.4针对Matlab-Mex等效编译(指向使用gcc44,这不是Matlab当前支持的版本,但出于其他原因需要):
void mexFunction(int nlhs,mxArray* plhs[], int nrhs, const mxArray* prhs[]){
Well_optimized_code(); //literally the exact same code
}
Run Code Online (Sandbox Code Playgroud)
我执行的时间如下:
$ time ./C_version
Run Code Online (Sandbox Code Playgroud)
与
>> tic; mex_version(); toc
Run Code Online (Sandbox Code Playgroud)
时间上的差异是惊人的.从命令行运行的版本平均需要5.8秒.Matlab中的版本在21秒内运行.对于上下文,mex文件替换了SimBiology工具箱中的算法,该算法大约需要26秒才能运行.
与Matlab的算法相比,C和mex版本都使用对openMP的调用线性扩展到27个线程,但为了进行性能分析,这些调用已被禁用并注释掉.
这两个版本以相同的方式编译,除了作为mex文件编译的必要标志:-fPIC --shared -lmex -DMATLAB_MEX_FILE应用于mex编译/链接.我删除了对mex文件的左右参数的所有引用.也就是说它不需要输入也没有输出,它仅用于分析.
伟大而光荣的谷歌告诉我,与位置无关的代码不应该是经济放缓的源头,除此之外我不知所措.
任何帮助将不胜感激,
安德鲁
由于以下错误,我无法编译任何MATLAB MEX代码:
In file included from /Applications/MATLAB_R2013a.app/extern/include/mex.h:58:
In file included from /Applications/MATLAB_R2013a.app/extern/include/matrix.h:294:
/Applications/MATLAB_R2013a.app/extern/include/tmwtypes.h:819:9: error: unknown type name 'char16_t'
typedef char16_t CHAR16_T;
Run Code Online (Sandbox Code Playgroud)
据我记忆,在我的机器上唯一改变的是Xcode更新到版本5.1(5B130a).
目前在MATLAB中编译MEX代码的任何修复?
[在带有Apple LLVM 5.1版的OS 10.9.2上运行(clang-503.0.38)(基于LLVM 3.4svn)]
我已经获得了一个在MATLAB R2011a上运行的项目.因为那里有几个.c文件 - 我需要将GCC设置为该项目的MEX编译器.但是,我似乎无法找到有关如何设置它的任何解释.我已经尝试了一个名为gnumex的脚本程序 - 但它失败了(可能是为旧版本的MATLAB设置的).
不知道如何设置它?
我正在尝试编写一些mex代码,但使用gbd在控制台上调试它很痛苦.是否可以使用Eclipse或Matlab的GUI?如果这些不是可行的方法,那么编写提供良好调试功能的mex代码的最佳方法是什么?
我有一个包含函数库的Visual Studio 2010解决方案,我希望能够将MATLAB用作此库的几个可能的前端之一.因此,我希望Visual Studio在构建解决方案时自动生成一个mex文件,而不必将所有构建选项和路径导出到mexopts.bat并打开MATLAB从那里构建文件.我已经看到了几个类似的建议,例如在这些帖子中:
Matlab 7.1+和Visual Studio 2005
如何使用CMake和Visual Studio 2010(64位)构建MATLAB R2011a(64位)mex文件?
但是,它们看起来有点过时(引用不再存在的文件)或使用外部工具(例如CMake).有没有人知道如何在Visual Studio(2010及更新版本)中设置一个新项目(在现有解决方案中),该项目将为当代MATLAB版本构建一个mex文件?
我有一个Mex函数(c ++函数,你可以从Matlab调用),我已经编写了,我想用valgrind/kcachegrind来描述它.如果你直接运行一个c ++程序,我知道如何使用valgrind/kcachegrind,但如果我从Matlab调用c ++程序,有没有办法进行这种分析?
现在mex in MATLAB 2012a只正式支持gcc 4.4.6,但我想使用gcc 4.7,风险自负.现在,如果我直接用mex编译一些东西,它会抱怨
/usr/lib/gcc/i686-linux-gnu/4.7/cc1plus:
/usr/local/MATLAB/R2012a/sys/os/glnx86/libstdc++.so.6:
version `GLIBCXX_3.4.15' not found
(required by /usr/lib/i386-linux-gnu/libppl_c.so.4)
/usr/lib/gcc/i686-linux-gnu/4.7/cc1plus:
/usr/local/MATLAB/R2012a/sys/os/glnx86/libstdc++.so.6:
version `GLIBCXX_3.4.15' not found
(required by /usr/lib/i386-linux-gnu/libppl.so.9)
Run Code Online (Sandbox Code Playgroud)
通过strings /usr/lib/i386-linux-gnu/libstdc++.so.6 | grep 'GLIBCXX'
本人确认libstdc++.so.6
具有版本字符串.我检查mexopts.sh
并修改了该变量$RPATH
并$MLIBS
在该脚本中,但它不起作用.所以如果我不使用符号链接,我在哪里可以配置libstdc++.so.6
mex使用的路径?谢谢.