|
Сопоставление проектов С и АСМ, Немного цифр |
|
|
|
 |
Ответов
|
Feb 18 2008, 23:25
|

Местный
  
Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606

|
ИМХО. Написать С код соизмеримый с асмом можно, но требует таких же трудозатрат. А вот интеретно, использовали ли Вы такие приёмы? Код unsigned char a; a = delay_key; //токмо для "оптимизации". Иар почему-то все переменные считает как volatile. if (KEY_ON()) { if ( a != 255 ) delay_key = a+1; } else if (a) delay_key = a-1
|
|
|
|
|
Feb 19 2008, 11:42
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Т.Достоевский @ Feb 19 2008, 03:25)  ИМХО. Написать С код соизмеримый с асмом можно, но требует таких же трудозатрат. А вы анализировали глобально производительность программы в процессе оптимизации? Существует теория оптимизации (естественно). Если исключить оптимизацию по коду (в большенстве случаев удобнее просто другой чип взять), а брать оптимизацию по скорости, то возникает следующая ситуация. Оптимизировать требуется только незначительную часть кода. Обычно - единицы процентов. Это даёт существенный результат. Оптимизация же остальной части сказывается не сильно. Опыт показывает, что оптимизировать этот кусочек лучше именно в виде "подсказок" для компилятора. У меня это дало практически идеальный код. потери в сравнении с асмом - 5% не больше. К сожалению, такая оптимизация тоже получается (CPU-зависима). Выработав некоторые общие принципы, можно сразу писать так, что будет код очень эффективный. Вот пример Код void Point(uint8_t X,uint8_t Y,uint8_t Color) // Вывести точку { uint8_t maska; // Смещение относительно байта uint8_t *addr; // Адрес экраного байта
maska =0x3; if((X & 2)==0) { maska = 0x30; Color <<= 4; } if((X & 1)==0) { maska <<=2; Color <<=2; } maska = ~maska; if(NEkr>0) addr = &Ekr[SIZE_EKR]; else addr = Ekr;
addr += (Y*SizeXb)+(X>>2); maska &= *addr; maska += Color; *addr = maska; } /*offset = (X & 3) << 1; // выделить смещение точки в байте maska = ~(3<<offset); addr = (Y*SizeXb)+(X>>2); maska &= Ekr[NEkr][addr]; maska += Color << offset; Ekr[NEkr][addr] = maska; }*/ Результат - двукратный рост производительности.
|
|
|
|
Сообщений в этой теме
SasaVitebsk Сопоставление проектов С и АСМ Feb 17 2008, 20:18 _Pasha Для меня лично есть одно НО:
вот я использую мульт... Feb 18 2008, 07:58 Dog Pawlowa Цитата(_Pasha @ Feb 18 2008, 11:58) Для м... Feb 19 2008, 06:54  _Pasha Цитата(Dog Pawlowa @ Feb 19 2008, 09:54) ... Feb 19 2008, 07:59   Dog Pawlowa Цитата(_Pasha @ Feb 19 2008, 11:59) Продо... Feb 19 2008, 10:42    _Pasha Цитата(Dog Pawlowa @ Feb 19 2008, 13:42) ... Feb 19 2008, 10:57 KRS Это все не показатель.
Если код на С заточить напр... Feb 18 2008, 08:32 SasaVitebsk 2 _pasha.
Да с наработками не хочется расставаться... Feb 18 2008, 15:45 Qwertty Цитата(SasaVitebsk @ Feb 18 2008, 18:45) ... Feb 18 2008, 18:33  SasaVitebsk Цитата(Qwertty @ Feb 18 2008, 22:33) Изви... Feb 18 2008, 20:17 Rst7 Цитатаи использовать его фичи:#pragma inline=force... Feb 18 2008, 16:19 IgorKossak Цитата(Т.Достоевский @ Feb 19 2008, 01:25... Feb 19 2008, 06:37 Igor26 ЦитатаНаписать С код соизмеримый с асмом можно, но... Feb 19 2008, 06:45 Rst7 ЦитатаА вот интеретно, использовали ли Вы такие пр... Feb 19 2008, 06:50 forever failure Цитата(SasaVitebsk @ Feb 19 2008, 16:42) ... Feb 19 2008, 13:13 SasaVitebsk Цитата(forever failure @ Feb 19 2008, 17... Feb 19 2008, 17:00 _Pasha Теперь немного о другом. Рискую утомить читателя, ... Feb 20 2008, 08:15 defunct Цитата(_Pasha @ Feb 20 2008, 10:15) Могу ... Feb 20 2008, 14:51 SasaVitebsk Не могу сказать, что я точно понял смысл, но попро... Feb 20 2008, 16:25 _Pasha Цитата(defunct @ Feb 20 2008, 17:51) Стил... Feb 20 2008, 18:49 SasaVitebsk Цитата(_Pasha @ Feb 20 2008, 22:49) Пробл... Feb 20 2008, 21:06 _Pasha Вот это совсем другое дело!
Че-то WINAVR торм... Feb 21 2008, 01:19 AHTOXA Цитата(_Pasha @ Feb 21 2008, 06:19) Вот э... Feb 21 2008, 07:20  _Pasha Цитата(AHTOXA @ Feb 21 2008, 10:20) WINAV... Feb 21 2008, 07:34   defunct Цитата(_Pasha @ Feb 21 2008, 09:34) Блин,... Feb 21 2008, 11:52    _Pasha Вернемся к нашей баранине. "Не умеешь-научим,... Feb 21 2008, 16:57     singlskv Цитата(_Pasha @ Feb 21 2008, 19:57) Кодvo... Feb 21 2008, 17:49      _Pasha Цитата(singlskv @ Feb 21 2008, 20:49) Нес... Feb 22 2008, 07:41 ReAl Цитата(_Pasha @ Feb 21 2008, 03:19) Вот э... Feb 21 2008, 08:43  singlskv Цитата(ReAl @ Feb 21 2008, 11:43) Ну изви... Feb 21 2008, 22:37   Petka Цитата(singlskv @ Feb 22 2008, 01:37) Воп... Feb 22 2008, 07:25    singlskv Цитата(Petka @ Feb 22 2008, 10:25) Велоси... Feb 22 2008, 09:45 _Pasha Цитата(defunct @ Feb 21 2008, 14:52) стил... Feb 21 2008, 19:09 Artak Ребята, может бить мой вопрос покажетса смехотwорн... Feb 21 2008, 23:25 ReAl Цитата(Artak @ Feb 22 2008, 01:25) На C п... Feb 22 2008, 15:27 Rst7 ЦитатаА есть вообще грамотный способ решения таких... Feb 22 2008, 06:29 Artak Цитата(Rst7 @ Feb 22 2008, 10:29) В IAR... Feb 26 2008, 20:26 _Pasha Теперь про асм.
В контексте многопоточного програм... Feb 22 2008, 10:47 _Pasha В общем, наигрался я с "С". Память закан... Feb 22 2008, 23:10 defunct Цитата(_Pasha @ Feb 23 2008, 01:10) В общ... Feb 22 2008, 23:37 singlskv Цитата(_Pasha @ Feb 23 2008, 02:10) В общ... Feb 22 2008, 23:55  Alex B._ Цитата(singlskv @ Feb 23 2008, 02:55) я н... Feb 23 2008, 00:03   singlskv Цитата(Alex B._ @ Feb 23 2008, 03:03) хм,... Feb 23 2008, 00:08  defunct Цитата(singlskv @ Feb 23 2008, 01:55) Вот... Feb 23 2008, 00:10   singlskv Цитата(defunct @ Feb 23 2008, 03:10) А чт... Feb 23 2008, 00:43    defunct Цитата(singlskv @ Feb 23 2008, 02:43) Как... Feb 23 2008, 01:10     singlskv Цитата(defunct @ Feb 23 2008, 04:10) Я ко... Feb 24 2008, 18:47      SasaVitebsk Цитата(singlskv @ Feb 24 2008, 22:47) Ска... Feb 24 2008, 19:50       singlskv Цитата(SasaVitebsk @ Feb 24 2008, 22:50) ... Feb 24 2008, 22:23        SasaVitebsk Цитата(singlskv @ Feb 25 2008, 02:23) Уве... Feb 25 2008, 13:23      defunct Цитата(singlskv @ Feb 24 2008, 20:47) Ска... Feb 24 2008, 21:03 SasaVitebsk А мне просто супер нравится С. По-моему, для МК эт... Feb 23 2008, 00:58 SasaVitebsk Из приведенного мной первого поста видно, что прои... Feb 23 2008, 11:09 Rst7 ЦитатаpChan->vAverage = (pChan->vSum + 4) ... Feb 23 2008, 20:18 defunct Цитата(Rst7 @ Feb 23 2008, 22:18) Мне дру... Feb 24 2008, 04:54 Rst7 Все... Туплю. Уже и ответ пространный написал, хор... Feb 24 2008, 10:40 Непомнящий Евгений По-моему, с heap основная проблема в том, как расс... Feb 26 2008, 09:29 singlskv Цитата(Непомнящий Евгений @ Feb 26 2008, 12... Feb 26 2008, 10:39  SasaVitebsk Цитата(singlskv @ Feb 26 2008, 14:39) Про... Feb 26 2008, 11:50 defunct Цитата(Непомнящий Евгений @ Feb 26 2008, 11... Feb 26 2008, 11:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|