【问题标题】:GCC 3.4 vs 4.4 for C++ based MEX files?基于 C++ 的 MEX 文件的 GCC 3.4 与 4.4?
【发布时间】:2012-06-04 16:26:23
【问题描述】:

使用 gcc 3.4 与 4.4 编译现代 Matlab MEX 文件有哪些权衡/顾虑?

我需要将一些现成的 C++ 代码 (kdtree) 编译为 MEX 文件,以便在 Fedora v16 下与 MATLAB (R2012a) 一起使用。我使用集群默认的最新 GCC 编译器 (4.6.x) 时遇到了符号问题。并且系统管理员非常反对提供 gcc 4.4.x,即 Matlab 的officially supported 编译器。 (不知道为什么)所以,他建议使用旧的(大约 2006 年)gcc 3.4.6 编译器。所以我的问题是,如果使用旧的 gcc 编译器有任何权衡或问题怎么办?表现? 64位支持?线程安全(或真正的多个并行调用)?等等?

【问题讨论】:

    标签: c++ matlab gcc mex gcc3


    【解决方案1】:

    您大多错过了 c++11 功能的初步实现(包括标准化线程、可变参数模板等 http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport)。只要两个编译器都生成与 MATLAB/Octave 兼容的 ABI 二进制文件,就没有任何特定于版本的安全问题。没有 c 编译器可以为您解决共享状态问题。性能会略有不同,但不显着。在任何一个编译器版本中,我确信无论如何都有更优化的代码实现。 gcc 3.4 支持 64 位。

    【讨论】:

    • 什么是 c++0x 特性?你能指出一个更优化的 mex 代码实现吗?
    • C++0x 特性是最终成为去年新更新的 C++11 标准的一部分的某些特性。在 GCC 4.4 发布的时候,C++11 还在未来,但 C++11 正在形成,编译器已经实现了一些。它被称为 C++0x 的奇怪名称,因为当时假设它会在 2006 年、2007 年、2008 年、2009 年完成,或者......在事件中,它是在 2011 年完成的。所以,总之,C++0x表示C++11的初步实现,这正是GCC 4.4带来的。
    • (如果合适,回答者会考虑将我之前的评论附加到他的答案中吗?该评论本身并不能作为答案,但它提供了一些读者可能会欣赏的额外信息。)
    • @BryanP 我没有看过那个 kdtree 代码,我认为它在 Big-O 表示法级别是最优的。 可能在编译器之间看到的唯一性能差异是在汇编级别。它们大部分应该是相同的。
    • @totowtwo 主要区别在于装配级别的定制优化是有道理的。我只是对“我确定有更优化的实现......”的评论感到困惑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 2015-02-27
    • 2016-05-03
    • 2013-11-16
    • 1970-01-01
    • 2012-02-02
    相关资源
    最近更新 更多