从Matlab调用的Mex函数和数值差分
Mex function called from Matlab and numerical difference
我有一个Matlab科学代码,我想将包含对反演函数pinv()调用的Matlab代码(原生Matlab)的输出与现在调用pinv()的C++实现的同一Matlab代码的输出进行精确比较。
我使用Matlab代码调用C++pinv而不是Matlab pinv():我使用相关的API将C++pinv编译为mex文件。
对编译为mex文件的函数的调用是否会在Matlab和C++pinv()之间的实现差异之外引入一些数字差异?
MATLAB执行的所有矩阵运算都是由LAPACK库实现的,因此,是的,可能会因实现而产生差异。如果您的问题是"LAPACK库是否使用了与C++编译代码不同的硬件浮点功能",那是极不可能的—除非C++编译器被指示生成以特定HW平台为目标的代码,该特定硬件平台子集可用的HW平台。
然而,即使代码在源代码级别上相似,LAPACK也是从FORTRAN源代码编译的,而自定义例程是从C++编译的;不同编译器所做的优化是不同的。因此,即使有惊人的相似的源代码,结果可执行代码 注意:数据的操作(即传递给函数的方式)不会改变数据的内容;这可能是执行时间的问题,而不是数值偏差的问题。MEX基本上是关于如何将原生MATLAB数据结构呈现给任何例行处理它们的约定;访问数据的例程的效率再次是实现的问题。 进一步评论:必须说,FORTRAN在2D数据的内存布局中是列优先的,而C-and-family在2D数据内存布局中则是行优先的(我说的是索引)。这也可能导致执行时间的差异(同样在exec代码中),这取决于实现算法如何访问数据,因为现代硬件架构的性能高度依赖于发生了多少缓存未命中。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 加载由 MATLAB Coder 生成的带有函数的 DLL,该函数调用外部函数
- 如何在C++中编写 MATLAB fix(X) 函数?
- 将C++中的多个参数传递给MatLab共享库函数
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 从 Matlab Coder 初始化主函数
- 使用 Boost 的 UDP 通信(用于 MATLAB s 函数)
- 将MATLAB炒作函数转换为C
- 创建 Matlab MEX 函数时,我是否将 mexFunction 放在 c++ 头文件或源文件中
- 从MEX函数中清除MATLAB命令窗口
- 使用 MATLAB 语法的 c++ 函数参数?
- 如何使用 Matlab 函数 ordfilt2 与 OpenCV C++
- 如何使用C 代码调用MATLAB自定义函数
- 如何从C++调用 matlab 成员函数
- MATLAB函数手柄和C 功能指针
- MATLAB S函数构建器如何将编译器更改为G
- 传递用于在 C++ 中调用 MATLAB 函数的参数
- 在 matlab 中编写一个非常基本的 mex 函数
- 从项目中调用 MATLAB 或 Scilab 函数C++
- 导入函数 Matlab 编码器和C++可执行文件