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

 
 
7 страниц V  < 1 2 3 4 5 > »   
Closed TopicStart new topic
> ARM начинающим
Andy Mozzhevilov
сообщение Oct 17 2005, 12:08
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(aaarrr @ Oct 17 2005, 16:19)
Цитата(Andy Mozzhevilov @ Oct 17 2005, 14:07)
Огласите цифры. Давайте пример на асм и описание алгоритма, который нужно реализовать.
*


Да пожалуйста: скопируем массив объемом 8K из пункта А в пункт Б. На АСМе получается огромный выйгрыш за счет использования LDM/STM.
*



Выигрыш получится в быстродействии, а не в объеме кода.
В объеме кода как раз получится проигрыш. Потом, давайте добавим в задачу ложку дегдя, сделав переменным размер копируемого блока. Тогда вам уже как минимум нужно будет заботиться о вычислении размера остатка и делать отдельную веточку в алгоритме для докопирования этого остатка, не кратного по размеру блоку используемых регистров. А еще добавить произвольное выравнивание начала блока, а не только по границе 4?
То есть как я и говорил, бывают частные случаи, не более того. Если это критично, можно писать на асме, если это только для самолюбования, то нафиг.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Виктория
сообщение Oct 17 2005, 13:06
Сообщение #32


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата(Andy Mozzhevilov @ Oct 17 2005, 17:08)
Цитата(aaarrr @ Oct 17 2005, 16:19)
Цитата(Andy Mozzhevilov @ Oct 17 2005, 14:07)
Огласите цифры. Давайте пример на асм и описание алгоритма, который нужно реализовать.
*


Да пожалуйста: скопируем массив объемом 8K из пункта А в пункт Б. На АСМе получается огромный выйгрыш за счет использования LDM/STM.
*



Выигрыш получится в быстродействии, а не в объеме кода.
В объеме кода как раз получится проигрыш. Потом, давайте добавим в задачу ложку дегдя, сделав переменным размер копируемого блока. Тогда вам уже как минимум нужно будет заботиться о вычислении размера остатка и делать отдельную веточку в алгоритме для докопирования этого остатка, не кратного по размеру блоку используемых регистров. А еще добавить произвольное выравнивание начала блока, а не только по границе 4?
То есть как я и говорил, бывают частные случаи, не более того. Если это критично, можно писать на асме, если это только для самолюбования, то нафиг.
*



Еще одна ложка - скорее всего для исходной постановке задачи (8К и const) компилятор сам сооптимизирует код (те же LDM/STM). blush.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 17 2005, 13:09
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Andy Mozzhevilov @ Oct 17 2005, 15:08)
Выигрыш получится в быстродействии, а не в объеме кода.
В объеме кода как раз получится проигрыш. Потом, давайте добавим в задачу ложку дегдя, сделав переменным размер копируемого блока. Тогда вам уже как минимум нужно будет заботиться о вычислении размера остатка и делать отдельную веточку в алгоритме для докопирования этого остатка, не кратного по размеру блоку используемых регистров. А еще добавить произвольное выравнивание начала блока, а не только по границе 4?
То есть как я и говорил, бывают частные случаи, не более того. Если это критично, можно писать на асме, если это только для самолюбования, то нафиг.
*


Дык все верно, только эффективность нельзя оценивать по небольшому фрагменту, следует взять достаточно большой проект (не менее 3000-4000 Ц строк), написать его на Ц и АСМ, и сравнить. Вот только заниматься этим никто не будет...
З.Ы. Прикола ради попробовал табличный CRC16 - получился выйгрыш на 10% по скорости и 30% по объему
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 17 2005, 13:14
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Vic1 @ Oct 17 2005, 16:06)
Еще одна ложка - скорее всего для исходной постановке задачи (8К и const) компилятор сам сооптимизирует код (те же LDM/STM). blush.gif
*


Где Вы увидели const? И покажите мне такой компилятор, который вместо понятного ему вызова тормозного memcpy станет извращатся с LDM/STM.
Go to the top of the page
 
+Quote Post
Виктория
сообщение Oct 17 2005, 13:28
Сообщение #35


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата(aaarrr @ Oct 17 2005, 18:14)
Цитата(Vic1 @ Oct 17 2005, 16:06)
Еще одна ложка - скорее всего для исходной постановке задачи (8К и const) компилятор сам сооптимизирует код (те же LDM/STM). blush.gif
*


Где Вы увидели const? И покажите мне такой компилятор, который вместо понятного ему вызова тормозного memcpy станет извращатся с LDM/STM.
*



1) длина массива=const

2) Это не только от компилятора зависит, от программиста тож. Чувствовать надо (или знать), где он может сооптимизировать и при каких условиях.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 17 2005, 13:34
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Vic1 @ Oct 17 2005, 16:28)
1) длина массива=const

2) Это не только от компилятора зависит, от программиста тож. Чувствовать надо (или знать), где он может сооптимизировать и при каких условиях.
*


Так речь не об особенностях оптимизации компилятора, а о том, что конструкцию с LDM/STM на Ц вообще реализовать не получится.
Go to the top of the page
 
+Quote Post
Виктория
сообщение Oct 17 2005, 13:50
Сообщение #37


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата(aaarrr @ Oct 17 2005, 18:34)
Так речь не об особенностях оптимизации компилятора, а о том, что  конструкцию с LDM/STM на Ц вообще реализовать не получится.
*


Не понимает...
Если, последовательно (не мешая в кучу). Функция memcpy (кстати чем она Вам не понравилась? Вы уверены, что там не через LDM/STM?) добавляет (как всякая функция) некие накладные расходы по передаче параметров. Мало-мальские приличные компиляторы для оптимизации при типичных ситуациях (например, длина массива - константа, массивы - глобальные переменные) заменяют вызов функции inline кодом, обходясь тем самым без вызова функции memcpy
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 17 2005, 14:25
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Vic1 @ Oct 17 2005, 16:50)
Цитата(aaarrr @ Oct 17 2005, 18:34)

Так речь не об особенностях оптимизации компилятора, а о том, что  конструкцию с LDM/STM на Ц вообще реализовать не получится.
*


Не понимает...
Если, последовательно (не мешая в кучу). Функция memcpy (кстати чем она Вам не понравилась? Вы уверены, что там не через LDM/STM?) добавляет (как всякая функция) некие накладные расходы по передаче параметров. Мало-мальские приличные компиляторы для оптимизации при типичных ситуациях (например, длина массива - константа, массивы - глобальные переменные) заменяют вызов функции inline кодом, обходясь тем самым без вызова функции memcpy
*



Не понимаю!
1. Уверен, что не использует. Оперирует максимум только словами.
2. Еще раз прошу: покажите мне компилятор, который ведет себя хотя бы близко так, как Вы описываете.
Go to the top of the page
 
+Quote Post
Виктория
сообщение Oct 17 2005, 14:38
Сообщение #39


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Тогда еще раз условия задачи: процессор - ?, размер элемента массива - байт? и т.п.
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Oct 17 2005, 14:39
Сообщение #40


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(aaarrr @ Oct 17 2005, 19:25)
Не понимаю!
1. Уверен, что не использует. Оперирует максимум только словами.

IAR оптимизирует словами.


Цитата
2. Еще раз прошу: покажите мне компилятор, который ведет себя хотя бы близко так, как Вы описываете.
*

А нужно? Это весьма частный случай.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 17 2005, 14:48
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Andy Mozzhevilov @ Oct 17 2005, 17:39)
А нужно? Это весьма частный случай.
*


Да нет, если честно, нафиг не нужно. Просто мне упорно пытаются объяснить, что де хороший компилятор все это прекрасно оптимизирует. Ничего подобного!
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Oct 17 2005, 14:52
Сообщение #42


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(aaarrr @ Oct 17 2005, 18:09)
Цитата(Andy Mozzhevilov @ Oct 17 2005, 15:08)
Выигрыш получится в То есть как я и говорил, бывают частные случаи, не более того. Если это критично, можно писать на асме, если это только для самолюбования, то нафиг.
*


Дык все верно, только эффективность нельзя оценивать по небольшому фрагменту, следует взять достаточно большой проект (не менее 3000-4000 Ц строк), написать его на Ц и АСМ, и сравнить. Вот только заниматься этим никто не будет...

Специально возможно и нет. Но возьмите типичную структуру кода. Циклы, управляющие структуры, функции (подпрограммы). Посмотрите, как эти структуры реализует компилятор, и насколько оптимальнее это можно сделать на асм. В завистимотси от процессора/компилятора проигрыш Ц будет от 0 до 50% в более или менее общих случаях. Все частные случаи накладывают сильные ограничения, и поэтому эти частные случаи трудносопровождаемы, шаг вправо, шаг влево - расстрел. Тот же LDM/STM потребует дополнительных телодвижений при отсутствия выравнивания на 4 и любого количества байт в блоке. И вся оптимальность тут уже начинает идти лесом на мелких блоках. То есть удел асма - вставки там, где действительно нужно выжать максимум быстродейтсвия, таких мест не очень много.

Цитата(aaarrr @ Oct 17 2005, 18:09)
З.Ы. Прикола ради попробовал табличный CRC16 - получился выйгрыш на 10% по скорости и 30% по объему
*


То есть как я и говорил, 1.3 раза по коду.
smile.gif


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 17 2005, 15:27
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Vic1 @ Oct 17 2005, 17:38)
Тогда еще раз условия задачи: процессор - ?, размер элемента массива - байт? и т.п.
*


Хорошо. Условия задачи:
1. Процессор: ARM7
2. Размер элемента массива: 4 байта (слово)
3. Количество элементов: 2048
4. Источник и приемник выравнены по границе слова (ложка дёгтя здесь
отсутствует, но можно добавить - 4 байта из 8192 картину не испортят)
5. Оптимизация на скорость

Попробуйте решить это на Ц и сравните с АСМ
Go to the top of the page
 
+Quote Post
Виктория
сообщение Oct 17 2005, 15:28
Сообщение #44


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Цитата(aaarrr @ Oct 17 2005, 19:48)
Цитата(Andy Mozzhevilov @ Oct 17 2005, 17:39)
А нужно? Это весьма частный случай.
*


Да нет, если честно, нафиг не нужно. Просто мне упорно пытаются объяснить, что де хороший компилятор все это прекрасно оптимизирует. Ничего подобного!
*



Опять слишком "жесткое" утверждение. Поймите и Вы, я тоже не цепляюсь именно к этому примеру. Но Ваши категоричные утверждения blush.gif
Вы хоть знаете где Ваш компилятор (именно тот с которым Вы работаете) делает оптимизацию (и какие приемы лучше при этом использовать). Ну хотя бы такую классику ++j или j++. Или сравниваете C-программы и Asm-прог только по конечному результату?

Извините, если Вам показалось какое-то упорство с моей стороны (навеянное впрочем личным опытом, пусть и несколько уставревшим, и знания некоторых основ компилирования). Но ведь весь разговор в течении последнего часа - и поэтому выбранный тон - для лучшего взаимопонимания blush.gif

От своей реплики с условиями задачи не отказываюсь blush.gif
Go to the top of the page
 
+Quote Post
Виктория
сообщение Oct 17 2005, 15:31
Сообщение #45


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Хм, издержки реального времени (почти одновременные ответы).

Условия принимаю.
Go to the top of the page
 
+Quote Post

7 страниц V  < 1 2 3 4 5 > » 
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 00:26
Рейтинг@Mail.ru


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