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

StackOverflow https://stackoverflow.com/questions/124405

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top