首页 > 解决方案 > 我无法理解 numpy simd 矢量化代码中 @ 的含义和机制

问题描述

我正在解决如下所示的赏金来源问题

https://www.bountysource.com/issues/73221262-optimize-numpy-simd-algorithms-for-power-vsx

我必须理解下面显示的 numpy 中的 simd 矢量化代码

https://github.com/numpy/numpy/blob/master/numpy/core/src/umath/simd.inc.src#L222

我在源代码中发现了很多“@”。这就像替换字符串。

像这样

/**begin repeat
 * #TYPE = CFLOAT, CDOUBLE#
 * #type= npy_float, npy_double#
 * #esize = 8, 16#
 */

这就像替换字符串列表

   static NPY_INLINE int
run_binaryavx512f@func@_@TYPE@(char **args, const npy_intp *dimensions, const npy_intp *steps)
{
#if defined HAVE_ATTRIBUTE_TARGET_AVX512F_WITH_INTRINSICS && defined NPY_HAVE_SSE2_INTRINSICS
    if (IS_BINARY_STRIDEONE(@esize@, 64)) {
        AVX512F@func@_@TYPE@(args, dimensions, steps);
        return 1;
    }
    else
        return 0;
#endif
    return 0;
}

但我无法理解替换字符串的机制。我根本找不到关于这个的文件。

你能解释一下吗?

标签: cnumpymacrossimd

解决方案


推荐阅读