Вообще-то при написании реальных программ как раз надо стремиться написать алгоритм таким образом, чтобы обрабатывать данные порциями, более-менее умещающимися в кеш, поэтому бенчмарк вполне репрезентативен. Размер массива в тесте выбран таким образом, чтобы не делать лишних настроек в Linux, связанных со стеком OpenMP.
Ну тогда зачем вы пишете что у вас "расшивка параллельных процессов по адресам памяти ускоряет работу с оперативной памятью" если в память вы не ходите, а все сидит в кэше? Если вам настройки OpenMP мешают ну... Ну тогда что вы меряете? Считать там нечего, в память бенчмарк не ходит.
К сожалению, вы не указываете на каком процессоре вы получили свой результат (очевидно, с помощью компилятора ifort).
Intel Fortran (ifort) OneAPI2023.0. Тестовая машина: IceLake 8380 Processor 2x40 cores, 60M Cache, 2.30 GHz; 256Gb DDR4. И то что я получил 10х ускорения это вообщем то ни о чем. У вас тест без зависимостей, там только закольцовка последовательная, и ее можно тоже распараллелить. А это значит что тест должен масштабироваться линейно, с увеличением количества используемых ядер. Я еще 4х где то потерял.
Ваши догадки насчет окружения я пожалуй пропущу мимо ушей. Если вы пишете бенчмарк, то придерживайтесь хотя бы здравого смысла. А он, лично мне, говорит о том что ваш вывод - неверен. Если сравнить OpenMP версию без зависимостей и coarray где вам нужно еще склеивать границы, то во втором дополнительной работы больше, и он должен быть медленнее. Будет время я промеряю ее на увеличенном размере, т.к. на размере L2 кэша особого смысла замерять нет. Да и характерное время работы бенчмарка должно быть больше погрешности измерения. А в коде дискретность таймера 1 секунда.
При датасете 1000х1000 интов общий размер массива примерно 4Мб для 32-битных интов и 8Мб для 64-хбитных. О какой работе с памятью идет речь, если это все помещается в кэш? Да и считать там мягко говоря нечего, о чем косвенно говорит время работы замеряемого цикла.
Замер на сервере вашего примера дает 2 сек для автопараллельного варианта и 6 секунд для последовательного. Что дает 3х ускорение, вместо Nx, где N - количество ядер (синхронизацией пренебрегаем в первом приближении). Теперь смотрите за руками. Увеличиваем датасет в 4 раза (2000х2000). Получаем: 27сек - последовательный вариант; 3 сек - автопараллелизатор; 3 сек - OpenMP. Что в принципе ожидаемо - автопараллелизатор это и так автоматическое распараллеливание на OpenMP. А ускорение? Уже почти 10х. Что это нам говорит? Это нам говорит что бенчмарк не репрезентативен. На мелком датасете можо измерять краевые эффекты от работы кеша, но не более. Ни о качестве кода, ни о качестве распараллеливания это нам ничего не говорит.
У «Эльбруса» компилятор действует от обратного: сначала он анализирует весь код, предполагает, где будут переходы, а после компилирует на основании того, что он знает весь код.
Ну да, ну да... Сегодня я нажал кнопку 1, и переход пошел в одну сторону, а завтра 0 и переход пошел в противоположную. Но у нас же есть магический компилятор.
Да за такую цену можно два воркстейшна поставить. И еще на зп сисадмину хватит, который будет этот линукс и в хост и в гриву ставить. Хотите - по понедельникам Слес, по вторникам - РедХат, и так далее. Убунту оставим на выходные...
Еще лучше. Был бы там полугибкий шлейф, это ок. Но там и так жесткая конструкция. Небольшой перекос и ой. А еще лучше цикличные нагрузки. Вот какого хрена так проектировать?
Я правильно понимаю что верхняя плата механически стоит на двух высоких разъемах, упираясь в верхнюю пластиковую панель? Это все её элементы крепления?
Так пытался. Делали на атомах, а почему бросили? Хз. Интел кроме ЦПУ бросал на моей памяти все. Кое что поднимал и снова бросал. Arm - Atom - мобильные маложрущие процы IOT - всякие галлилео и иже с ними Larrabe, KNF - попытка в видяху-ускоритель KNC/KNL - попытка в ускоритель не видяху OPA - попытка в Infiniband
Всмысле имплементированная в железо инструкция LZO? Или что вы имеете ввиду? Любой современный процессор это полная тьюринг машина, значит на ней можно реализовать любой алгоритм. Даже без векторных расширений. Думаю даже на Z80 его можно написать.
Так что значит ваше "архитектура представляет алгоритм"?
У меня мозги закипели на " Архитектура Эльбрус 2000 предоставляет несколько алгоритмов". Как это вы себе представляете? Вот есть сферический алгоритм в вакууме - тот же LZO. Каким образом он привязан к архитектуре? Что x86 не умеет в LZO? Или какой нибудь ARM?
Что этому помешает?
Ну тогда зачем вы пишете что у вас "расшивка параллельных процессов по адресам памяти ускоряет работу с оперативной памятью" если в память вы не ходите, а все сидит в кэше? Если вам настройки OpenMP мешают ну... Ну тогда что вы меряете? Считать там нечего, в память бенчмарк не ходит.
Intel Fortran (ifort) OneAPI2023.0. Тестовая машина: IceLake 8380 Processor 2x40 cores, 60M Cache, 2.30 GHz; 256Gb DDR4. И то что я получил 10х ускорения это вообщем то ни о чем. У вас тест без зависимостей, там только закольцовка последовательная, и ее можно тоже распараллелить. А это значит что тест должен масштабироваться линейно, с увеличением количества используемых ядер. Я еще 4х где то потерял.
Ваши догадки насчет окружения я пожалуй пропущу мимо ушей. Если вы пишете бенчмарк, то придерживайтесь хотя бы здравого смысла. А он, лично мне, говорит о том что ваш вывод - неверен.
Если сравнить OpenMP версию без зависимостей и coarray где вам нужно еще склеивать границы, то во втором дополнительной работы больше, и он должен быть медленнее. Будет время я промеряю ее на увеличенном размере, т.к. на размере L2 кэша особого смысла замерять нет. Да и характерное время работы бенчмарка должно быть больше погрешности измерения. А в коде дискретность таймера 1 секунда.
При датасете 1000х1000 интов общий размер массива примерно 4Мб для 32-битных интов и 8Мб для 64-хбитных. О какой работе с памятью идет речь, если это все помещается в кэш? Да и считать там мягко говоря нечего, о чем косвенно говорит время работы замеряемого цикла.
Замер на сервере вашего примера дает 2 сек для автопараллельного варианта и 6 секунд для последовательного. Что дает 3х ускорение, вместо Nx, где N - количество ядер (синхронизацией пренебрегаем в первом приближении).
Теперь смотрите за руками. Увеличиваем датасет в 4 раза (2000х2000). Получаем:
27сек - последовательный вариант;
3 сек - автопараллелизатор;
3 сек - OpenMP.
Что в принципе ожидаемо - автопараллелизатор это и так автоматическое распараллеливание на OpenMP. А ускорение? Уже почти 10х. Что это нам говорит? Это нам говорит что бенчмарк не репрезентативен. На мелком датасете можо измерять краевые эффекты от работы кеша, но не более. Ни о качестве кода, ни о качестве распараллеливания это нам ничего не говорит.
Там в начале ролика бутеры с черной икрой как бы намекают
Завуалированное приглашение на собеседование
Пугалки от фстэк оставьте себе.
Если документация говно, а сторонний код преставляет собой черный ящик, то можно просидеть и больше.
А предикаты как в Итаниуме там есть? Должно облегчить чет мелкое в принципе.
В х86 эхо этих предикатов - инструкция cmov.
У «Эльбруса» компилятор действует от обратного: сначала он анализирует весь код, предполагает, где будут переходы, а после компилирует на основании того, что он знает весь код.
Ну да, ну да...
Сегодня я нажал кнопку 1, и переход пошел в одну сторону, а завтра 0 и переход пошел в противоположную. Но у нас же есть магический компилятор.
Да за такую цену можно два воркстейшна поставить. И еще на зп сисадмину хватит, который будет этот линукс и в хост и в гриву ставить. Хотите - по понедельникам Слес, по вторникам - РедХат, и так далее. Убунту оставим на выходные...
От табака? То то я думаю, кто это пищит, когда курю...
Еще лучше. Был бы там полугибкий шлейф, это ок. Но там и так жесткая конструкция. Небольшой перекос и ой. А еще лучше цикличные нагрузки. Вот какого хрена так проектировать?
Я правильно понимаю что верхняя плата механически стоит на двух высоких разъемах, упираясь в верхнюю пластиковую панель? Это все её элементы крепления?
Может, только из-за электроэррозии менять проводники придется непрерывно.
Так пытался. Делали на атомах, а почему бросили? Хз. Интел кроме ЦПУ бросал на моей памяти все. Кое что поднимал и снова бросал.
Arm - Atom - мобильные маложрущие процы
IOT - всякие галлилео и иже с ними
Larrabe, KNF - попытка в видяху-ускоритель
KNC/KNL - попытка в ускоритель не видяху
OPA - попытка в Infiniband
Вот ваш Гаврилов:
https://il.linkedin.com/in/yoav-hollander-aa565630?original_referer=https%3A%2F%2Fwww.google.com%2F
"I created the e verification language, and founded Verisity to commercialize the related tools and methodologies for HW verification. "
Не очень, как то на Гаврилова смахивает...
И что вы хотели этим сказать - разверните мысль...
Всмысле имплементированная в железо инструкция LZO? Или что вы имеете ввиду? Любой современный процессор это полная тьюринг машина, значит на ней можно реализовать любой алгоритм. Даже без векторных расширений. Думаю даже на Z80 его можно написать.
Так что значит ваше "архитектура представляет алгоритм"?
У меня мозги закипели на " Архитектура Эльбрус 2000 предоставляет несколько алгоритмов". Как это вы себе представляете? Вот есть сферический алгоритм в вакууме - тот же LZO. Каким образом он привязан к архитектуре? Что x86 не умеет в LZO? Или какой нибудь ARM?
Это смотря где вы компилируете. Собрано будет под тот сет инструкций, на котором у вас билдовая система, а у пользователя может быть и получше.