Как заставить GCC использовать более двух регистров SIMD при использовании встроенных функций? - PullRequest
13 голосов
/ 24 сентября 2008

Я пишу некоторый код и пытаюсь ускорить его, используя встроенные функции SIMD SSE2 / 3. Мой код имеет такую ​​природу, что мне нужно загрузить некоторые данные в регистр XMM и действовать по нему много раз. Когда я смотрю на сгенерированный код ассемблера, кажется, что GCC продолжает сбрасывать данные обратно в память, чтобы перезагрузить что-то еще в XMM0 и XMM1. Я компилирую для x86-64, поэтому у меня 15 регистров. Почему GCC использует только два, и что я могу сделать, чтобы попросить его использовать больше? Есть ли способ, которым я могу «закрепить» какое-то значение в регистре? Я добавил ключевое слово «register» в определение переменной, но сгенерированный код сборки идентичен.

Ответы [ 2 ]

3 голосов
/ 24 сентября 2008

Да, вы можете. Явные регулярные переменные говорит о синтаксисе, который вам нужен для привязки переменной к определенному регистру.

2 голосов
/ 24 сентября 2008

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

...