Я не могу понять значение и механизм @ in numpy simd векторизованного кода - PullRequest
0 голосов
/ 17 марта 2020

Я решаю проблему источника вознаграждения, показанного ниже

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

И я должен понимать векторизованный код simd в numpy, показанном ниже

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;
}

Но я не могу понять механизм замены строки. Я не могу найти документ об этом вообще.

Можете ли вы дать объяснение?

...