2010-04-01 4 views
4

Я сделал некоторое встроенное кодирование ASM для SSE раньше, и это тоже не сложно даже для тех, кто не знает ASM. Но я отмечаю, что MS также обеспечивает внутреннюю поддержку многих таких специальных инструкций.Intrinsics Vs inline ASM для кодирования SSE в VC++ 2K8

Есть ли конкретная разница в производительности или любая другая сильная причина, по которой следует использовать над другим?

Чтобы повторить из заголовка, это особенно касается внутренних функций, открытых VC++ 2008 для неуправляемого, родного языка C++.

ответ

3

В общем, лучше использовать встроенные средства - это более продуктивно для программиста, и хороший компилятор (например, Intel ICC) выполнит достойную работу по распределению регистров, составлению инструкций и т. Д. Компилятор Microsoft не так хорош в этом отношении но он, вероятно, все еще выполняет разумную работу - вы всегда можете переключиться на ICC позже, если вам нужно повысить производительность.

+1

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

4

В Visual C++ для x64 нет встроенной сборки. Intrinsics можно использовать и на x64. Если вы когда-либо захотите перенести свой код на x64, вам придется использовать функции intrinsics.

+0

+1. В этом случае это не имеет значения. Но, спасибо за это, я этого не знал. –

+1

Но вы _can_ используете MASM x64, если хотите – PhiS

1

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

+0

Действительно _identical_? А как насчет перемещения данных в регистры и т. Д., То это касается/релевантно? –

+0

Я часто нахожу, что я могу написать сборку, которая в 2 раза быстрее, чем эквивалентные встроенные функции SSE из-за распределения регистров обработки логов и/или планирования команд. Тем не менее, я пишу векторный код весь день, каждый день. Ваш пробег может отличаться. –

+0

@ Stephen: вы пробовали это сравнение с компилятором Intel ICC? Это очень сложно победить, ИМХО, но мне было бы интересно узнать, можете ли вы победить его с помощью ассемблера с ручным кодированием? –

0

Использование свойств.

Использование сборки обычно приводит к нескольким дням безостановочной работы, только для того, чтобы узнать, что компилятор превосходит вашу лучшую производительность на 5%. (5%, если вы действительно хороши, скорее всего 30%.)

Смежные вопросы