gpt4 book ai didi

c++ - 将 C/C++ 代码作为 MEX 文件调用与纯 C/C++

转载 作者:太空狗 更新时间:2023-10-29 23:14:11 27 4
gpt4 key购买 nike

我个人喜欢高级编程语言。对于概念验证,MATLAB 非常棒。此外,您可以使用 MATLAB 轻松地可视化几乎任何东西。

然而,为了速度,我经常需要编写C或C++代码。 C/C++ 中的可视化虽然令人头疼。在理想情况下,我需要以 C/C++ 速度运行的 MATLAB 可视化工具。对我来说,这意味着我应该 MEX 必要的 C/C++ 函数,然后从 MATLAB 脚本中调用它们,使用 MATLAB 的工具来执行可视化。理想情况下,这让我两全其美。但是,我不想因为通过 MEX 文件调用函数而导致 C/C++ 运行时间变慢。

我是否牺牲了 10x-100x speed gains of C++将 C/C++ 函数作为已编译的 MEX 函数调用时?也就是说,从 MATLAB 脚本调用的 mexFunction(param1, param2) 是否一定比运行已编译的二进制文件运行得慢?

最佳答案

我认为要回答这个问题,您必须考虑真正导致开销的原因。对 mex 本身的每个函数调用都会导致开销,进一步将数据传递给 mex(根据我的经验,只有那个方向,而不是传回结果)也会导致一些开销。我认为主要原因是 M-Code 是写时复制优化的,这意味着我的代码从未复制输入数据,但 mex 实现确实收到了一份拷贝。举一个 mex 表现“不好”的例子,我想我们都同意 C++ 迭代更快,mathworks 可能有合格的程序员,所以 why was I able to beat the performance implementing binary search in MATLAB? .在这种情况下,将数据传递给 mex 函数只会使其变慢。传递了大量数据,您必须为此支付开销,最后几乎没有触及数据(二进制搜索)。

最后,开销到底有多大?对于 nop call, it is only 0.00001s ,(没有输入,没有输出,没有计算)。对于传递数据,我没有任何详细的基准,但从我上面链接的二进制搜索示例来看,它必须低于 0.5s/GB。

现在对您的情况进行数学计算,并决定是否值得切换到 C++。

关于c++ - 将 C/C++ 代码作为 MEX 文件调用与纯 C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35022010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com