|
Ф/\Ей|\/| Ну сами понимаете... должно быть место, которое не модерируется... Но не злоупотребляйте... |
|
Опции темы | Опции просмотра |
|
02.02.2007, 20:22 | #1 |
Отличник форума
Регистрация: 10.03.2004
Сообщений: 383
|
Это мы только о графических алгоритмах говорим. А еще есть хранение данных. Всякие стандартные объекты и т.п. Ты представь какая помойка современная библиотека под винды. В 70хх ее бедную портировали с иксовых С на Линукс, в 80хх перехерачили под ДОС, потом в 85м какого-то долбо.ба осенило полиморфизмом и туда зафигачили объекты, в 91м чуток перезаточили под Вин 3.1.... ну и т.п. оптимизировать нет смысла, железо крутеет быстрее, чем ты почистишь мусор и не дай бог придумаешь какой-то оригинальный алгоритм.
Я тебе честно скажу мой бенефис в 3д это несколько крутящихся кубиков-рубиков в далеком 93м году. И то до освещения дело не дошло, за...ло. Так вот еще тогда когда все писалось на чистых С++ просторов для оптимизации было до.уя. Например чисто ради прикола я переписал стандартную функцию линии. На ассемблере, взяв из книжки алгоритм какого-то еврея Бризингейма, хейма, не помню точно. Кубики стали крутиться быстрее не в 10 раз, а хз в 50 наверно. И ты говоришь, что современные помоишные тулзы не возможно оптимизировать. ХА*3!!! |
02.02.2007, 21:49 | #2 | ||
Отличник форума
Регистрация: 10.10.2005
Сообщений: 605
|
Цитата:
А структуру данных + методы ее обработки оптимизировать обычно еще сложнее. Что же следует думать когда это возможно - см. комментарий к следующей цитате (1-е предложение). Цитата:
Судя по всему было там у тебя чего-то вроде: Код:
dx = x2 - x1 dy = y2 - y1 for x from x1 to x2 { y = y1 + (dy) * (x - x1)/(dx) plot(x, y) } что было заменено на Код:
function line(x0, x1, y0, y1) int deltax := abs(x1 - x0) int deltay := abs(y1 - y0) real error := 0 real deltaerr := deltay / deltax // Assume deltax != 0 (line is not vertical) int y := y0 for x from x0 to x1 plot(x,y) error := error + deltaerr if error ≥ 0.5 then y := y + 1 error := error - 1.0 Естественно все это дополняется проверками направления (несколько условий в самом начале кода). В первом случае на каждый пиксель требуется 1 floating-point умножение и деление. Во втором случае с некоторыми модификациями можно обойтись только целочисленным сложением. Не на всех машинах образца 1993 года был арифметический сопроцессор. А если он и был, то как правило был на отдельной микросхеме. В результате floating-point операции занимали несравненно больше времени чем целочисленные. А умножение, и особенно деление - гораздо больше чем сложение. Верно это и сегодня уже не в той степени как тогда. Использование тогда деления в критическом цикле иначе как кощунством не назовешь. Сегодня такого выигрыша по скорости уже не получится. З.Ы.: Бараны были, есть и будут (есть), однако не ими одними полон мир. Не пользуйте помоешные тулзы - когда в мире есть нормальные. |
||