Visual Studio 2010 и SSE 4.2 - PullRequest
       28

Visual Studio 2010 и SSE 4.2

0 голосов
/ 05 июля 2011

Я хотел бы знать, что необходимо установить в Visual Studio 2010, чтобы включить SSE 4.2? Я хотел бы использовать его из-за оптимизированного POPCNT ...

Как я могу проверить, все ли настройки в порядке?

спасибо


хорошо, я пытался использовать ваше решение, однако <nmmintric.h> не включен в vstudio2010 и стандарт __popcnt требует int вместо std::bitset<>: (

Есть идеи?


Спасибо за подсказку с правильным заголовком. Тем не менее, кажется, что: error C3861: '_mm_popcnt_u64': identifier not found, я нашел только _mm_popcnt_u32, однако я не знаю, как использовать его с bitset, или я должен использовать только bitset<>.count? Это не может работать без настроек компилятора, не так ли?

никто не знает?

Ответы [ 3 ]

7 голосов
/ 27 ноября 2012

вы должны написать _mm_popcnt_u64 в вашем коде. Также лучше проверьте, что процессор, на котором вы работаете, поддерживает инструкцию. И сборка для х64.

 #include <stdio.h>
 #include <nmmintrin.h>

 int main ()
 {
      unsigned __int64 a = 0x123456789ABCDEF0;

      int res = _mm_popcnt_u64(a);

      printf_s("Result res should be 32: %d\n", res);
      return 0;
 }
0 голосов
/ 25 августа 2012

Для этого ничего особенного не требуется.

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

Компилятор не проверяет и не трогает встроенную сборку, поэтому все, что вы там поместите, будет проходить через сборку, хотя ваше приложение будет аварийно завершать работу, если ваша система не поддерживает инструкцию.

Кроме этого, оптимизатор VS2010 предназначен только для SSE2.

0 голосов
/ 24 июля 2011

MSDN пример для __popcnt:

http://msdn.microsoft.com/en-us/library/bb385231.aspx

...