Как я могу сказать GCC, чтобы развернуть конкретный цикл? Я использовал SDK CUDA, где петли можно развернуть вручную, используя #pragma unroll
. Есть ли аналогичная функция для gcc? Я немного искал Google, но ничего не мог найти.Скажите gcc специально развернуть петлю
ответ
НКУ дает вам несколько различных способов обработки:
Использование #pragma директивы, как
#pragma GCC optimize ("string"...)
, как видно в GCC docs. Обратите внимание, что прагма делает оптимизации глобальными для остальных функций. Если вы использовали#pragma push_options
иpop_options
макросов умно, вы могли бы, вероятно, определить это вокруг только одна функции, как так:#pragma GCC push_options #pragma GCC optimize ("unroll-loops") //add 5 to each element of the int array. void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } } #pragma GCC pop_options
Аннотирования отдельных функций с атрибутами синтаксиса GCC в: проверьте GCC function attribute документов для более детальной диссертации на предмет. Пример:
//add 5 to each element of the int array. __attribute__((optimize("unroll-loops"))) void add5(int a[20]) { int i = 19; for(; i > 0; i--) { a[i] += 5; } }
Примечание: Я не уверен, насколько хорошо GCC находится в разворачивая обратной итерированные петли (я сделал это, чтобы получить Markdown, чтобы играть хорошо с моим кодом). Тем не менее, примеры должны компилироваться.
Очень классно, что для этого есть атрибут функции, однако он игнорируется последним GCC от Apple для iOS: «предупреждение:« оптимизировать »директива атрибута игнорируется». (Я знаю, что они перешли на LLVM, но я по-прежнему использую GCC иногда, поскольку он иногда создает более быстрый код.) Кто-нибудь знает, почему его игнорируют? Является ли ветка GCC от Apple слишком старой? На стороне примечания, в функции, на которой я его использовал, петли все равно разворачиваются, пока я использую -O3. – Simplex
Я просто попробовал '__attribute __ ((оптимизировать (« unroll-loops »)))' с некоторым встроенным кодом, и он улучшил скорость всего на 3%. Ручное разворот в 8 раз улучшило скорость на 12% и не увеличило размер программы. – endolith
Мой gcc предупреждает: игнорирование #pragma optimize ... Это всегда доступно? – neodelphi
-funroll-loops
может быть полезным (хотя он включает цикл-разворачивание по всему миру, а не по петле). Я не уверен, есть ли #pragma
сделать то же самое ...
nah Я тоже нашел это, но хочу просто развернуть конкретный цикл – Nils
bmei из broadcom имеет набор исправлений для добавления поддержки #pragma unroll в gcc. – osgx
@ Jerry Coffin, как я могу его использовать? Можете ли вы дать мне команду, которая использует -funroll-loop? – 2011-12-14 14:20:12
- 1. Развернуть оптимизацию компилятора gcc
- 2. gcc не будет векторизовать простую петлю
- 3. как включить GCC векторизовать эту петлю
- 4. Скажите gcc-компилятору обрабатывать переменную не как константу при оптимизации
- 5. Скажите GCC оптимизатор, что значение изменяется в глобальной функции
- 6. Как сделать бесконечную петлю
- 7. GCC API не может развернуть свои собственные экспортированные символы
- 8. Как развернуть имя C++ в clang (или gcc)?
- 9. Развернуть приложение OSX, скомпилированное с использованием GCC 4.6
- 10. поиска в Монго специально
- 11. RDP убить программу специально
- 12. Android-игры специально растровые
- 13. Специально предназначенные устройства Android
- 14. Нарезка списка специально
- 15. jsoup специально разобрал href
- 16. Сортировка специальных символов специально?
- 17. Python проект организации (специально для внешних LIBS)
- 18. не смог выйти Петлю
- 19. Скажите, скажите знак фрагментации памяти (в отличие от утечки памяти)?
- 20. Скажите AppleScript для перезагрузки
- 21. Скажите WPF оценить привязки
- 22. Скажите валюте с испанским
- 23. скажите мне sql
- 24. Скажите компилятору перевести определенную инструкцию по-другому?
- 25. Скажите библиотеке linux, где загружаются общие библиотеки
- 26. скажите, где System.out.print() печатает в java
- 27. Может кто-нибудь, пожалуйста, скажите мне быстрый способ развернуть небольшое приложение для рельсов в Windows?
- 28. Скажите GCC «Я хочу использовать SSE4.1, но ТОЛЬКО в тех местах, которые я хочу!»
- 29. libevent & signal handling (SIGCHLD специально)
- 30. Тестируемая разработка для JSP специально
Не могу поверить, что я скажу это. Если вы ничего не найдете, всегда есть ... Устройство Даффа. Теперь, где * *, я положил петь кающегося? Я знаю его где-то здесь ... – dmckee
Хе вы можете сделать это с помощью макросов? Наверное, нет, так что просто написать это - это единственное, что осталось? – Nils
По всей видимости, я бы предложил изучить отдельную компиляцию всего этого бита с помощью '-funroll-loops' перед использованием Duff's Device: это прекрасная вещь для изучения, но уродливая вещь, которая есть в вашем коде. – dmckee