SSE набор инструкций для кроссплатформенности - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу написать математическую функцию с инструкциями SSE в VS2017.Я мог бы попробовать это:

__m128 addWithIntrinsics(__m128 a, __m128 b)
{
    __m128 r = _mm_add_ps(a, b);
    return r;
}

__m128 addWithAssembly(__m128 a, __m128 b)
{
    __m128 r;
    __asm
    {
        movaps xmm0, xmmword ptr[a]
        movaps xmm1, xmmword ptr[b]
        addps xmm0, xmm1
        movaps xmmword ptr[r], xmm0
    }
    return r.
}

Но я не уверен ... Если я напишу такие математические операции, будет ли этот код кросс-платформенным (с точки зрения работы только на Windows, но на разныхпроцессоры и те, которые не поддерживают SSE), или мне нужно будет определить на этапе компиляции, использует ли процессор эти инструкции, а если нет, то использовать обычные?Как мне лучше всего это сделать, и какой из моих двух вариантов предпочтительнее?

1 Ответ

0 голосов
/ 26 февраля 2019

Если вы хотите иметь возможность работать на процессорах без SSE, вам нужно написать обе версии - с и без.Вам нужно проверить во время выполнения , поддерживает ли текущая машина, на которой вы работаете, SSE, и использовать соответствующую функцию в зависимости от результата.

Что лучше, то это вопроспо вкусу.Я предпочитаю программировать на C ++, поэтому я бы предпочел встроенную версию.Но если вы работаете с кучкой программистов на ассемблере, они, вероятно, предпочтут версию на ассемблере.

...