为什么矢量化对Matlab程序有益?NumPy和Boost(uBLAS)也一样吗?

为什么矢量化对Matlab程序有益?NumPy和Boost(uBLAS)也一样吗?,matlab,boost,numpy,vectorization,ublas,Matlab,Boost,Numpy,Vectorization,Ublas,使用矢量化代替for循环可以显著提高Matlab程序的速度。是因为矢量化代码是并行运行的吗 矢量化也有利于使用NumPy或uBLAS的程序吗?在Matlab和NumPy等解释环境中,“矢量化”代码通常更快,因为矢量化版本通常(但不总是)运行用C或FORTRAN编写的预编译和优化代码。并行执行可能在这方面起作用,也可能不起作用 由于这个原因,在numpy中使用矢量化通常会提高性能-通常例程是用C或FORTRAN编译的,运行速度比必须在解释器上运行的本机python代码快得多。另外,主要用C编写的n

使用矢量化代替for循环可以显著提高Matlab程序的速度。是因为矢量化代码是并行运行的吗

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

在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指令。在英特尔处理器上,这些是SSE指令。很可能是。首先,试图将matlab或numpy的性能与编译库的性能混为一谈是一个相当奇怪的问题。这肯定是正确的,但这可能不是最重要的原因。