SSE оптимизированный код работает аналогично простой версии - PullRequest
2 голосов
/ 10 августа 2011

Я хотел сделать свои первые шаги с Intel SSE, поэтому я следовал руководству, опубликованному здесь , с той разницей, что вместо разработки для Windows и C ++ я делаю это для Linux и C (поэтому я не Не используйте _aligned_malloc, но posix_memalign).

Я также реализовал один вычислительный метод без использования расширений SSE. Удивительно, но когда я запускаю программу, оба куска кода (тот, что с SSE, и тот, у кого нет) занимают одинаковое количество времени для запуска, обычно это время, когда один использует SSE немного выше, чем другой.

Это нормально? Возможно ли, что GCC уже оптимизирует с SSE (также используя опцию -O0)? Я также попробовал вариант -mfpmath=387, но никак не изменился.

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Для операций с плавающей запятой вы можете не увидеть огромных преимуществ с SSE. Большинство современных процессоров x86 имеют два FPU, поэтому двойная точность может быть примерно одинаковой для SIMD по сравнению со скаляром, а одинарная точность может дать вам 2x для SIMD по сравнению со скаляром в хороший день. Для целочисленных операций, например, например, обработка изображений или аудио на 8 или 16 битах, вы все равно можете получить существенные преимущества с SSE.

1 голос
/ 10 августа 2011

GCC имеет очень хороший встроенный векторизатор кода (который iirc запускает при -O0 и выше), так что это означает, что он будет использовать SIMD в любом месте, где это возможно, для ускорения скалярного кода (это также оптимизирует SIMD немного код, если это возможно).

довольно легко подтвердить, что это действительно то, что здесь происходит, просто разберите вывод (или используйте gcc emit commed asm файлы).

...