Как я могу использовать инструкцию SSE? - PullRequest
1 голос
/ 20 февраля 2012

У меня проблема с SSE в системе Ubuntu Linux.

пример исходного кода на msdn (sse4) используйте операцию sse4.1 на linux

gcc -o test test.c -msse4.1

затем сообщение об ошибке:

error: request for member 'm128i_u16' in something not a structure or union

Как я могу использовать этот пример кода? Или любой пример кода можно использовать?

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

Название примера кода «Microsoft Specific».Это означает, что эти функции специфичны для реализации c ++ в Microsoft и не являются кроссплатформенными. Вот некоторые специфичные для Intel руководства по инструкциям SSE. Вот документация gcc, касающаяся флагов командной строки для конкретных оптимизаций сборки, включая SSE. Удачи, SSE может стать немного неуверенным.

2 голосов
/ 20 февраля 2012

Речь идет не столько о внутренних функциях, характерных для Microsoft, сколько о типе данных. Фактические свойства идентичны в обоих компиляторах на 100% и являются стандартом де-факто (на основе данных Intel).

Проблема, с которой вы сталкиваетесь, заключается в том, что тип __m128i - для удобства - union под MSVC, который включает такие поля, как m128i_u16. Пример кода, на который вы ссылаетесь, предполагает это.

В gcc __m128i является , а не объединением и, следовательно, неудивительно, что не имеет этих полей. Это на самом деле не является недостатком, потому что доступ к полям в объединении, подобном этому, сводит на нет любые выгоды, которые вы могли бы получить от использования SSE, во-первых, кроме как в демонстрационных фрагментах, подобных приведенному выше, вы (почти) никогда не захотите использовать такие вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...