| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > ОПТИМИЗАЦИЯ КОДА |
| Автор: _aleks_ 31.3.2005, 06:08 | ||
Может подскажет кто-нибудь как эту функцию можно ещё оптимизировать
|
| Автор: chipset 31.3.2005, 06:36 | ||||
Начнём с того что он не компилируется, у тебя траблы со скобками, нужно так:
Во-вторых не скомпилируется ибо:
В-третьих, зачем указатель pb?, приходится раскрывать его всё время, что ест операции. В-чётвёртых, зачем pb вообще если можно привести потом всё в конце static_cast'ом? В-пятых, почему заголовок большими буквами? |
| Автор: Fire-Plug 31.3.2005, 07:34 | ||||
| _aleks_ Похоже, что тебе надо вычислить значение след.выражения: 1-й байт * 0.11+ 2-й байт * 0.59 + 3-й байт*0.3. Что, кстати, закодировано в байтах color - RGB? Итак, мне видится 2 подхода к решению: 1) union
2) битовые операции
Следует иметь в виду, что тип результата выражения - double, хоть и множество его значений находится в пределах [0...255]. Ну что с ним делать уже решать тебе. |
| Автор: _aleks_ 31.3.2005, 15:18 | ||
Дело в том что надо, чтобы функция выполнялась как можно быстрее, поэтому я подумал что если арифметические операции будут выполняться паралельно то время выполнения уменьшиться
|
| Автор: oleg1973 31.3.2005, 16:09 | ||
маразм однако, вот где индейцы побеждают
|
| Автор: cardinal 31.3.2005, 16:20 | ||||
А если еще учесть, что
и
почти никак не повлияют на результат, то можно сделать еще на порядок быстрее... |
| Автор: Fixin 31.3.2005, 17:24 | ||
Хороший вариант у oleg1973 (естественно
|
| Автор: maxim1000 31.3.2005, 17:38 |
| делить вообще не стоит вместо 100 можно взять степень двойки, тогда можно будет просто сдвинуть... |
| Автор: cardinal 31.3.2005, 17:38 |
| Fixin, посмотри что я написал |
| Автор: En_t_end 31.3.2005, 17:40 | ||
| Если уж такая тема, то и мне помогите, но у меня скорее задача решена правильно, но как всегда по-тупому ЗЫ просьба не пинать
|
| Автор: Fixin 31.3.2005, 17:40 | ||
Ага, угу, ну да. Но так понятнее |
| Автор: oleg1973 31.3.2005, 17:47 | ||
Fixin
а где они там у меня? там простое умножение без FPU |
| Автор: maxim1000 31.3.2005, 17:47 | ||||
ну все-таки тема чужая
|
| Автор: Doc_d0s 31.3.2005, 17:53 | ||
Вот так |
| Автор: En_t_end 31.3.2005, 17:56 |
| maxim1000 Верно ! Но вот только тут одна проблема |
| Автор: sergejzr 31.3.2005, 17:58 |
| ИМХО для geyscale вариант Cardinala рулит А если точность нужна, то Fixin'a вариант Сколько тактов надо для умножения с пл. точкой? около 80? На сдвиг думаю 1-3, на умножение целых чисел 32... |
| Автор: maxim1000 31.3.2005, 18:02 | ||
эх...работал я как-то на сигнальном процессоре Blackfin...если не использовать специальные инструкции для обработки видео, то там это делается приблизительно так:
кроме того, немалую часть операций можно было бы запараллелить, только я уже не вспомню, какие... |