Швидко очистити масив

Меню навігації

Посилання користувача

інформація про користувача

Ви тут » Програмування ATMEL у BASCOM. » Питання - відповіді » Швидко очистити масив

Повідомлень 1 сторінка 30 з 30

Поділитися1 2013-03-08 14:29:15

  • Автор: radan
  • Адміністратор
  • Звідки: Лисичанськ
  • Зареєстрований: 2007-01-25
  • Запрошень: 0
  • Повідомлень: 1437
  • Повага: [+216/-0]
  • Позитив: [+112/-2]
  • Стать: Чоловіча
  • Вік: 48 [1970-03-27]
  • Провів на форумі: 1 місяць 1 день
  • Останній візит: Сьогодні 00:30:07

Потрібно швидко очистити масив. Роблю так:

Але так у конкретній ситуації повільно. Чи не ту можливість очистити однією командою? І ще, якщо можливості немає, як це написати на АСМе?

Поділитися2 2013-03-08 21:17:22

  • Автор: sva-don
  • Активний учасник
  • Звідки: Ростов-на-Дону
  • Зареєстрований: 2011-01-08
  • Запрошень: 0
  • Повідомлень: 533
  • Повага: [+79/-5]
  • Позитив: [+30/-8]
  • Стать: Чоловіча
  • Провів на форумі: 6 днів 8 годин
  • Останній візит: Вчора 16:57:28

Поділитися3 2013-03-08 21:24:27

  • Автор: dmm
  • Активний учасник
  • Зареєстрований: 2007-01-28
  • Запрошень: 0
  • Повідомлень: 323
  • Повага: [+32/-2]
  • Позитив: [+0/-0]
  • Провів на форумі: 3 дні 7 годин
  • Останній візит: 2015-06-15 20:35:32

'найшвидше, але довго (лінійна програма) $asm LDI R24 , 0 '0 Loadadr Picsel , X 'покажчик на початокмасиву в Z 'записати 128 разів St Z+ , R24 'записати 1 St Z+ , R24 'записати 2

. 'повторювати 3. 126

St,Z+ , R24 'записати 127 St,Z+ , R24 'записати 128 $end Asm

'удвічі повільніше, але коротко (з циклом) $asm LDI R24 , 0 '0 LDI R25 , 128 '128 Loadadr Picsel , X 'покажчик на початок масиву в Clar : St Z+ , R24 'записати 128 разів Dec R25 Brne Clar $end Asm

Поділитися4 2013-03-09 00:02:23

  • Автор: radan
  • Адміністратор
  • Звідки: Лисичанськ
  • Зареєстрований: 2007-01-25
  • Запрошень: 0
  • Повідомлень: 1437
  • Повага: [+216/-0]
  • Позитив: [+112/-2]
  • Стать: Чоловіча
  • Вік: 48 [1970-03-27]
  • Провів на форумі: 1 місяць 1 день
  • Останній візит: Сьогодні 00:30:07

Дякуємо! Проблема швидкодії важлива в багатьох випадках. Крім оптимізації алгоритму і переходу на ASM напевно є певні хитрощі, що дозволяють прискорити роботу програми. В основному це стосується математики. масиву даних, зробити певні перетворення, відправити в інший масив. Одна добра людина сформулювала кілька моментів прискорення швидкодії: 1) X=X+1 працює швидше, ніж Incr X 2) X=0 швидше, ніж Reset X. 3) Цикли For. Далі взагалі краще не застосовувати, якщо швидкість важлива. Можна спільними зусиллями зможемо продовжити список?

Поділитися5 2013-03-09 09:22:43

  • Автор: demonizer
  • Активний учасник
  • масив
  • Звідки: Sochi
  • Зареєстрований: 2010-01-27
  • Запрошень: 0
  • Повідомлень: 317
  • Повага: [+6/-0]
  • Позитив:[+4/-0]
  • Стать: Чоловіча
  • Провів на форумі: 4 дні 14 годин
  • Останній візит: 2018-04-20 08:27:29

Чи може бути спільними зусиллями зможемо продовжити список?

було б непогано

Поділитися6 2013-03-09 12:26:34

  • Автор: RDW
  • Активний учасник
  • Звідки: Москва
  • Зареєстрований: 2011-05-11
  • Запрошень: 0
  • Повідомлень: 2261
  • Повага: [+138/-35]
  • Позитив: [+65/-51]
  • Стать: Чоловіча
  • Провів на форумі: 17 днів 21 год
  • Останній візит: Вчора 18:40:44

1) X=X+1 працює швидше, ніж Incr X

З цим незрозуміло, спірно, якщо компілятор правильно зроблено (оптимізація), то Incr 8-біт має швидше працювати і менше займати звичайній опірації додавання будь-яких чисел (адже для складання числа потрібно вказувати яке воно, а це ще такти процесора для зчитування даних ( як мінімум)). Взагалі компілятор повинен у будь-якому випадку оптимізувати ці два варіанти, галочка в опціях коштує?

2) X = 0 швидше, ніж Reset X.

За логікою швидше і економніше має виглядати рядок такого типу: X = X Xor X (треба звичайно пробувати, як воно там у реалі виглядає, ксор зазвичай 1 команда/такт). І взагалі, не забуваємо при ініціалізації використовувати заздалегідь відомі значення для інших змінних, наприклад зщна, що Х у нас дорівнює 0 (раніше встановили), то можна далі використовувати Y=X і т.д.

3) Цикли For. Далі взагалі краще не застосовувати, якщо швидкість важлива.

Тут з досвіду та відгуків в інеті можу сказати протилежне, бо на "do loop" народ дуже сильно скаржиться на стабільність роботи. У вихідному бесіці ці команди чужі (прийшли в пізніх версіях, GW-BASIC 1983). Рекомендують нимине користуватися.

Взагалі ті люди, хто користуються баском, повинні чітко розуміти, що за гнучкість, зручність та швидкість треба платити продуктивністю і тут головне лише одне – надійність. Ясний пень, що якщо потрібна продуктивність і економія пам'яті, то простіше в тому ж баском кодити на асмі спочатку, робити рідкісні вставки на бейсику (який зворотний изврат). і так вже обговорювалося/відомо) саме надійність і правила як треба робити (він у перетворенні типів скільки косяків можна допустити в одній математиці..).