Re[9]: Because we can!
От: CreatorCray  
Дата: 29.04.14 16:48
Оценка:
Здравствуйте, jazzer, Вы писали:

CC>>Куда проще будет сделать нешаблонную версию и забацать её как полагается.

J>и что же помешает позвать эту нешаблонную версию из соответствующей специализации стандартной функции?
Рамки заданного интерфейса.
Например банальное получение по одному значению через operator() жрёт приличный кусок CPU и что то не очень хочет оптимизироваться.
Далее, стандартный интерфейс не ограничивает никак alignment, который требуется для SSE. Unaligned access же либо кинет exception либо (если использовать соответсвующие интринсики для выгрузки в память) будет заметно медленнее.
Думаешь я не пробовал?
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: Зачем шаблоны в С++?
От: Abyx Россия  
Дата: 29.04.14 18:58
Оценка:
Здравствуйте, alpha21264, Вы писали:

Возьми любую сложную программу на С++, которую писали люди, знающие С++, и там будут шаблоны.
"сложная" — это где много LOC, много модулей в архитектуре.
Например LLVM или Chromium.

Если ты нашел программу без шаблонов — покажи нам, мы поясним где ими можно улучшить код.
In Zen We Trust
Re: Зачем шаблоны в С++?
От: anonymouse2 Либерал Глобалист Безбожник Трансгуманист
Дата: 29.04.14 18:59
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Люди! А для чего вы используете шаблоны?

A>Может я чего упускаю?
A>
A>Сложные программы пишу, например, в известном САПРе OrCad есть мой код.
A>

Понятно что можно и без них. Как можно и без ООП, и без ФП, и даже без процедурного программирования. На ассемблере можно.
Проблема шаблонов в том, что они используются для "метапрограммирования на шаблонах", которое скорее всего изначально не задумывалось. Вот отсюда и навороты типа буста, и километровые сообщения об ошибках, и увеличенное время компиляции (хотя это скорее следствие дурацкого наследия cи — системы include вместо модулей). Но программистам понравилась возможность не ждать десятилетиями нового стандарта, а получать недостающие фичи языка сразу. Поэтому, несмотря на все недостатки и неудобства, оно работает и им пользуются.
Нет такого преступления, на которое не пошло бы суверенное родоплеменное быдло ради продления своего бессмысленного рода и распространения своего бессмысленного генома.
Re[11]: Because we can!
От: Evgeny.Panasyuk Россия  
Дата: 29.04.14 19:15
Оценка:
Здравствуйте, 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
Re[9]: Because we can!
От: Evgeny.Panasyuk Россия  
Дата: 29.04.14 19:19
Оценка:
Здравствуйте, CreatorCray, Вы писали:

J>>Э-э-э... Специализации для SSE-совместимых типов никто не отменял (SSE все равно только с конкретными типами будет работать).

CC>Можешь попробовать реализовать.

Eigen без проблем использует внутри SSE/NEON/AltiVec.
Re[2]: Зачем цифровые компьютеры?
От: alpha21264 СССР  
Дата: 29.04.14 19:20
Оценка:
Здравствуйте, Няшка, Вы писали:


Н>Аналоговые гораздо проще и быстрее!


Вообще-то нынешние цифровые уже обогнали аналоговые. И превратились в DSP.

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Зачем шаблоны в С++?
От: alpha21264 СССР  
Дата: 29.04.14 19:23
Оценка: :)
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, alpha21264, Вы писали:


A>Возьми любую сложную программу на С++, которую писали люди, знающие С++, и там будут шаблоны.

A>"сложная" — это где много LOC, много модулей в архитектуре.

Много чего? Ты когда пишешь, подразумевай, что мне набор терминов тоже мало знаком.
Хоть ссылку на Википедию ставь.

A>Если ты нашел программу без шаблонов — покажи нам, мы поясним где ими можно улучшить код.


Ну например CUPS. Это сервер печати в Линуксе. (Есть в исходных кодах).

Течёт вода Кубань-реки куда велят большевики.
Re[2]: Зачем шаблоны в С++?
От: alpha21264 СССР  
Дата: 29.04.14 19:25
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, alpha21264, Вы писали:


A>>Люди! А для чего вы используете шаблоны?


J>Для зарабатывания денег.


Это очень общий ответ.

Течёт вода Кубань-реки куда велят большевики.
Re[10]: Because we can!
От: BulatZiganshin  
Дата: 29.04.14 19:47
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

CC>Далее, стандартный интерфейс не ограничивает никак alignment, который требуется для SSE. Unaligned access же либо кинет exception либо (если использовать соответсвующие интринсики для выгрузки в память) будет заметно медленнее.

CC>Думаешь я не пробовал?

видимо давно не пробовал. unaligned access уже давно бесплатен, хуже того — в vex-coded операциях выравнивания операндов из памяти не требуется
Люди, я люблю вас! Будьте бдительны!!!
Re[6]: Зачем шаблоны в С++?
От: CreatorCray  
Дата: 29.04.14 20:00
Оценка:
Здравствуйте, Molchalnik, Вы писали:

M>Если бы ты писал универсальный код на С

Это как?

M> адресация (*) разложилась на ассемблере как

M>mov eax, index
M>mov edx, sizeof(ParameterType)
M>mul eax
M>add eax, base

Уже неверно. sizeof (ParameterType) — константа.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[10]: Because we can!
От: CreatorCray  
Дата: 29.04.14 20:16
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Eigen без проблем использует внутри SSE/NEON/AltiVec.

А интерфейс у него как у random?
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[12]: Because we can!
От: CreatorCray  
Дата: 29.04.14 20:16
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>То что в стандарте нет другого sort — это недостаток стандарта, а никак не интерфейса std::sort

Ну дык интерфейс std::sort это же часть стандарта.
О чём собственно и речь.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[11]: Because we can!
От: CreatorCray  
Дата: 29.04.14 20:16
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>видимо давно не пробовал. unaligned access уже давно бесплатен

Для SSE?

BZ> хуже того — в vex-coded операциях выравнивания операндов из памяти не требуется

Давно не смотрел на новые команды, надо будет глянуть.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[13]: Because we can!
От: Evgeny.Panasyuk Россия  
Дата: 29.04.14 20:36
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

EP>>То что в стандарте нет другого sort — это недостаток стандарта, а никак не интерфейса std::sort

CC>Ну дык интерфейс std::sort это же часть стандарта.
CC>О чём собственно и речь.

Есть 3-way sort, есть predicate-based sort — обе имеют свои плюсы и минусы. Predicate-based — самая общая.
А есть ещё всякие integer sort, которые тоже имеют своё практическое применение.

В чём твоя претензия? В том что нет других видов сортировок в стандарте? Я думаю многие с этим согласятся (к слову сказать, в ISO C++ разных сортировок больше чем в других языках).
Но что-то не пойму, а как вообще это относится к шаблонам?
Re[3]: Зачем шаблоны в С++?
От: tdiff  
Дата: 29.04.14 20:38
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Много чего? Ты когда пишешь, подразумевай, что мне набор терминов тоже мало знаком.

A>Хоть ссылку на Википедию ставь.

позволю себе вмешаться, по-моему это lines of code
Re[3]: Зачем шаблоны в С++?
От: Abyx Россия  
Дата: 29.04.14 20:54
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>>Возьми любую сложную программу на С++, которую писали люди, знающие С++, и там будут шаблоны.

A>>"сложная" — это где много LOC, много модулей в архитектуре.

A>Много чего? Ты когда пишешь, подразумевай, что мне набор терминов тоже мало знаком.

это сокращение, а не термин.
сокращения типа KB,MB,GB — тоже расшифровывать?
A>Хоть ссылку на Википедию ставь.
викичто? тебя гугл чтоли забанил?

A>>Если ты нашел программу без шаблонов — покажи нам, мы поясним где ими можно улучшить код.

A>Ну например CUPS. Это сервер печати в Линуксе. (Есть в исходных кодах).
на С++, да?
In Zen We Trust
Re[11]: Because we can!
От: Evgeny.Panasyuk Россия  
Дата: 29.04.14 21:00
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

EP>>Eigen без проблем использует внутри SSE/NEON/AltiVec.

CC>А интерфейс у него как у random?

Eigen я привёл как пример использования шаблонов с SSE. Его легко адаптировать к любым интринсинкам как раз через специализацию. Например базовый код для SSE — 650 строк, если брать весь, со спец. функциями и специализациями для std::complex, то получается 1.5k строк — и это всё, SSE там больше нет — всё остальное в общем виде.
Re[7]: Зачем шаблоны в С++?
От: Molchalnik  
Дата: 29.04.14 21:10
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Уже неверно. sizeof (ParameterType) — константа.


Кто ж спорит, константа. Что не верного? Загрузка константы в регистр. Например, при размере ParameterType в 9 байт туда будет загружатся 9
Re[12]: Because we can!
От: BulatZiganshin  
Дата: 29.04.14 21:34
Оценка:
Здравствуйте, CreatorCray, Вы писали:

BZ>>видимо давно не пробовал. unaligned access уже давно бесплатен

CC>Для SSE?

да. процессору уже всё равно какую команду (mova,movu,ld) ты исполняешь, остались только бессмысленные проверки для mova и reg-mem операций. а при использовании vex нет и проверок
Люди, я люблю вас! Будьте бдительны!!!
Re[8]: Зачем шаблоны в С++?
От: CreatorCray  
Дата: 30.04.14 00:57
Оценка:
Здравствуйте, Molchalnik, Вы писали:

M>Кто ж спорит, константа. Что не верного? Загрузка константы в регистр. Например, при размере ParameterType в 9 байт туда будет загружатся 9

Для константы будет сгенерён точно такой же LEA eax, [eax+eax*8] как и для шаблонного.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.