Я хотел бы загрузить статический массив в память, используемый в качестве ядра свертки в более позднем цикле, в C99 и позже.Я пытался это сделать:
/** This is the outer product of
* filter[5] = { 1.0f / 16.0f, 4.0f / 16.0f, 6.0f / 16.0f, 4.0f / 16.0f, 1.0f / 16.0f };
* computed at once, outside of the pixels loops, saving 25 multiplications per pixel
* */
#define filter[5][5] { {0.00390625f, 0.015625f, 0.0234375f, 0.015625f, 0.00390625f}, \
{0.01562500f, 0.062500f, 0.0937500f, 0.062500f, 0.01562500f}, \
{0.02343750f, 0.093750f, 0.1406250f, 0.093750f, 0.02343750f}, \
{0.01562500f, 0.062500f, 0.0937500f, 0.062500f, 0.01562500f}, \
{0.00390625f, 0.015625f, 0.0234375f, 0.015625f, 0.00390625f} }
GCC 8 жалуется:
error: expected expression before « { » token
#define filter { {0.00390625f, 0.015625f, 0.0234375f, 0.015625f, 0.00390625f}, \
Я нашел, как загружать одномерные векторы, но как это сделать с 2D?
Редактировать
Конечная цель состоит в том, чтобы создать из него массив SIMD:
static const __m128 filter_sse[5][5] = { { _mm_set1_ps(filter[0][0]),
... },
... };
, и использование static const float filter[5][5]
заставляет его жаловаться на попытку установить константу с непостоянные значения.