eDmk
Вообще то такие вещи уже разруливаются через анализ cpuid и брать нужную функцию (через указатель например инициализировать), и эта функция как раз работает через максимально возможный набор инструкций. Intel Optimization Guide об этом упоминает, и даёт даже один из вариантов решений. Но там плюсы. На паскалях чуть иначе, но идея та же.
Короче, я реально понимаю твою мотивацию, поэтому мой софтрендер в базе написан SSE3 max + статическая линковка. Чтобы запускалось везде. Но производительность ты при этом сильно теряешь. Есть смысл работать через указатели. Сделай тестово на примере действительно важной функции умножения матрицы на массив векторов.
И разные реализации под разный набор инструкций. Ну на плюсах типа такого метода: void mul_mtx4_vtx4s(vector<vec4>& r, mtx4 const& m, vector<vec4> const& verts);
Ну и определяй нужный через cpuid и используй. На C/C++ просто на старте берётся указатель на функцию и инициализируется один раз нужной функций по результатам cpuid. Довольны будут все, и на старом железе, и на новом.
Truthfinder
> Или ты 32 битные процы не рассматриваешь?
>
>
Ниже Core 2 Duo не рассматриваю. Они уже ничего не стоят, но люди покупают.
В купе со средней видюшкой поиграть можно. Очень дешевая сборка получается.
За 7-10к целый комп собрать можно. Не у всех денег лом.
Truthfinder
> разные реализации под разный набор инструкций
Да я понимаю. У меня везде перегрузка функций сделана.
Я просто не успеваю писать пока. Я же не программист. Я дизайнер :)
Иначе основная работа стоять будет. Программинг так - хобби.
Truthfinder
> Да это с первого поста было видно, что тут демагогия сплошная будет
Демагогия - это "видел/не видел", "я сильно сомневаюсь" и "вряд ли даст". Если ты не понял, о чем я говорю - просто проходи мимо.
> Ваши советы далеки от реальности, что там имеет смысл, а что нет.
Ого, у нас на форуме завелось мерило реальности.
Truthfinder
> тестово на примере действительно важной функции умножения матрицы на массив векторов.
Самая важная функция только-что называлась "умножение матрицы на вектор".
Ghost2
> на таких дубовых компиляторах, как у дельфей
Не пишите глупости про Delphi пожалуйста.
По скорости ничем от C++ не отличается. Ибо оба бинарные компиляторы.
Нормальные программисты не меряются «инструменами».
Они просто обсуждают алгоритмы.
Вот труфайндер пишет на Ц++, а я на паскале - и о боже, общий язык найден :)
Ghost2
> > тестово на примере действительно важной функции умножения матрицы на массив
> > векторов.
> Самая важная функция только-что называлась "умножение матрицы на вектор".
Ну так чем они отличаются то? Я видел ответ AoS SoA. Странно.
eDmk
> По скорости ничем от C++ не отличается.
На самом деле, отличаются. Компиляторы C/С++ намного, намного медленнее работают. Потому что пытаются оптимизировать код.
> Нормальные программисты не меряются «инструменами».
Я не хотел задеть ничьих чувств, когда написал, что компилятор дельфей дубовый. Это просто факт. Мне очень жаль, что ты обиделся, приношу свои искренние извинения. Потом, я не программист. И ты там выше написал, что не программист. Нам нечем меряться только поэтому.
Truthfinder
> Ну так чем они отличаются то?
OMG, это невозможно. Отличается тем, что оптимизируется вся операция, а не составная ее часть. Ну вот и выше ты вспомнил про разные наборы. Попробуй так сдаелать с отдельной функцией - производительность будет засажена тупо косвенным вызовом помноженным на количество операций. На практике (опять же, не знаю как там в реальности) можно сделать базовые классы SIMD операций с виртуальными функциями и унаследовать конкретные реализации.
> Я видел ответ AoS SoA. Странно.
Ты увидел "например". На бумажке они ничем не отличаются, как были в девятнадцатом веке матрицы и векторы, так и сейчас они ими и остались.
Ghost2
> Потом, я не программист.
Это объясняет советы уровня джуниора.
> На самом деле, отличаются. Компиляторы C/С++ намного, намного медленнее
> работают. Потому что пытаются оптимизировать код.
Вот что правда, то правда. Умеете же толково, когда захотите. Оптимизатор реально сильно замедляет сборку. Я уже молчу про тот же simd. На делфях такой фокус с godbolt не провернёшь, как нам тут показывали, где gcc c O3 перемножение матриц делает по сути идеально.
> Попробуй так сдаелать с отдельной функцией
Да не буду я уже ничего пробовать. Потому что я не пробовал, а делал. И чем отличается знаю.
Один из важных (действительно важных) пунктов: матрица всегда в регистрах, не надо для каждого вектора её отдельно туда пихать. При одиночных вызовах это не так. Остальное и без меня сообразите, вы же тоже что-то понимаете в этом.
Остальное без комментариев, так как не несёт полезной информации.
Truthfinder
> Это объясняет советы уровня джуниора.
Это не советы, а основы оптимизации под SIMD. Печально, что такой сеньор как ты, не в состоянии этого понять после первого сообщения. Если ты дальше хочешь поспорить хоть над одним моим заявлением в этой теме, то предлагаю тебе начинать с цитирования, а не с оценок реальности или моего уровня.
> Потому что я не пробовал, а делал.
То есть ты делал косвенный вызов на каждое отдельное умножение для поддержки разных наборов инструкций? Браво, конечно, но я бы на твоем месте об этом никому не рассказывал. Особенно в темах про оптимизацию чего-либо.
Ghost2
> Это не советы, а основы оптимизации под SIMD. бла-бла-бла...
Правила оптимизации они общие, касаются не только SIMD. Например: преждевременная оптимизация - зло. В книге Кнута ещё до этих ваших симдов написано.
> То есть ты делал косвенный вызов на каждое отдельное умножение для поддержки
> разных наборов инструкций?
Ну потому что ты не программист, и как и положено ничего не понял. А на эмоциях тут же сдампил бяку в пост. (Психанул то есть, для джунов норм, они часто эмоциональные)
Косвенный вызов делается не для мелких операций вроде сложения двух векторов, а для ресурсоёмкой, например: отрисовки треугольника, обработки массива. Тогда стоимость одного косвенного вызова стремится к нулю, на фоне стоимости более крупной операции. Например, отрисовка треугольника тысячи - десятки тысяч тактов. Сколько будет стоить одна косвенная адресация в данном контексте, в процентах от той, которую она вызывала?
Truthfinder
> Ну потому что ты не программист, и как и положено ничего не понял
Вот примерно как развивался диалог про косвенные вызовы:
G: Попробуй так сделать с отдельной функцией - производительность будет засажена
T: Да не буду я уже ничего пробовать. Потому что я не пробовал, а делал
G: Это круто, но с отдельной функцией так делать не надо
T: Сам дурак, потому что я имел в виду совсем не это, а вот это
То, что речь о "вот этом" идет еще с поста #127 (а глобально - с #89), сеньорам почему-то непонятно. Что-то я сейчас засомневаюсь, что ты сеньор.
А если с самого первого моего сообщения в теме начинать, то это звучало так:
G: Нет смысла оптимизировать отдельное умножение
T: Покажи как надо
G: Нужно умножать на массив
T: Какие отличия
G: Например, в раскладке данных
T: Nonsence по поводу реальности софтрендеров и размеров МПХ
Ты адекватный вообще?
Ghost2
> Что-то я сейчас засомневаюсь, что ты сеньор.
Я себя синьором не называл. Так что это чья-то фантазия. Остальное видимо тоже.
> Ты адекватный вообще?
Видно же как ты все диалоги переврал, они не отражают действительности, а только то, что ты так видишь. Ну то есть такие же фантазии, как и то, что я синьор.
А вот мою адекватность может определить только стороннее лицо, а не я и не ты. Потому что мы заинтересованные лица. Позови Suslik, пусть он рассудит. Ему то ты веришь?
Truthfinder
> Я себя синьором не называл.
Ну, за 15 лет на форуме можно уже и сеньором стать. Хотя бы для того, чтобы в джуниоры кого-то определять.
> Видно же как ты все диалоги переврал
Какая именно фраза тебе не нравится?
> Позови Suslik, пусть он рассудит. Ему то ты веришь?
Вопрос про адекватность был риторическим. В том смысле, что ответ на него сам по себе не очень интересен. И не думаю, что мнение суслика что-то в этом плане изменит.
Ghost2
> Ну, за 15 лет на форуме можно уже и сеньором стать.
Мне надо?
> Какая именно фраза тебе не нравится?
Тебе зачем?
> Вопрос про адекватность был риторическим. В том смысле, что ответ на него сам
> по себе не очень интересен. И не думаю, что мнение суслика что-то в этом плане
> изменит.
Психиатр, в неадекватные определять?