-
- Проще писать нужно! Bill(307 знак., 21.05.2013 14:50 - 15:40)
- Тогда нужно размер данных Bill(95 знак., 21.05.2013 15:47)
- Глобальная цель: Хочется во время копирования данных время от времени вываливаться в основной цикл, потом вернувшись - продолжить с того места откуда вывалились. А на вход функции давать жесткие константы. - Hobo(21.05.2013 15:27)
- Кошерно будет через protothreads. Свои костыли будут по сути такими же, но кривее. Кстати, если будет вываливаться, то может нуеёнафик эту оптимизацию? Что, других проблем не хватает? - SciFi(21.05.2013 15:55 - 16:09)
- Вытесняющая Ос не подойдёт? - Apтём(21.05.2013 15:43)
- нет, Ос на переправе не меняю :) - Hobo(21.05.2013 15:53)
- Господа, всем большое спасибо, источник проблемы - понятен, несколько вариантов решений - есть, ушел бороться. - Hobo(21.05.2013 14:13)
- Отвечаете на сообщения выборочно? Или читаете через строчку? - Make_Pic(21.05.2013 14:53)
- не, не, никаких выборочно, сорри, пытаясь ответить всем сразу теряю некоторые вопросы. стек маловат :) Как узнать версию? Экзешник не говорит. Нигде не написано. - Hobo(21.05.2013 15:21)
- гугл помог, 2.95.2-991027 - похоже древний, как г-но мамонта - Hobo(21.05.2013 15:48)
- А что так?! Поновее никак нельзя? Тем более, у старых версий была проблема с оптимизацией и обработки синтаксиса. - Make_Pic(21.05.2013 16:14)
- Через CygWin или под Linux? - Make_Pic(21.05.2013 16:15)
- win - Hobo(21.05.2013 16:17)
- вот ищу где поновее взять, пока впечатление такое, что нужно скачать исходники и компилировать самому - Hobo(21.05.2013 16:18)
- И всё из-за одного цикла? Или у вас много времени, или это жуткий приступ неадекватности :-) - SciFi(21.05.2013 16:22)
- вот ищу где поновее взять, пока впечатление такое, что нужно скачать исходники и компилировать самому - Hobo(21.05.2013 16:18)
- win - Hobo(21.05.2013 16:17)
- Через CygWin или под Linux? - Make_Pic(21.05.2013 16:15)
- А что так?! Поновее никак нельзя? Тем более, у старых версий была проблема с оптимизацией и обработки синтаксиса. - Make_Pic(21.05.2013 16:14)
- Не отвечает на "m68k-coff-gcc --version" ? - amx(21.05.2013 15:42)
- гугл помог, 2.95.2-991027 - похоже древний, как г-но мамонта - Hobo(21.05.2013 15:48)
- не, не, никаких выборочно, сорри, пытаясь ответить всем сразу теряю некоторые вопросы. стек маловат :) Как узнать версию? Экзешник не говорит. Нигде не написано. - Hobo(21.05.2013 15:21)
- Отвечаете на сообщения выборочно? Или читаете через строчку? - Make_Pic(21.05.2013 14:53)
- а они Вам точно статические нужны? Nikolay801_(740 знак., 21.05.2013 13:34)
- маленькая добавка, я полагаю что компилятор локальные переменные разместит в регистре, а статики в памяти, но компилятор может это и не сделать, а легко может размесить локальные переменные во временном фрейме(стеке) тогда выигрыша не будет. Nikolay801_(49 знак., 21.05.2013 14:03)
- пока что делает точно так, как вы и сказали Hobo(78 знак., 21.05.2013 14:08)
- спасибо, в принципе - вариант, но как-то... не красиво, что-ли... - Hobo(21.05.2013 13:39)
- Вам шашечки или ехать? Nikolay801_(83 знак., 21.05.2013 14:00)
- маленькая добавка, я полагаю что компилятор локальные переменные разместит в регистре, а статики в памяти, но компилятор может это и не сделать, а легко может размесить локальные переменные во временном фрейме(стеке) тогда выигрыша не будет. Nikolay801_(49 знак., 21.05.2013 14:03)
- держи ф-ю копирования от Phoenix Computer Products Corp. and Novum Organum, Inc. abivan(213 знак., 21.05.2013 13:30)
- Похоже истина за amx и Vladimir Ljaschko. Листинг так и не вышел, отладчика нет, для меня оказалось проще дизассемблировать :) Hobo(120 знак., 21.05.2013 13:13 - 13:19)
- >>>компилер m68k-coff-gcc>>>Повторно: Версия какая? - Make_Pic(21.05.2013 14:57)
- Не спешите с истиной. -O6 на -O3 уже заменили? - SciFi(21.05.2013 13:19)
- Пока нет, проект большой, пока не хочу разгребать последстивия изменения оптимизации по всему проекту. Вот сделал - objdump, походу amx и Владимир все-таки правы Hobo(1705 знак., 21.05.2013 13:35 - 13:42)
- Можно изменить уровень оптимизации только для одной функции: SciFi(66 знак., 21.05.2013 13:46)
- спасибо, попробую поиграться - Hobo(21.05.2013 14:10)
- если тут нет -О6, а в старом было, то вполне возможно такая оптимизация понимается как её полное отсутствие - koyodza(21.05.2013 13:44)
- О6->O3 не влияет на содержимое выходного файла, O6->O1 - влияет. Видимо он работает по принципу "все что больше О2 - то О3" :) - Hobo(21.05.2013 14:00)
- Ну если он при уровне -O3 такой говнокод выдаёт, то фтопку такой компилятор. Скачайте свежий CodeSourcery: вполне возможно, что он допилен до нормального состояния. У меня даёт вполне приличный код для ColdFire -> SciFi(260 знак., 21.05.2013 14:06 - 14:17, ссылка)
- спасибо, попробую если с оптимизациями не получится. - Hobo(21.05.2013 14:12)
- Ну если он при уровне -O3 такой говнокод выдаёт, то фтопку такой компилятор. Скачайте свежий CodeSourcery: вполне возможно, что он допилен до нормального состояния. У меня даёт вполне приличный код для ColdFire -> SciFi(260 знак., 21.05.2013 14:06 - 14:17, ссылка)
- О6->O3 не влияет на содержимое выходного файла, O6->O1 - влияет. Видимо он работает по принципу "все что больше О2 - то О3" :) - Hobo(21.05.2013 14:00)
- Можно изменить уровень оптимизации только для одной функции: SciFi(66 знак., 21.05.2013 13:46)
- Пока нет, проект большой, пока не хочу разгребать последстивия изменения оптимизации по всему проекту. Вот сделал - objdump, походу amx и Владимир все-таки правы Hobo(1705 знак., 21.05.2013 13:35 - 13:42)
- Какой у вас конкретно компилятор и под никс или win? - Make_Pic(21.05.2013 12:52)
- а что за проц? локальные переменные достаются по смещению от sp, а глобальные (и статические) по смещению от неких констант. если в ABI проца нету глобальных указателей, то может быть так и должно быть. - ыыыы(21.05.2013 12:49, )
- while заменяется на: int sz=lastAddr-ps; if (sz>0) memcpy(pd, ps, sz), pd+=sz, ps+=sz; - fk0(21.05.2013 11:34)
- не, ну кроме копирования там еще кое-что предполагается делать, упростил просто до минимума на время разборок - Hobo(21.05.2013 11:41)
- О! Это называется "elephant in the room". Почти "рояль в кустах" :-) - SciFi(21.05.2013 11:38)
- GCC умеет встроенный memcpy и может заменять его на специфические машинные инструкции блочной пересылки, чего не сделает *d++=*s++. А если хочется принципиально написать *d++=*s++, то длину следовало бы расчитать в начале и декрементить, а не fk0(194 знак., 21.05.2013 11:41 - 11:43)
- :)) - MBedder(21.05.2013 13:35, картинка)
- :) :) - Hobo(21.05.2013 13:40)
- И еще фтему :)) - MBedder(21.05.2013 14:00, картинка)
- Мазура на тебя нет. - fk0(21.05.2013 14:31)
- И еще фтему :)) - MBedder(21.05.2013 14:00, картинка)
- :) :) - Hobo(21.05.2013 13:40)
- :)) - MBedder(21.05.2013 13:35, картинка)
- GCC умеет встроенный memcpy и может заменять его на специфические машинные инструкции блочной пересылки, чего не сделает *d++=*s++. А если хочется принципиально написать *d++=*s++, то длину следовало бы расчитать в начале и декрементить, а не fk0(194 знак., 21.05.2013 11:41 - 11:43)
- когда указатели становятся static - они переносятся из регистров в ОЗУ => вместо "прочитать из ОЗУ - записать в ОЗУ" ваш цикл превращается в "прочиать из ОЗУ ps и pd, прочитать значение из ОЗУ по ps, записать в ОЗУ по pd, записать в ОЗУ новые amx(64 знак., 21.05.2013 10:55)
- Я бы на месте компилятора "прочиать из ОЗУ ps и pd" сделал перед началом цикла, а "записать в ОЗУ новые значения ps и pd" - по окончании цикла. Но все возможно. Найду как листинг компилятору включить - буду смотреть. - Hobo(21.05.2013 11:01)
- А компилятор считает, что программист, если этого хочет, должен написать еще одну функцию, где будет только цикл ;) - Vladimir Ljaschko(21.05.2013 11:10)
- Ключик -S. Или в отладчике открыть дизассемблер и сделать скриншот. - SciFi(21.05.2013 11:04)
- Я бы на месте компилятора "прочиать из ОЗУ ps и pd" сделал перед началом цикла, а "записать в ОЗУ новые значения ps и pd" - по окончании цикла. Но все возможно. Найду как листинг компилятору включить - буду смотреть. - Hobo(21.05.2013 11:01)
- Какой уровень оптимизации? И предоставьте asm-листинг цикла до и после изменений. - SciFi(21.05.2013 10:38)
- -fomit-frame-pointer -O6 - Hobo(21.05.2013 11:07)
- А что такое -O6??? Вроде бы всю жизнь было -O3. Может быть, O6 == O0??? - SciFi(21.05.2013 11:09)
- -О6. Да сам озадачен, думал у меня дока старая :) Перепиливаю чужой проект 2005 года, поэтому всех тонкостей не знаю. Это под m68000, может там градаций больше ? - Hobo(21.05.2013 11:17)
- в кейле для 51 вообще 9 уровней - koyodza(21.05.2013 13:22)
- Не, у гэцэцэ 3 уровня. Возможно, переносили из CodeWarrior: там уровней больше. Однако, где дизассемблер? - SciFi(21.05.2013 11:23)
- пока не получился, на -S начинает ругаться что .о файл выоспринимает как скрипт линкера, курю мануал - Hobo(21.05.2013 11:25)
- Ещё можно objdump -d. - SciFi(21.05.2013 11:32)
- пока не получился, на -S начинает ругаться что .о файл выоспринимает как скрипт линкера, курю мануал - Hobo(21.05.2013 11:25)
- -Os ? - Snaky(21.05.2013 11:12)
- -О6. Да сам озадачен, думал у меня дока старая :) Перепиливаю чужой проект 2005 года, поэтому всех тонкостей не знаю. Это под m68000, может там градаций больше ? - Hobo(21.05.2013 11:17)
- А что такое -O6??? Вроде бы всю жизнь было -O3. Может быть, O6 == O0??? - SciFi(21.05.2013 11:09)
- -fomit-frame-pointer -O6 - Hobo(21.05.2013 11:07)
- возможно вы мешаете оптимизатору расположить их в памяти там где удобней. что говорит асм-листинг или .map? - Snaky(21.05.2013 10:37)
- Проще писать нужно! Bill(307 знак., 21.05.2013 14:50 - 15:40)