理解numpy的循环向量化

2024-05-14 07:56:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想确认我已经理解了很多机器学习讲座/笔记/视频中提到的向量化代码的概念。你知道吗

我对此做了一些阅读,发现CPU和GPU有一个名为SIMD的指令集;单指令多数据。你知道吗

例如,将两个变量移动到两个特殊的64/128位寄存器,然后一次添加所有位。你知道吗

我也读过,对于大多数现代编译器,比如GCC,如果您使用-Ofast标志打开优化,这是

-Ofast - Disregard strict standards compliance. -Ofast enables all -O3 optimizations. It also enables optimizations that are not valid for all standard-compliant programs. It turns on -ffast-math and the Fortran-specific -fno-protect-parens and -fstack-arrays.

<^ > ^ {< CD1>}然后自动地将C/C++中的任何循环向量化为SIMD指令。你知道吗

我在my own code上测试了这一点,并且能够在MNIST数据集上获得显著的加速,从45分钟缩短到5分钟。你知道吗

我还知道numpy是用C编写的,并用PyObjects包装的。我通读了他们的很多代码,但这很难。你知道吗

我的问题是:我上面的理解是正确的吗?Numpy是否也做同样的事情,或者他们是否使用explicit pragmas或其他特殊的instruction/register名称来进行向量化?你知道吗


Tags: and数据代码机器概念视频itcpu
1条回答
网友
1楼 · 发布于 2024-05-14 07:56:26

numpy不会那样做的。你知道吗

numpy上下文中的“矢量化”一词意味着您直接让numpy在数组上工作,而不是自己创建循环。它通常被传递给所谓的“通用函数”,简称“ufunc”。这些函数是C函数,它将在C中的C循环中处理预期的操作。你知道吗

但它通常不能做任何ISA矢量化。原因是这些函数对于所有类型的数组都是通用的,密集数组或密集数组上的视图。因此,由于所使用的模式,您不能期望矢量化。你知道吗

如果您想要ISA矢量化numpy调用,那么可以使用numba,而JIT可以JIT(从而真正实现ISA矢量化)。还有一个项目将使用英特尔的一个库,但我找不到了。你知道吗

相关问题 更多 >

    热门问题