-
- Если с помощью препроцессора, то Bill(168 знак., 20.08.2013 15:41)
- Спасибо, так работает, причём второй и следующие #if не обязательно вкладывать в первый. - йцукен(20.08.2013 16:38,
)
- Ещё народ разматывает циклы при помощи switch: SciFi(357 знак., 20.08.2013 16:53)
- Нет, не обязательно. Но, тем не менее, ... - Bill(20.08.2013 16:43 - 16:46)
- Спасибо, так работает, причём второй и следующие #if не обязательно вкладывать в первый. - йцукен(20.08.2013 16:38,
- Догадываюсь, что можно, препроцессором. Но лучше не нужно... В дебрях boost подобные ужасы есть. - fk0(20.08.2013 12:41)
- В ИАРе на вкладке "Optimizations" : "Loop unrolling", включается при level=high - Vladimir Ljaschko(20.08.2013 12:31)
- Спасибо, я в курсе. К сожалению, фактически речь идёт о несколько более сложном случае, чем в приведённом выше примере, и искусственного интеллекта не хватает. - йцукен(20.08.2013 13:04,
)
- Тогда все сказано выше и ниже - или довериться компилятору или сочинить на препроцессоре. Не думаю, чтобы это было сложно. #define, #undef. Если тупо инлайнить, вручную написав количество вызовов тела цикла. - Vladimir Ljaschko(20.08.2013 13:33)
- Концепция: fk0(4811 знак., 20.08.2013 14:41)
- Фокус в том, чтобы в последней строке вместо 100 была константа вроде #define BUFSIZE 100 ... SEQ( BUFSIZE, ... ). К сожалению, это не работает, потому что препроцессор заменяет __NN##N не на __NN100, а на __NNBUFSIZE. - йцукен(20.08.2013 16:10,
)
- Да элементарно: fk0(156 знак., 20.08.2013 21:17)
- Вот это ловко! Спасибо, не знал, что так можно. - йцукен(22.08.2013 11:37,
)
- Вот это ловко! Спасибо, не знал, что так можно. - йцукен(22.08.2013 11:37,
- А потом захочется, чтобы было #define BUFSIZE (SIZE_A + 10). - SciFi(20.08.2013 16:24)
- А хотя бы я и жадничаю... зато от чистого сердца. - йцукен(20.08.2013 16:40,
)
- А хотя бы я и жадничаю... зато от чистого сердца. - йцукен(20.08.2013 16:40,
- Да элементарно: fk0(156 знак., 20.08.2013 21:17)
- Фокус в том, чтобы в последней строке вместо 100 была константа вроде #define BUFSIZE 100 ... SEQ( BUFSIZE, ... ). К сожалению, это не работает, потому что препроцессор заменяет __NN##N не на __NN100, а на __NNBUFSIZE. - йцукен(20.08.2013 16:10,
- Концепция: fk0(4811 знак., 20.08.2013 14:41)
- Тогда все сказано выше и ниже - или довериться компилятору или сочинить на препроцессоре. Не думаю, чтобы это было сложно. #define, #undef. Если тупо инлайнить, вручную написав количество вызовов тела цикла. - Vladimir Ljaschko(20.08.2013 13:33)
- Спасибо, я в курсе. К сожалению, фактически речь идёт о несколько более сложном случае, чем в приведённом выше примере, и искусственного интеллекта не хватает. - йцукен(20.08.2013 13:04,
- Шаблоны Цэ++ (сцылко). Но посыл изначально ущербный: это "преждевременная оптимизация". Должно звучать как грязное ругательство, но почему-то не звучит :-( - SciFi(20.08.2013 12:24, ссылка)
- Читал про шаблоны... Много думал... Ничего не понял. - йцукен(20.08.2013 16:43,
)
- Читал про шаблоны... Много думал... Ничего не понял. - йцукен(20.08.2013 16:43,
- Язык-то тут причем? Это опция компилера. - Evgeny_CD(20.08.2013 12:22)
- +1. и применяется это обычно на тех ядрах, которым действительно нужно много считать. остальным проще добавить пару мегагерц сверху. и вообще правильная считалка должна иметь аппаратные циклы (BlackFin например) - Mahagam(20.08.2013 14:46)
- Аппаратные циклы -- это менагеры так модно обозвали инструкцию DJNZ бывшую ещё в Z80? 1976 год. Старьё! Что такое регистры начала и конца цикла? По-сути условный переход и уменьшение счётчика цикла. "Если PC=конец, и COUNT-->0 ==> то PC=начало". fk0(228 знак., 20.08.2013 15:01)
- я как-то прикидывал насколько быстро блекфин сложит два массива, там из-за шин вроде как цикл в два такта укладывался. с командой DJNZ было бы аж в 1.5 раза медленнее!! не надо ляпать "экономия такта". самые времяжрущие циклы обычно короткие по Mahagam(198 знак., 20.08.2013 15:41)
- В некоторых (dspic точно) есть ("аппаратные циклы"). - fk0(20.08.2013 21:18)
- я как-то прикидывал насколько быстро блекфин сложит два массива, там из-за шин вроде как цикл в два такта укладывался. с командой DJNZ было бы аж в 1.5 раза медленнее!! не надо ляпать "экономия такта". самые времяжрущие циклы обычно короткие по Mahagam(198 знак., 20.08.2013 15:41)
- Аппаратные циклы -- это менагеры так модно обозвали инструкцию DJNZ бывшую ещё в Z80? 1976 год. Старьё! Что такое регистры начала и конца цикла? По-сути условный переход и уменьшение счётчика цикла. "Если PC=конец, и COUNT-->0 ==> то PC=начало". fk0(228 знак., 20.08.2013 15:01)
- +1. и применяется это обычно на тех ядрах, которым действительно нужно много считать. остальным проще добавить пару мегагерц сверху. и вообще правильная считалка должна иметь аппаратные циклы (BlackFin например) - Mahagam(20.08.2013 14:46)
- Если с помощью препроцессора, то Bill(168 знак., 20.08.2013 15:41)