【问题标题】:Speed of swig wrappersswig 包装器的速度
【发布时间】:2010-12-18 04:38:31
【问题描述】:

如果我要在 c++ 中编写几个类,然后使用 swig 进行转换,以便我以后可以在 python 中使用它们,它们会比我在 python 中完全重写它们运行得更快还是更慢?还是没有明显的速度差异?

【问题讨论】:

  • 视情况而定。您可以进行一些测试/测量或详细描述您的课程。编写好的 C++ 类可以比 python 快几十个。有时,好的 python JIT 可以胜过糟糕的 C++ 代码。包装器本身非常快。
  • 那么包装器提供了相对原生的速度?它不会影响任何性能?
  • 对于简单对象的开销会相当小,而对于大数据结构来说开销会增加,大数据结构必须在包装器中逐个元素地从一种格式复制到另一种格式。

标签: c++ python performance swig


【解决方案1】:

SWIG 生成的包装器的质量和速度非常好,它们的性能可能与手工制作的包装器一样好。

根据我的经验,包装器本身非常薄,并且对它们包装的本机函数增加很少的开销,使其成为在 python 或任何其他支持的语言中使用包装库的完美选择,并且是重用的好方法代码。

但是,如果您除了代码重用之外还对性能感兴趣,那么包装原生代码可能只有在您拥有一些计算密集型原生函数(如矩阵乘法、计算 MD5 或 CRC、折叠蛋白质等)时才会得到回报。

另一方面,有时您可以用简单的语言(如 python 或 C#)重写所有内容,并享受更好的代码和更好的工具,并获得相当的性能。

【讨论】:

    最近更新 更多