реклама на сайте
подробности

 
 
> Развернуть цикл, GCC
Qwertty
сообщение Dec 23 2009, 13:45
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Нужно развернуть цикл принудительно. Опция -O3 эффекта не дала. Документация посоветовала -funroll-all-loops, но тоже не сработало. laughing.gif
Какое заклинание нужно применять?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
klen
сообщение Dec 23 2009, 18:59
Сообщение #2


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



для начала он должен быть разворачивыймым
тоесть число итерацй известно на этапе компиляции
иначе непонятно сколько его разворачивать
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Dec 24 2009, 06:21
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(klen @ Dec 23 2009, 21:59) *
тоесть число итерацй известно на этапе компиляции

Оно известно. Я на простейшей функции тестирую.
Код
void TestUnroll(unsigned char* ptr1, unsigned char* ptr2)
{
unsigned int i;
  for(i = 0; i <100; i++) *ptr2++ = *ptr1++;
}

Получил с -O3 и -funroll-all-loops
Код
void TestUnroll(unsigned char* ptr1, unsigned char* ptr2)
{
       E92D4010   stmfd sp!, {r4, lr}
{
       E1A0C001   mov r12, r1
       E1A0E000   mov lr, r0
       E3A04000   mov r4, #0x00000000
unsigned int i;
  for(i = 0; i <100; i++) *ptr2++ = *ptr1++;
       E1A0000E   mov r0, lr
       E4D03001   ldrb r3, [r0], #+0x001
       E1A0100C   mov r1, r12
       E4C13001   strb r3, [r1], #+0x001
       E5DE2001   ldrb r2, [lr, #+0x001]
       E5CC2001   strb r2, [r12, #+0x001]
       E5D03001   ldrb r3, [r0, #+0x001]
       E5C13001   strb r3, [r1, #+0x001]
       E5DE0003   ldrb r0, [lr, #+0x003]
       E5CC0003   strb r0, [r12, #+0x003]
       E5DE2004   ldrb r2, [lr, #+0x004]
       E5CC2004   strb r2, [r12, #+0x004]
       E5DE3005   ldrb r3, [lr, #+0x005]
       E5CC3005   strb r3, [r12, #+0x005]
       E5DE1006   ldrb r1, [lr, #+0x006]
       E5CC1006   strb r1, [r12, #+0x006]
       E5DE0007   ldrb r0, [lr, #+0x007]
       E5CC0007   strb r0, [r12, #+0x007]
       E5DE2008   ldrb r2, [lr, #+0x008]
       E5CC2008   strb r2, [r12, #+0x008]
       E284400A   add r4, r4, #0x0000000A
       E5DE3009   ldrb r3, [lr, #+0x009]
       E3540064   cmp r4, #0x00000064
       E5CC3009   strb r3, [r12, #+0x009]
       E28EE00A   add lr, lr, #0x0000000A
       E28CC00A   add r12, r12, #0x0000000A
       1AFFFFE4   bne 0x000002C0
       E8BD8010   ldmfd sp!, {r4, pc}

Я видимо не правильно вопрос задал потому как циклы все же разворачивает, но частично - 100 итераций превращаются в 10 по 10. Сразу в 100 не хочет.
Где то это ограничение задается?
Go to the top of the page
 
+Quote Post
Vova75
сообщение Jan 26 2010, 16:43
Сообщение #4





Группа: Участник
Сообщений: 10
Регистрация: 11-08-08
Из: г. Тверь
Пользователь №: 39 554



Цитата(Qwertty @ Dec 24 2009, 09:21) *
Я видимо не правильно вопрос задал потому как циклы все же разворачивает, но частично - 100 итераций превращаются в 10 по 10. Сразу в 100 не хочет.
Где то это ограничение задается?


Если подходить к делу с фанатизмом  то это поможет:
--param max-unrolled-insns=5000
--param max-average-unrolled-insns=5000
--param max-unroll-times=500
Но результат будет более чем экстремальный.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Mar 16 2010, 09:00
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(Vova75 @ Jan 26 2010, 19:43) *
Если подходить к делу с фанатизмом  то это поможет:

Спасибо! Давно не заглядывал, а тут оказывается решение есть.
Гугл по этим ключикам много интересного находит...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016