Здравствуйте, jazzer, Вы писали:
CC>>Куда проще будет сделать нешаблонную версию и забацать её как полагается. J>и что же помешает позвать эту нешаблонную версию из соответствующей специализации стандартной функции?
Рамки заданного интерфейса.
Например банальное получение по одному значению через operator() жрёт приличный кусок CPU и что то не очень хочет оптимизироваться.
Далее, стандартный интерфейс не ограничивает никак alignment, который требуется для SSE. Unaligned access же либо кинет exception либо (если использовать соответсвующие интринсики для выгрузки в память) будет заметно медленнее.
Думаешь я не пробовал?
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Возьми любую сложную программу на С++, которую писали люди, знающие С++, и там будут шаблоны.
"сложная" — это где много LOC, много модулей в архитектуре.
Например LLVM или Chromium.
Если ты нашел программу без шаблонов — покажи нам, мы поясним где ими можно улучшить код.
Здравствуйте, alpha21264, Вы писали:
A>Люди! А для чего вы используете шаблоны? A>Может я чего упускаю? A> A>Сложные программы пишу, например, в известном САПРе OrCad есть мой код. A>
Понятно что можно и без них. Как можно и без ООП, и без ФП, и даже без процедурного программирования. На ассемблере можно.
Проблема шаблонов в том, что они используются для "метапрограммирования на шаблонах", которое скорее всего изначально не задумывалось. Вот отсюда и навороты типа буста, и километровые сообщения об ошибках, и увеличенное время компиляции (хотя это скорее следствие дурацкого наследия cи — системы include вместо модулей). Но программистам понравилась возможность не ждать десятилетиями нового стандарта, а получать недостающие фичи языка сразу. Поэтому, несмотря на все недостатки и неудобства, оно работает и им пользуются.
Нет такого преступления, на которое не пошло бы суверенное родоплеменное быдло ради продления своего бессмысленного рода и распространения своего бессмысленного генома.
Здравствуйте, CreatorCray, Вы писали:
CC>Далеко ходить не надо, уже кстати обсасывали — стандартный std::sort ускоряется в несколько раз если научить его принимать tree way comparison operator вместо operator < (). И чем тяжелее компаратор — тем лучше это видно. CC>На том же самом алгоритме. CC>Выходит в угоду интерфейсу сделано намеренное ухудщение О характеристик алгоритма. Я кстати в той теме показал как можно было сделать sort внутри с 3-way а снаружи сделать стаб для less only.
Тот же Степанов говорит, что алгоритмов должно быть много, если один алгоритм выигрывает у другого в чём-то, а в чём-то наоборот проигрывает — то нужны оба, чтобы покрыть всё алгоритмическое пространство.
Вот конкретно его слова про insertion sort в STL:
By the way, does STL have insertion sort inside? It has, of course it does.
So, what happend during standartization process: they took something which was in the library and was used by the library and threw it out. The argument was: "oh, we already have too many sorts".
Is it a good argument "too many sorts"? No, you need to have as many sorts as people might need when they do practical things.
Посмотри его Notes on Programming, там, например, разбирается 3-way partition, который упорядочивает элементы в соответствии с функцией, которая возвращает 0, 1, 2.
То что в стандарте нет другого sort — это недостаток стандарта, а никак не интерфейса std::sort
Здравствуйте, CreatorCray, Вы писали:
J>>Э-э-э... Специализации для SSE-совместимых типов никто не отменял (SSE все равно только с конкретными типами будет работать). CC>Можешь попробовать реализовать.
Eigen без проблем использует внутри SSE/NEON/AltiVec.
Здравствуйте, Abyx, Вы писали:
A>Здравствуйте, alpha21264, Вы писали:
A>Возьми любую сложную программу на С++, которую писали люди, знающие С++, и там будут шаблоны. A>"сложная" — это где много LOC, много модулей в архитектуре.
Много чего? Ты когда пишешь, подразумевай, что мне набор терминов тоже мало знаком.
Хоть ссылку на Википедию ставь.
A>Если ты нашел программу без шаблонов — покажи нам, мы поясним где ими можно улучшить код.
Ну например CUPS. Это сервер печати в Линуксе. (Есть в исходных кодах).
Здравствуйте, CreatorCray, Вы писали:
CC>Далее, стандартный интерфейс не ограничивает никак alignment, который требуется для SSE. Unaligned access же либо кинет exception либо (если использовать соответсвующие интринсики для выгрузки в память) будет заметно медленнее. CC>Думаешь я не пробовал?
видимо давно не пробовал. unaligned access уже давно бесплатен, хуже того — в vex-coded операциях выравнивания операндов из памяти не требуется
Здравствуйте, Molchalnik, Вы писали:
M>Если бы ты писал универсальный код на С
Это как?
M> адресация (*) разложилась на ассемблере как M>mov eax, index M>mov edx, sizeof(ParameterType) M>mul eax M>add eax, base
Уже неверно. sizeof (ParameterType) — константа.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>То что в стандарте нет другого sort — это недостаток стандарта, а никак не интерфейса std::sort
Ну дык интерфейс std::sort это же часть стандарта.
О чём собственно и речь.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, BulatZiganshin, Вы писали:
BZ>видимо давно не пробовал. unaligned access уже давно бесплатен
Для SSE?
BZ> хуже того — в vex-coded операциях выравнивания операндов из памяти не требуется
Давно не смотрел на новые команды, надо будет глянуть.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
EP>>То что в стандарте нет другого sort — это недостаток стандарта, а никак не интерфейса std::sort CC>Ну дык интерфейс std::sort это же часть стандарта. CC>О чём собственно и речь.
Есть 3-way sort, есть predicate-based sort — обе имеют свои плюсы и минусы. Predicate-based — самая общая.
А есть ещё всякие integer sort, которые тоже имеют своё практическое применение.
В чём твоя претензия? В том что нет других видов сортировок в стандарте? Я думаю многие с этим согласятся (к слову сказать, в ISO C++ разных сортировок больше чем в других языках).
Но что-то не пойму, а как вообще это относится к шаблонам?
Здравствуйте, alpha21264, Вы писали:
A>Много чего? Ты когда пишешь, подразумевай, что мне набор терминов тоже мало знаком. A>Хоть ссылку на Википедию ставь.
позволю себе вмешаться, по-моему это lines of code
Здравствуйте, alpha21264, Вы писали:
A>>Возьми любую сложную программу на С++, которую писали люди, знающие С++, и там будут шаблоны. A>>"сложная" — это где много LOC, много модулей в архитектуре.
A>Много чего? Ты когда пишешь, подразумевай, что мне набор терминов тоже мало знаком.
это сокращение, а не термин.
сокращения типа KB,MB,GB — тоже расшифровывать? A>Хоть ссылку на Википедию ставь.
викичто? тебя гугл чтоли забанил?
A>>Если ты нашел программу без шаблонов — покажи нам, мы поясним где ими можно улучшить код. A>Ну например CUPS. Это сервер печати в Линуксе. (Есть в исходных кодах).
на С++, да?
Здравствуйте, CreatorCray, Вы писали:
EP>>Eigen без проблем использует внутри SSE/NEON/AltiVec. CC>А интерфейс у него как у random?
Eigen я привёл как пример использования шаблонов с SSE. Его легко адаптировать к любым интринсинкам как раз через специализацию. Например базовый код для SSE — 650 строк, если брать весь, со спец. функциями и специализациями для std::complex, то получается 1.5k строк — и это всё, SSE там больше нет — всё остальное в общем виде.
Здравствуйте, CreatorCray, Вы писали:
BZ>>видимо давно не пробовал. unaligned access уже давно бесплатен CC>Для SSE?
да. процессору уже всё равно какую команду (mova,movu,ld) ты исполняешь, остались только бессмысленные проверки для mova и reg-mem операций. а при использовании vex нет и проверок
Здравствуйте, Molchalnik, Вы писали:
M>Кто ж спорит, константа. Что не верного? Загрузка константы в регистр. Например, при размере ParameterType в 9 байт туда будет загружатся 9
Для константы будет сгенерён точно такой же LEA eax, [eax+eax*8] как и для шаблонного.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока