Здравствуйте, BulatZiganshin, Вы писали:
BZ>да. процессору уже всё равно какую команду (mova,movu,ld) ты исполняешь, остались только бессмысленные проверки для mova и reg-mem операций. а при использовании vex нет и проверок
Это радует. Спасибо за инфу.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, alpha21264, Вы писали:
A>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, alpha21264, Вы писали:
A>>>Люди! А для чего вы используете шаблоны?
J>>Для зарабатывания денег.
A>Это очень общий ответ.
Да нет, самый что ни на есть конкретный, Строуструп не зря же сделал С++ именно таким:
C. Hо это же история века. Я просто хотел чтоб мои приятели-программисты помнили меня за то, что я для них сделал. Знаете как сейчас оплачивается программирование на C++ ?
И. Последнее, что я слышал — настоящие профессионалы зарабатывают $70-80 в час.
C. Понимаете теперь? И я уверен, что он заслуживает этих денег. Отслеживание всех этих ловушек, которые я встроил в C++ — не легкая работа.
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, Molchalnik, Вы писали:
M>>Кто ж спорит, константа. Что не верного? Загрузка константы в регистр. Например, при размере ParameterType в 9 байт туда будет загружатся 9 CC>Для константы будет сгенерён точно такой же LEA eax, [eax+eax*8] как и для шаблонного.
Здравствуйте, alpha21264, Вы писали:
A>Здравствуйте, Няшка, Вы писали:
Н>>Аналоговые гораздо проще и быстрее!
A>Вообще-то нынешние цифровые уже обогнали аналоговые. И превратились в DSP.
1. Я бы не стал так однозначно утверждать.
2. Развитие аналоговых компьютеров остановилось.
3. От решаемых задач тоже всё сильно зависит.
Я боюсь, что мне не хватит "базы", чтобы доказывать состоятельность аналоговых компьютеров, но можно отталкиваться от того, что цифровым компьютерам до человеческого мозга пока далеко.
80% людей оценивают свое мастерство выше среднего...
Здравствуйте, Няшка, Вы писали:
Н>Я боюсь, что мне не хватит "базы", чтобы доказывать состоятельность аналоговых компьютеров, но можно отталкиваться от того, что цифровым компьютерам до человеческого мозга пока далеко.
Здравствуйте, Няшка, Вы писали:
Н>>>Аналоговые гораздо проще и быстрее!
A>>Вообще-то нынешние цифровые уже обогнали аналоговые. И превратились в DSP.
Н>1. Я бы не стал так однозначно утверждать. Н>2. Развитие аналоговых компьютеров остановилось.
Здравствуйте, Abyx, Вы писали:
A>Здравствуйте, alpha21264, Вы писали:
A>>>Возьми любую сложную программу на С++, которую писали люди, знающие С++, и там будут шаблоны. A>>>"сложная" — это где много LOC, много модулей в архитектуре.
A>>Много чего? Ты когда пишешь, подразумевай, что мне набор терминов тоже мало знаком. A>это сокращение, а не термин. A>сокращения типа KB,MB,GB — тоже расшифровывать?
Если рядом с цифрой, то я бы догадался. Если в тексте, то нет.
A>>Хоть ссылку на Википедию ставь. A>викичто? тебя гугл чтоли забанил?
Гугл выдаёт ссылку на чистящее средство.
Я предположил, что ты не это имел в виду.
A>>>Если ты нашел программу без шаблонов — покажи нам, мы поясним где ими можно улучшить код. A>>Ну например CUPS. Это сервер печати в Линуксе. (Есть в исходных кодах). A>на С++, да?
А какая разница на С или на С++?
Наверное по сравнению с более простым (примитивным) языком проще преимущества показать?
Ну хорошо, давай возьмём библиотеку Qt. Она на С++.
Там даже есть своя библиотека контейнеров и она на темплейтах.
Но весь остальной код почему-то без них.
PS.
В очередной раз обращаю внимание — я не утверждаю, что шаблоны не нужны.
Я хочу посмотреть примеры, где они дают существенный выигрыш. С самообразовательной целью.
Судя по количеству смайликов, я всё же не совсем ясно объяснил.
Если писать универсальный код на C и писать универсальный код на шаблонах C++, то второй вариант будет производительнее.
Я это отдельно и в явном виде обозначил.
Но некоторые товарищи почему-то тут же начали сравнивать неуниверсальный код, код для конкретного типа, с кодом на шаблонах.
Естественно, абсолютно нет разницы, как вы получите код X — напишете его ручками, или этот код сгенерит шаблон, после инстанцирования заданных шаблонных параметров.
Главное — помнить, что шаблон не является кодом. Шаблон можно сравить с формой для отливки кода. Код появляется только в момент инстанцирования, при задании конкретных параметров, и для каждого набора параметров он дублируется, а заодно оптимизируется индивидуально. В этом-то и его сила — в индивидуальной оптимизации для каждой инстанции.
Здравствуйте, alpha21264, Вы писали:
A>PS. A>В очередной раз обращаю внимание — я не утверждаю, что шаблоны не нужны. A>Я хочу посмотреть примеры, где они дают существенный выигрыш. С самообразовательной целью. A>
1. Напиши оптимальный кэш на плюсах, а потом на чистом си, и сравни производительность
2. Изучи статический полиморфизм. В отличии от динамического полиморфизма, он более производителен.
3. Чтобы каждый раз, когда тебе понадобится вектор, не прибивать его гвоздями к этому куску кода и к этому типу
Я видел очень старый код, смешанный на СИ и СИ плюс плюс, и ассемблере, где было очень много копипасты и велосипедов. В каждом месте каждый новый программер писал свой вектор, прибивали гвоздями свой кэш подкачки из файла для специфических типов. Бррр, жуть.
Шаблоны разруливают это на раз.
А где ты возьмешь ParameterType в "универсальный код на С"?
Макросами выкружишь?
А иначе ParameterType будет void* и sizeof (ParameterType) будет рантаймом, вместе с вытекающим из этого
mul eax
Здравствуйте, alpha21264, Вы писали:
A>Ну хорошо, давай возьмём библиотеку Qt. Она на С++. A>Там даже есть своя библиотека контейнеров и она на темплейтах. A>Но весь остальной код почему-то без них. A>
Это не правда.
Здравствуйте, Patalog, Вы писали:
CC>>Уже неверно. sizeof (ParameterType) — константа. P>А где ты возьмешь ParameterType в "универсальный код на С"?
Это надо спрашивать у автора. Мне тоже интересно.
P>Макросами выкружишь? P>А иначе ParameterType будет void* и sizeof (ParameterType) будет рантаймом, вместе с вытекающим из этого
Дык ведь sizeof это всегда константа
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
CC>Здравствуйте, Patalog, Вы писали:
CC>>>Уже неверно. sizeof (ParameterType) — константа. P>>А где ты возьмешь ParameterType в "универсальный код на С"? CC>Это надо спрашивать у автора. Мне тоже интересно.
.
P>>Макросами выкружишь? P>>А иначе ParameterType будет void* и sizeof (ParameterType) будет рантаймом, вместе с вытекающим из этого
CC>Дык ведь sizeof это всегда константа
Вот только есть у меня сомнения относительно шибкого ускорения lea vs mov.
В одном из проектов у нас был собственный аналог std::vector. Массив был шаблонный, но память под элементы выделяли как массив байт. Т.е. внутри работали как в старом добром Си, с приведением типа. Тип данных только в интерфейсной части и при вычислении размера элемента и все такое... Применялся он только для POD типов. При перевыделении памяти использовали memcpy, вместо поэлементного копирования.
Дык тесты однозначно показывали скорость работы много выше, чем у std::vector, хотя, казалось бы, у компилятора не было информации о фактическом размере элементов и все такое.
Это было в 2009-2010 гг. Возможно сейчас, на других процессорах и с другими компиляторами картина будет другой.
Было бы любопытно ознакомиться с реальными замерами, вместо теоретических рассуждений "что мог бы сделать компилятор...".
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Вот только есть у меня сомнения относительно шибкого ускорения lea vs mov. SVZ>В одном из проектов у нас был собственный аналог std::vector. Массив был шаблонный, но память под элементы выделяли как массив байт. Т.е. внутри работали как в старом добром Си, с приведением типа. Тип данных только в интерфейсной части и при вычислении размера элемента и все такое... Применялся он только для POD типов. При перевыделении памяти использовали memcpy, вместо поэлементного копирования. SVZ>Дык тесты однозначно показывали скорость работы много выше, чем у std::vector, хотя, казалось бы, у компилятора не было информации о фактическом размере элементов и все такое. SVZ>Это было в 2009-2010 гг. Возможно сейчас, на других процессорах и с другими компиляторами картина будет другой.
Если требуется работать именно как с массивом байт, то информация о типе особо не поможет.
(тем не менее, предполагаю, что хотя вы и работали как с массивом байт — информация о типе всё равно использовалась, например при вычислении смещения элемента вы же использовали sizeof(T)?)
Более того, ваш vector, скорей всего не был полным аналогом std::vector'а по функциональности и exception safety.
Вот кстати, sizeof(T) для qsort передаётся из-вне, то есть является runtime значением. Стандартный C подход (точнее "без-шаблонный").
SVZ>Было бы любопытно ознакомиться с реальными замерами, вместо теоретических рассуждений "что мог бы сделать компилятор...".
Если тебе интересен какой-то конкретный case — то можем разобрать его, с замерами и ассемблерными листингами. Но только давай не в КСВ.
Здравствуйте, alpha21264, Вы писали:
A>Народ!
Не поддаваться на провокации!
A>Вот дожил до 45 лет и не знаю, зачем в С++ шаблоны.
Тут нечем гордиться.
A>Люди! А для чего вы используете шаблоны?
Чтобы глумиться над окружающими, и видеть их лица, когда они потерялись в приоритетах шаблонов функций.
A>Может я чего упускаю?
Уже упустил.
A>Сложные программы пишу, например, в известном САПРе OrCad есть мой код.
Даешь C++11!!!