Tag: mex

在mex文件matlab中使用magma_dysevd

我尝试在matlab中编写使用magma库,所以我基本上编写了一个mex函数,它使用magma函数合并了c代码,然后将这个mex函数编译成mexa64文件,因此我可以在matlab中使用。 mexfunction或source c代码如下:(称为eig_magma) #include #include #include #include #include #include // includes, project #include “flops.h” #include “magma.h” #include “magma_lapack.h” #include “testings.h” #include #include “mex.h” #define A(i,j) A[i + j*lda] extern “C” void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { #define L_OUT plhs[0] #define A_IN prhs[0] #define S_OUT plhs[1] magma_init(); real_Double_t gpu_perf, gpu_time; double […]

从C读取.mat文件:可以读取变量; 但不能正确返回

我正在尝试使用MATLAB-API使用C(NOT C ++)读取.mat文件。 这是MATLAB代码,它会创建我想要的.mat文件: A = [[1 2 3]; [5 7 1]; [3 5 9]]; B = [[2 4];[5 7]]; Creator = ‘DKumar’; nFilters = 2; Filters{1} = [[-1.0 -1.0 -1.0]; [-1.0 8 -1.0]; [-1.0 -1.0 -1.0]]; Filters{2} = 2.0*[[-1.0 -1.0 -1.0]; [-1.0 8 -1.0]; [-1.0 -1.0 -1.0]]; cd(‘/home/dkumar/CPP_ExampleCodes_DKU/Read_mat_File’); save(‘Test_FILE.mat’, ‘A’, ‘B’, ‘Creator’, ‘nFilters’, ‘Filters’); […]

“在架构x86_64中找不到符号”,表示在C中使用CPLEX API的MEX文件

我目前正在MATLAB中编写一个MEX文件,它使用C语言中的CPLEX API来解决线性编程问题。 不幸的是,当我尝试编译并且我不知道如何解决它时,我遇到了“找不到架构x86_64的符号”问题。 一些基本信息: 我可以编译yprime.c和其他不使用CPLEX API的MEX文件 我在Mac OSX 10.7.2上使用MATLAB 2011b 我使用的是XCode 4.2中包含的GCC 4.2软件包。 我已经应用了XCode 4.2 Patch for MATLAB 我非常感谢人们可能提出的任何建议。 我在下面列出了一份详细的错误报告。 -> mexopts.sh sourced from directory (DIR = $PREF_DIR) FILE = /Users/berk/.matlab/R2011b/mexopts.sh —————————————————————- -> MATLAB = /Applications/MATLAB_R2011b.app -> CC = llvm-gcc-4.2 -> CC flags: CFLAGS = -fno-common -no-cpp-precomp -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -fexceptions -Wall CDEBUGFLAGS […]

在mex上使用整数数组

我想将一个整数数组从MATLAB传递给C.我尝试使用类型uint64_T但它一直崩溃。 使用mxGetPr()获取双指针工作正常,但我需要将内容类型转换为整数,并且在每次迭代中这样做可能会很慢。 我在mexFunction中试过这个: uint64_T *l; l= (uint64_T *)mxGetData(prhs[1]); 调用此变量的函数具有以下forms: void XAction( const double *v, const uint64_T *l, double *w) { for (j=c; j; j–) for (i=r-1; i; i–) w[i] =v[l[r*j +i]] } 我在类型转换中犯了错误吗? 我已经看到了这个答案: 如何在MEX函数中读取整数数组,但我无法取得进展。

在Windows上编译Felzenszwalb VOC时出现Matlab Mex32链接错误

我正在用Matlab编译一个C文件( voc-release库的一部分),我收到下面的错误。 我似乎无法解决它。 谁能告诉我是什么原因导致这个错误以及我能做些什么呢? mex -O features.cc 为features.mexw32编写库 c:\ users \ safaa \ appdata \ local \ temp \ mex_ty~1 \ features.obj .text:未定义引用’_round’ C:\ PROGRA~1 \ MATLAB \ R2009A \ BIN \ MEX.PL:错误:’features.mexw32’的链接失败。

Matlab是否会复制传递给mex函数的数据?

关于延迟复制:Matlab会不会复制传递给mexFunction的数据,这会修改它? 例如在 myMex(input1(:,:,ii), input2(:,:,ii)) 可以肯定的是,输入矩阵永远不会被复制,所以人们可以通过并修改它,而不必返回引用?

使用Matlab进行multithreading处理

我正在研究Matlab上的一个项目,我们必须优化性能,我正在考虑并行化一些从.m文件生成的函数调用。 这个想法很简单,从Matlab文件(.m)调用编译为MEX的C文件,并从该C文件创建几个线程并从每个线程回调matlab函数。 理论工作,我可以创建线程,我也可以调用matlab函数,问题是我不能从线程调用matlab函数: //Global variables mxArray **g_plhs; mxArray **g_prhs; int g_nlhs; int g_nrhs; //Thread function DWORD WINAPI my_function( LPVOID lpParam ) { mexCallMATLAB(g_nlhs,g_plhs,g_nrhs,g_prhs,”matlab_function”); return 0; } //Main function void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { DWORD dwThreadIdArray[MAX_THREADS]; HANDLE hThreadArray[MAX_THREADS]; g_plhs = plhs; g_prhs = prhs; g_nlhs = nlhs; g_nrhs = nrhs; […]

为C程序创建MATLAB MEX文件

我是一位经验丰富的MATLAB用户,但对C和MEX文件来说却是全新的。 我有一个用C语言编写的复杂程序,我需要在MATLAB中调用它。 该程序由一个文件夹中的几十个文件组成,其中一个名为main.c,处理来自命令行的输入将结果传递给进行实际计算的其他类。 通常,要从命令行安装此程序,我将在UNIX命令提示符下运行./configure,make。 然后,要运行该程序,。/ runMyProgram -f input_file.txt -p some_parameters。 该程序将一个由数字列表组成的文本文件作为输入,并在命令窗口中打印结果表。 我想为程序提供MATLAB数组(而不是.txt文件)并返回一个数组(而不是打印的结果表)。 我已经阅读了The Mathworks中的MEX文档(我发现它非常不透明),以及其他一些“教程”,但我完全迷失了 – 这些示例适用于非常简单的单文件C程序,并没有真正讨论过如何处理更大更复杂的程序。 是否足以用执行相同操作的MEX文件替换main.c文件? 另外,如何在MATLAB中编译整个包? 我将非常感谢任何关于从哪里开始的简单英语建议,或指向以易于理解的方式处理该主题的任何教程。

Makefile:将C代码转换为mex代码(链接错误)

我有一个使用makefile C-code which works fine的C-code which works fine 。 现在,我正在尝试convert it to mex文件,以便我可以从Matlab运行它。 在这里,我正在using makefile approach 。 但是,mex的makefile给了我错误。 这是我要与我的mex文件一起编译的tsnnls lib 。 C项目组织: tsnnls_test_DKU.c Include_4_TSNNLS.c Include_4_TSNNLS.h “ Include_4_TSNNLS.* ”文件具有调用第三部分库的函数TestingLibraries() ; 而我试图保持“ tsnnls_test_DKU.c ”非常简单,因为: 原始代码:tsnnls_test_DKU.c int TestingLibraries() ; int main( int argc, char* argv[] ) { int k = TestingLibraries() ; return(1); } 现在,代码已更改: 更改的代码:tsnnls_test_DKU.c: #include “mex.h” […]

MATLAB的tic-toc和C的时钟差异

我编写了一些C代码,在使用MEX编译之后我将其称为MATLAB。 在C代码中,我使用以下代码测量计算的一部分时间: clock_t begin, end; double time_elapsed; begin = clock(); /* do stuff… */ end = clock(); time_elapsed = (double) ((double) (end – begin) / (double) CLOCKS_PER_SEC); 经过的时间应该是以秒为单位的执行时间。 然后我将值time_elapsed输出到MATLAB(它被正确导出;我检查过)。 然后MATLAB端我调用这个C函数(在我使用MEX编译它之后)并使用tic和toc测量它的执行时间。 结果是完全荒谬的是我使用tic和toc计算的时间是0.0011s(500次运行时的平均值,st.dev.1.4e-4),而C代码返回的时间是0.037s(平均500次运行,st.dev.0016)。 人们可能会注意到两个非常奇怪的事实: 整个函数的执行时间低于部分代码的执行时间。 因此,MATLAB或C的测量结果非常不准确。 在C代码中测量的执行时间非常分散并且表现出非常高的st。 偏差(变异系数44%,而tic-toc仅为13%)。 这些计时器发生了什么事?