【问题标题】:Why is vectorization beneficial for Matlab programs? Is it the same for NumPy and Boost(uBLAS)?为什么向量化对 Matlab 程序有益? NumPy 和 Boost(uBLAS) 是否相同?
【发布时间】:2011-05-16 17:51:44
【问题描述】:

使用向量化代替 for 循环可能会显着提高 Matlab 程序的速度。是因为向量化的代码是并行运行的吗?

矢量化是否也有利于使用 NumPy 或 uBLAS 的程序?

【问题讨论】:

    标签: matlab boost numpy vectorization ublas


    【解决方案1】:

    “矢量化”代码在 Matlab 和 numpy 等解释环境中通常更快,因为矢量化版本通常(但不总是)运行用 C 或 FORTRAN 编写的预编译和优化代码。并行执行可能会或可能不会在其中发挥作用。

    由于这个原因,在 numpy 中使用向量化通常会提高性能 - 通常例程是编译为 C 或 FORTRAN,它们的运行速度比必须在解释器上运行的本机 python 代码快得多。此外,主要用 C 语言编写的 numpy 可以回避 python 全局解释器锁,这可以大大提高使用线程的 python 代码的响应能力。

    【讨论】:

    • 使用 uBLAS 的程序怎么样,矢量化版本和普通版本有什么区别?或者,按照你说的,uBLAS(C++)不用矢量化就已经很快了?
    • 抱歉,我没有使用 uBLAS 的经验。它的行为方式应该与 Matlab 或 numpy 完全不同。在这些中,矢量化的大幅加速主要是绕过解释器。 uBLAS 是一个模板库,它总是从它包含的 C++ 编译成可执行代码。
    • 对于 uBLAS,我认为他们指的是“矢量化”这个词的不同含义,而不是 MATLAB 或 numpy 的矢量化代码。对于 uBLAS,向量化版本使用所谓的向量指令,即一次对多个数据进行操作的 CPU 指令。在 Intel 处理器上,这些是 SSE 指令。
    • 很可能。首先尝试将 matlab 或 numpy 的性能与编译库的性能混为一谈是一个非常奇怪的问题。
    【解决方案2】:

    我认为向量化更快的部分原因在于它减少了与多个函数调用相关的开销。将向量传递给函数对应于一次调用,而将该向量的每个元素单独传递给函数对应于多次调用。

    【讨论】:

    • 这绝对是正确的,但这可能不是最重要的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多