
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (31) « Первая ... 17 18 [19] 20 21 ... 30 31 ( Перейти к последнему сообщению ) |
Сообщ.
#271
,
|
|
|
Цитата cppasm @ INC/DEC не медленнее ADD/SUB а как раз наоборот. Точнее начиная с Pentium2 одинаково, а на более ранних INC/DEC быстрее. ![]() ![]() ![]() "Оптимизация дело тонкое Петруха" © т. Сухов. Иногда выгоднее поставить ADD для выравнивания тех же циклов, а так да. А где можно доку посмотреть? А то у меня тока на Интел ![]() На асме почти ничего от него не зависит ![]() Цитата cppasm @ Хотя ни один компилятор С не обгонит в плане оптимизации нормального программиста на ASM. Не спорю, Intel Cи оптимизирует неплохо. Но даже он не способен провести глобальную оптимизацию, т.е. на практике в оптимизации по скорости нуждается небольшой участок кода, а остальной лучше заоптимизировать на малый размер. Такого ни один ЯВУ не реализует, у них все тупо - либо скорость, либо размер ![]() |
Сообщ.
#272
,
|
|
|
Цитата AndNot @ А где можно доку посмотреть? А то у меня тока на Интел Есть нормальные переводы? На сайте AMD есть доки - адреса не помню... Переводов нет. Цитата AndNot @ Цитата (cppasm @ Сегодня, 13:29) А вообще тесты такие это всё ерунда потому что очень многое зависит от компилятора. На асме почти ничего от него не зависит Ну дык сравнивают 2 куска кода. Я про сишный компилятор писал. Цитата AndNot @ Не спорю, Intel Cи оптимизирует неплохо. Но даже он не способен провести глобальную оптимизацию Дык я то же самое написал... Цитата cppasm @ Хотя ни один компилятор С не обгонит в плане оптимизации нормального программиста на ASM. |
Сообщ.
#273
,
|
|
|
Цитата AndNot @ Цитата (impik777 @ 16.10.06, 14:42) ошибки логики становятся ошибками синтаксиса С какого перепуга Подумай хотя бы, для чего нужны такие ключевые слова как const, final, private, protected а контроль типов, ведь приравнять яблоку планету - логическая ошибка, а изменить константу, а поменять человеку сердце, клинически его не убив его(секции приват). Добавлено знаешь когда споришь, не противоречь себе, сам говоришь, что форт позволяет все, а потом обвиняешь С++ в все позволенности |
Сообщ.
#274
,
|
|
|
Цитата cppasm @ Хотя ни один компилятор С не обгонит в плане оптимизации нормального программиста на ASM. эт конечно да, но слишком уж много работы А вот например Кармак спокойно обошелся без асма, хотя первый Дум для того развития компов, был намного круче чем щас тот же FEAR или Far Cry с Обвилионом и вообще он не использует асм вставки |
Сообщ.
#275
,
|
|
|
Цитата cppasm @ INC/DEC не медленнее ADD/SUB а как раз наоборот. Точнее начиная с Pentium2 одинаково, а на более ранних INC/DEC быстрее. Значит, интеловцы нагло врут в своем "IA-32 Intel® Architecture Optimization"? Цитата Use of the inc and dec Instructions The inc and dec instructions modify only a subset of the bits in the register. This creates a dependence on all previous writes of the flag register. This is especially problematic when these instructions are the critical path because they are used to change an address for a load which many other instructions depend. Assembly/Compiler Coding Rule 42. (M impact, H generality) inc dec instructions should be replaced with an add or sub instruction, because add and sub overwrite all flags, whereas inc and dec do not, therefore creating false dependencies on earlier instructions that set the flags. Разработчики компилятора, которым я пользуюсь, явно этот документ читали. ![]() |
Сообщ.
#276
,
|
|
|
Цитата impik777 @ Подумай хотя бы, для чего нужны такие ключевые слова как const, final, private, protected а контроль типов, ведь приравнять яблоку планету - логическая ошибка, а изменить константу, а поменять человеку сердце, клинически его не убив его(секции приват). Логика это нечто большее чем const, final, private, protected. Это как правило неправильная реализация чего либо, и если какая-то функция будет время от времени выдавать липу, то компилятор не поможет. Придется самому под отладчиком ползать долго и упорно, и прийти в бешенство, выяснив, что вместо передачи функции Koshelek.get_mani курса доллара, твоя программа проанализировав все курсы, передает ей курс тугриков, по ее мнению самый ходовой ![]() ![]() Цитата impik777 @ знаешь когда споришь, не противоречь себе, сам говоришь, что форт позволяет все, а потом обвиняешь С++ в все позволенности Вседозволенность это хорошо! Я всего лишь пытался сказать, что у Си плохо продуманный синтаксис! Это совершенно разные вещи. От этого страдает читабельность, ведь что бы прочесть конструкцию: ![]() ![]() char (*(*x2 ())[]) () приходится поднапрячся, и впомнить правило "право-лево". В Форте же все читается слева-направо, по порядку, и если знаешь слова, то разбираешь без напряга. Или возьми ту-же Модулу2, сорсы читаются без напряга, т.к. язык навязывает определенный стиль. В Си же своего стиля нет, есть только парадигмы (с мира по нитке), и каждый пишет как хочет. С одной стороны хорошо, а с другой не очень. Цитата impik777 @ и вообще он не использует асм вставки За дум ничего не могу сказать, а вот сравнивая первую кваку(Си) и Чесм(почти весь на асме) виден охрененный перевес в пользу последнего. |
Сообщ.
#277
,
|
|
|
Цитата AndNot @ Придется самому под отладчиком ползать долго и упорно, и прийти в бешенство, выяснив, что вместо передачи функции Koshelek.get_mani курса доллара, твоя программа проанализировав все курсы, передает ей курс тугриков, по ее мнению самый ходовой ![]() Тут есть логическая ошибка, которая вкралась из-за недостатка контроля типов. Есть библиотеки, которые позволяют устранить эти проблемы. Например, в Boost была какая-то библиотека для работы с физ. величинами — там ты никак не сможешь ошибиться размерностями величин. |
Сообщ.
#278
,
|
|
|
Цитата mo3r @ Тут есть логическая ошибка, которая вкралась из-за недостатка контроля типов. Есть библиотеки, которые позволяют устранить эти проблемы. Например, в Boost была какая-то библиотека для работы с физ. величинами — там ты никак не сможешь ошибиться размерностями величин. Это как? Если, на том же примере, курс $=29, а тугрика=28, то что здесь можно проконтролировать? И ошибку то заметишь не сразу ![]() Добавлено Цитата Hryak @ Разработчики компилятора, которым я пользуюсь, явно этот документ читали. Явно хреново читали. ![]() ![]() InnerLoop: jae OutOfRange btc bs,eax add eax,1 ; в этом месте не может быть зависимости по флагам cmp eax,493E0h ; соответственно лучше INC EAX jl InnerLoop add esi,1 cmp esi,edi jl OuterLoop Или я не так аглицкий расшифровал? |
Сообщ.
#279
,
|
|
|
Цитата AndNot @ Это как? Если, на том же примере, курс $=29, а тугрика=28, то что здесь можно проконтролировать? И ошибку то заметишь не сразу ![]() Дело в том, что у курса доллара и тугрика разные размерности — например, у курса доллара размерность рубли/доллары, а курса тугрика размерность рубли/тугрики. А это уже разные типы данных. Например, так: ![]() ![]() template<typename UnderlyingType, typename DiscriminatorType, DiscriminatorType dValue> struct DimensionedValue { UnderlyingType value; DimensionedValue(UnderlyingType value=UnderlyingType()): value(value){} }; enum money_kind = {baks, tugrik}; typedef DimensionedValue<double,money_kind,baks> kurs_baks; typedef DimensionedValue<double,money_kind,tugrik> kurs_tugrik; kurs_baks b = kurs_baks(29); kurs_tugrik t = kurs_tugrik(28); Таким образом ошибка несовпадения размерностей переносится на время компиляции. Программа, неправильно работающая с такими величинами (т.е., нарушающая правильность размерностей), попросту не скомпилируется. |
Сообщ.
#280
,
|
|
|
Зависимость по флагам есть далеко не всегда.
И разница между INC и ADD только в изменении CF: ADD - меняет, INC - нет А флаг переноса не так уж часто используется. В твоём например коде зависимости по флагам нет, т.к. cmp перезаписывает все флаги и глубоко параллельно что там было до этой команды. Вообще выигрыш от INC/DEC только в размере. По скорости если быть точным даже не с Pentium а с i386 одинаково. ![]() ![]() INC Length and timing Operands Bytes 8088 186 286 386 486 Pentium r8 2 3 3 2 2 1 1 UV r16 1 3 3 2 2 1 1 UV r32 1 3 3 2 2 1 1 UV mem 2+d(0,2) 23+EA 15 7 6 3 3 UV ![]() ![]() ADD Length and timing Operands Bytes 8088 186 286 386 486 Pentium reg, reg 2 3 3 2 2 1 1 UV mem, reg 2+d(0,2) 24+EA 10 7 7 3 3 UV reg, mem 2+d(0,2) 13+EA 10 7 6 2 2 UV reg, imm 2+i(1,2) 4 4 3 2 1 1 UV mem, imm 2+d(0,2) 23+EA 16 7 7 3 3 UV* +i(1,2) acc, imm 1+i(1,2) 4 4 3 2 1 1 UV * = not pairable if there is a displacement and immediate |
Сообщ.
#281
,
|
|
|
Цитата AndNot @ В Форте же все читается слева-направо, по порядку, и если знаешь слова, то разбираешь без напряга. я С\С++ читаю любой читабельности, ПОТОМУ ЧТО ЗНАЮ ЕГО а форт я знаю плохо, И ПОЭТОМУ не смогу прочитать даже средний код по твоей логике, я должен решить, что форт очень сложный и навороченный и его тяжело понять и его надо на помойку Добавлено Цитата AndNot @ а вот сравнивая первую кваку(Си) и Чесм(почти весь на асме) виден охрененный перевес в пользу последнего. Ты отстал от жизни лет на десять, если делаешь такие сравнения это уже не актуально ![]() напишика в одиночку движок дума 3 на асме ![]() ![]() а ведь Кармак пишет его на С один Добавлено Цитата AndNot @ От этого страдает читабельность, ведь что бы прочесть конструкцию: char (*(*x2 ())[]) () Сколько раз говорить, что так пишут только блаженные а таких, в нормальных командах НЕ ДЕРЖАТ Добавлено Цитата AndNot @ Логика это нечто большее чем const, final, private, protected. Это как правило неправильная реализация чего либо, и если какая-то функция будет время от времени выдавать липу, то компилятор не поможет. Хм... а для чего тогда уйма народу создает такие компиляры и мучается с ними придумывает такой синтаксис ведь мазохистов из них не более 10 процентов ![]() Добавлено Цитата AndNot @ Это как? Если, на том же примере, курс $=29, а тугрика=28, то что здесь можно проконтролировать? И ошибку то заметишь не сразу Дааааааааааааааааааа ![]() проектировать надо ПРАВИЛЬНО mo3r, тебе потрясающе показал сильные стороны контроля типов Добавлено Цитата AndNot @ Явно хреново читали. Уж они свое дело знают, поверь мне ![]() |
Сообщ.
#282
,
|
|
|
Цитата impik777 @ я С\С++ читаю любой читабельности, ПОТОМУ ЧТО ЗНАЮ ЕГО а форт я знаю плохо, И ПОЭТОМУ не смогу прочитать даже средний код В этом то и разница, я то более менее знаю Си, но вот перед такими конструкциями пасую. Цитата impik777 @ и его надо на помойку Я разве что-то говорил про помойку? Я лишь высказал СВОЕ мнение, почему С++ не тянет на идеальный. В двух словах - из-за плохой читаемости чужих сорсов и из-за плохо продуманного синтаксиса. Цитата impik777 @ Ты отстал от жизни лет на десять, если делаешь такие сравнения это уже не актуально Асм всегда будет актуален. Пока ему замены не предвидится. Цитата impik777 @ а ведь Кармак пишет его на С один Похоже Кармак выдохся, раз такой движок написал. По крайней мере на меня не произвела впечатления какая то демка. Цитата impik777 @ Сколько раз говорить, что так пишут только блаженные а таких, в нормальных командах НЕ ДЕРЖАТ Не суди сам, и не судим будешь ![]() Цитата impik777 @ Дааааааааааааааааааа ![]() проектировать надо ПРАВИЛЬНО Это не я придумал, что человеку свойственно ошибаться. Причем это возможно всегда и везде. Цитата impik777 @ mo3r, тебе потрясающе показал сильные стороны контроля типов Не заметил ничего потрясающего, кроме усложнения программы. Во времена паскаля наоборот старались обходить подобные препоны. Регистрам до одного места все эти типы, и мне соответственно. Для меня уже давно есть только BYTE,WORD,DWORD,QWORD,TWORD. Мне хватает ![]() Цитата impik777 @ Уж они свое дело знают, поверь мне Свое дело они может и знают, но кто сказал что они занимаются свом делом? Цитата mo3r @ Таким образом ошибка несовпадения размерностей переносится на время компиляции. Не врубился, чем мне это поможет. Допустим есть такая функция: ![]() ![]() c = (langkoeff*citykoeff*хз)/хз; switch c { case 0: return kurs_baks; case 1: return kurs_tugrik; case 2: return kurs_хз Ошибка то заложена в коеффициентах, а не в размерности. |
Сообщ.
#283
,
|
|
|
Цитата AndNot @ В командах всяких хватает, и там никто не смотрит как ты пишешь, главное результат. Ты просто не видел нормальные команды Добавлено Цитата AndNot @ Похоже Кармак выдохся, раз такой движок написал. По крайней мере на меня не произвела впечатления какая то демка. Это ты зря, Дум3 один из лучших образцов 3Д графики, а уж по мощности, кол-ву спец эффектов, источников звука на одной сцене......... И тем более обязательно будет продолжение Добавлено Цитата AndNot @ В этом то и разница, я то более менее знаю Си, ЕСЛИ ПОАНАЛИЗИРОВАТЬ ТВОИ ПРЕДЫДУЩИЕ ПОСТЫ, ИЗВИНИ, НО Си ТЫ НЕ ЗНАЕШЬ НЕ КАПЛИ И НЕ Я ОДИН ЭТО ГОВОРЮ, ТОТ ЖЕ Hryak СКАЗАЛ УЖЕ ТЕБЕ СВОЕ МНЕНИЕ ![]() ![]() ![]() Добавлено Цитата AndNot @ и там никто не смотрит как ты пишешь Я вижу что ты знаешь о работе в команде лишь понаслышке ![]() Добавлено Цитата AndNot @ Асм всегда будет актуален. Пока ему замены не предвидится Только в узкой области специализации Добавлено Цитата AndNot @ из-за плохой читаемости чужих сорсов Ща читаю сорсы Irrlight'a - никаких проблем с читаемостью а если посмотреть того же Кармака.... Цитата AndNot @ из-за плохо продуманного синтаксиса. Он не плохо продуманный, а просто поддерживает мульти парадигменность Сам Бьярн пишет , что взял с каждого языка его лучшие части Добавлено Цитата AndNot @ Не врубился, чем мне это поможет. Допустим есть такая функция: c = (langkoeff*citykoeff*хз)/хз; switch c { case 0: return kurs_baks; case 1: return kurs_tugrik; case 2: return kurs_хз Ошибка то заложена в коеффициентах, а не в размерности. Ты не понял смысла, зачем писать так глючно как у тебя если можно написать проще и понятней И БЕЗОПАСНЕЙ как mo3r Добавлено Цитата AndNot @ Это не я придумал, что человеку свойственно ошибаться. Причем это возможно всегда и везде. Только нормальные программитсы знают, как работать так, чтобы ошибаться как можно меньше а начинающие учатся этому у этих нормальных программистов нужен пример ? возьми хотя бы форум, на котором мы сейчас разговариваем |
Сообщ.
#284
,
|
|
|
Цитата impik777 @ Ты просто не видел нормальные команды ![]() ![]() ![]() Цитата impik777 @ Это ты зря, Дум3 один из лучших образцов 3Д графики Я не говорил насчет этого ничего ![]() Цитата impik777 @ а уж по мощности, кол-ву спец эффектов, источников звука на одной сцене......... Количество никак не связано с качеством! Почему то кодя игры, во многих случаях забывают о другом: самая хорошая игра - это когда на экране примитивные кубики,ромбики, и тд. а оторваться от нее невозможно! Цитата impik777 @ НО Си ТЫ НЕ ЗНАЕШЬ Правильнее сказать С++ я не знаю, а Си очень даже (хотя бы потому, что в нем очень многое унаследовано от асма PDP ![]() И если ты С++ хорошо знаешь, то разжуй уж мне, для чего собственно нужна венгерская нотация, для чего может пригодиться множественное наследие? Я не могу придумать им хоть какое нибудь применение ![]() Цитата impik777 @ Только в узкой области специализации Как ни крути, а эта "узкая специализация" разрастается с каждым годом ![]() Цитата impik777 @ Ты не понял смысла, зачем писать так глючно как у тебя если можно написать Это не у меня ![]() Цитата impik777 @ Только нормальные программитсы знают, как работать так, чтобы ошибаться как можно меньше Все так стараются работать, но одного желания мало. |
Сообщ.
#285
,
|
|
|
Цитата AndNot @ хотя бы потому, что в нем очень многое унаследовано от асма PDP ![]() Скорее наоборот — PDP представлял собой идеальную машину для реализации C ![]() Цитата AndNot @ для чего собственно нужна венгерская нотация Чтобы примеры из МСДН хуже читались. Цитата AndNot @ для чего может пригодиться множественное наследие Ситуации разные бывают. В одном из моих проектов оно облегчило мне написание одной полезной вещи. |