A A A A Автор Тема: РОС - программа расчёта оптики телескопов  (Прочитано 87897 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlirN

  • Новичок
  • *
  • Сообщений: 27
  • Благодарностей: 7
  • Мне нравится этот форум!
    • Сообщения от AlirN
2. Рекламные "параллельные" потоки практически не дают ускорения. Но и это зависит от процессора и его производителя.
"Рекламные" потоки вовсе не рекламные и дают ускорение, но ускорение это всего около 30-40% в лучшем случае и при условии, что параллелятся потоки без большого количества математических инструкций. Упрощённо работает это так: в каждом ядре процессора находится несколько (например, два) декодировщика поступающих в ядро из памяти команд. Так что ядро может экономить время, декодируя инструкции и подгружая данные сразу для нескольких потоков одновременно. Но арифметико-логическое устройство (АЛУ), которое и занимается математическими вычислениями, в ядре всё равно только одно (как правило). Поэтому если пытаться распараллелить большое количество потоков именно с математическими вычислениями, то чуда не произойдёт, и скорость не увеличится, потому что самих АЛУ меньше, чем потоков.
Ключевые слова: hyper-threading и smt.
« Последнее редактирование: 03 Июл 2020 [13:36:41] от AlirN »


Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
Но арифметико-логическое устройство (АЛУ), которое и занимается математическими вычислениями в ядре, всё равно только одно (как правило)
- это принципиальный нюанс. Спасибо за разъяснение!
Может быть, АЛУ лучше назвать сортировщиком команд, который занимается планированием работы для остальных ядер (или только единственного ядра)?

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
В последней версии РОС https://yadi.sk/d/vviS6jkzxqKq4 подкорректирован интерфейс программы (FullTestOS).
Для построения зависимости числа штреля от длины волны - график Ksh = f(Lam) - требуется много времени. Вот здесь бы и применить параллельные потоки! Но алгоритм очень сложен и путан - потребуется особая сосредоточенность ...
Можно только - вослед за Д.А. Серёгиным - посетовать, что трудоголики вымерли, и некому продолжить начинание (в скобках замечу: это - несмотря на то, что никто не собирается следовать совету Стерлигова разрушать эл.станции и съезжать из города в деревню).
« Последнее редактирование: 03 Июл 2020 [13:39:27] от ekvi »

Оффлайн AlirN

  • Новичок
  • *
  • Сообщений: 27
  • Благодарностей: 7
  • Мне нравится этот форум!
    • Сообщения от AlirN
Может быть, АЛУ лучше назвать сортировщиком команд, который занимается планированием работы для остальных ядер (или только единственного ядра)?
Нет, АЛУ выполняет только арифметические и логические операции. Складывает, умножает и делит числа.
Кстати, если правильно помню, в современных Ryzen'ах от AMD содержится по два АЛУ на ядро, которые могут работать параллельно для чисел малой разрядности или совместно для чисел большой разрядности. Но не знаю, можно ли их загрузить данными из разных потоков.

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
АЛУ выполняет только арифметические и логические операции
т.е. в, понятиях 1-ядерного процессора, это - сопроцессор?
в современных Ryzen'ах от AMD содержится по два АЛУ на ядро
Но это означает, что, например, 2х-ядерный 4х-поточный процессор (таков один из моих АМД-процессоров) и является реально 4х-ядерным.
Так оно, видимо, и есть, поскольку этот процессор показывает самые высокие темпы счёта.
А где об этом можно познакомиться в деталях? У меня есть только М. Гук. "Процессоры Pentium II, Pentium Pro и просто Pentium" за 1999 г.
По Вашим "ключам" наткнулся на статью https://3dnews.ru/172013, в которой вопрос несколько проясняется.
И ещё: https://www.agner.org/optimize/
А отсюда https://www.chaynikam.info/cpu_ht_smt.html вот это резюме:
"В процессорах Intel технология многопоточности называется Hyper-Threading (HT), в процессорах AMD - Simultaneous MultiThreading (SMT).
Кроме названий, эти технологии отличаются еще и многими аспектами реализации. Однако, суть их одинакова. HT и SMT повышают эффективность использования вычислительных возможностей процессора за счет параллельного выполнения каждым его ядром двух потоков вычислений.
Ядра мультипоточного процессора содержат по два контроллера прерываний и набора регистров. Операционная система компьютера каждое такое физическое ядро воспринимает как два логических ядра.
В большинстве приложений HT и SMT значительно повышают быстродействие процессора. Однако, их эффективность зависит как от самой технологии, так и от используемого программного обеспечения.
Наличие Hyper-Threading в процессоре Intel предполагает, что один из потоков вычислений, обрабатываемых его ядром, является основным. Второй поток выполняется только в те периоды времени, когда ресурсы ядра по каким-то причинам не полностью заняты или временно не заняты основным потоком (оста́точный принцип). В некоторых случаях, на второй поток может приходиться до 50% ресурсов ядра. Но такое бывает не часто. В приложениях, в которых основной поток эффективно использует ядро, пользы от Hyper-Threading будет значительно меньше. В среднем, этот показатель составляет около 20-30%. В процессоре без Hyper-Threading эти ресурсы попросту не используются.
Результаты тестов дают основания считать, что алгоритм работы Simultaneous MultiThreading, используемый в процессорах AMD, отличается от Hyper-Threading в сторону большего равноправия обоих потоков. В одних приложениях это себя оправдывает (рендеринг), в других - приводит к снижению производительности (видеоигры).
Однако, технологии мультипоточности, а также использующее их программное обеспечение, постоянно совершенствуются, становясь все более эффективными. Процессор с поддержкой HT или SMT - однозначно более предпочтительный вариант, чем аналогичный процессор без них. Ну а на случай, если в каком-то важном приложении мультипоточность будет негативно влиять на быстродействие, в BIOS компьютера предусмотрена возможность ее отключения."
« Последнее редактирование: 03 Июл 2020 [19:33:59] от ekvi »

Оффлайн Lex1

  • *****
  • Сообщений: 2 724
  • Благодарностей: 204
    • Сообщения от Lex1
А где об этом можно познакомиться в деталях?
Ну с этим то проблем нет,  например en.wikichip.org/wiki/amd/microarchitectures/zen ну и у агнер фога есть прикладные моменты.

является реально 4х-ядерным
Для программы да. На практике SMT от AMD даёт порядка 40% прибавки к производительности. От Intel ~25%.

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
Ну с этим то проблем нет
Спасибо!

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
Можно даже не благодарить.
За OZON спасибо! Но озонатор за те же  деньги лучше.

Переключатель Hyper-Thread в биосе 2х-ядерного 4х-поточного действительно есть: ВКЛ - ускорение 2.3х, ОТКЛ - ускорение 1.7х.

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
Чтобы понимать, что ускорять, надо сначала выяснить, что является бутылочным горлышком: вычисления на процессоре, обращение к памяти, ввод-вывод, отрисовка в процессе или ещё что-то. Пока я вижу лишь тыканье пальцем в небо. Нормальная оптимизация производительности начинается с профилирования специальными инструментами.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
На процессоре с 24 потоками загрузка 62%.
С загрузкой не проблема - "... жернова гремят, много грохота ...".

Принципиально важно: какое ускорение дали 24 ядра? Теперь переключатель "считать последовательно / параллельно" перенесён на страницу "Тест" левого блокнота.
Если всё те же 1.7х, то только зря потратился ...

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
Но арифметико-логическое устройство (АЛУ), которое и занимается математическими вычислениями, в ядре всё равно только одно (как правило).
АЛУ, не смотря на возражения, - это планировщик (CPU), т.к. все его вычисления ограничиваются обработкой целых чисел. Инженерные программы - даже при построении целочисленной графики - обрабатывают числа с плавающей запятой. А этим занимается сопроцессор (FPU), который, наверное, до сих пор единственный на весь процессор, не смотря на изобилие ядер. Если это так, тогда понятно, почему 4GOOD на 4х ядрах даёт ускорение только 2.7х.

В связи с этим для 64-битных машин все вычисления нужно переводить на целочисленную арифметику (Обращаюсь к Серёгину: это - задел для Ваших студентов, Дмитрий Александрович). Как тут не затоскуешь по Fort'у, оснащённому этой математикой!

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
А этим занимается сопроцессор (FPU), который, наверное, до сих пор единственный на весь процессор, не смотря на изобилие ядер.
:facepalm: Ваши знания устарели лет на 15.
На настоящий момент SSE, AVX и прочие SIMD-расширения давно являются частью инструкций процессора, и, кроме того, способны обрабатывать несколько операндов за одну инструкцию параллельно. Я уже молчу про массивный скалярный параллелизм (SMP), реализованный с помощью графических и прочих специализированных ядер.

А ускорение менее чем количество ядер как раз получается либо из-за конкурентного использования памяти, либо из-за синхронизации доступа, либо из-за накладных расходов на обслуживание параллелизма. А это значит, что надо выявлять проблемы.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
ускорение менее чем количество ядер как раз получается либо из-за конкурентного использования памяти, либо из-за синхронизации доступа, либо из-за накладных расходов на обслуживание параллелизма.
1. Память отгорожена наглухо: никаких мьютексов и пр. реверансов между потоками; в каждом потоке свой управляющий код;
2. Загрузка-выгрузка новой информации в / из производится только при создании / стоянии каждого потока.
3. "Накладные расходы" (загрузка-выгрузка) несоизмеримо меньше времени работы потока. Именно поэтому принципиально важен ответ AP (одного из участников обсуждения) -  о результатах оптимизации на 24 ядрах (а параллелизм задействован пока только в процедуре оптимизации ОС).
4. Да искать ошибку в коде никогда не вредно: иной раз простое использование числа пи может привести к конфликту между потоками (но сейчас всё раздельно). Тем более, что пока потоки выдают всякий раз разные результаты. Но это не вносит никакого отрицательного действия,а только положительно сказывается на конечном результате: имеет место "случайный поиск", позволяющий углублять минимум.

РОС для пользователей: https://yadi.sk/d/vviS6jkzxqKq4
« Последнее редактирование: 05 Июл 2020 [19:40:52] от ekvi »

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
1. Память отгорожена наглухо: никаких мьютексов и пр. реверансов между потоками; в каждом потоке свой управляющий код;
Ошибка номер один: зависимость по памяти и синхронизация кода - это совершенно разные вещи.
Структуры данных cache-friendly?

2. Загрузка-выгрузка новой информации в / из производится только при создании / стоянии каждого потока.
А как часто создаются сами потоки?

3. "Накладные расходы" (загрузка-выгрузка) несоизмеримо меньше времени работы потока. Именно поэтому принципиально важен ответ AP (одного из участников обсуждения) -  о результатах оптимизации на 24 ядрах (а параллелизм задействован пока только в процедуре оптимизации ОС).
Кстати, а есть ли в процессе работы потоков какие-либо операции освобождения-выделения памяти? Если есть, то аллокатор всегда захватывает глобальную на процесс блокировку.

4. Да искать ошибку в коде никогда не вредно: иной раз простое использование числа пи может привести к конфликту между потоками (но сейчас всё раздельно). Тем более, что пока потоки выдают всякий раз разные результаты. Но это не вносит никакого отрицательного действия,а только положительно сказывается на конечном результате: имеет место "случайный поиск", позволяющий углублять минимум.
Здесь волосы начинают вставать дыбом, ибо речь идёт как минимум о race condition.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/

Оффлайн AP

  • ***
  • Сообщений: 144
  • Благодарностей: 10
  • Мне нравится этот форум!
    • Сообщения от AP
Прошу прощения, что не сразу ответил. При таких настройках вылетает с ошибкой Access violation at address 00401E61 in moudule 'ROS#.exe' Write of address 80000000.
После закрытия основного окна продолжает висеть в диспетчере задач.
При настройках по умолчанию работает, загрузка как раньше.
« Последнее редактирование: 05 Июл 2020 [22:09:00] от AP »

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
А как часто создаются сами потоки?
Один раз - перед началом оптимизации ОС.
На странице #791 этой темы (спуститесь по ссылке
https://astronomy.ru/forum/index.php/topic,105909.msg5075469.html#msg5075469)
имеется подборка кода в текстовом файле parCalcing.txt.
Если у Вас будут конструктивные предложения по его модификации, готов их апробировать.

Оффлайн ekviАвтор темы

  • *****
  • Сообщений: 7 052
  • Благодарностей: 408
    • Сообщения от ekvi
При таких настройках вылетает с ошибкой
Сейчас ограничения сняты и сам код модернизирован - https://yadi.sk/d/vviS6jkzxqKq4
Проведите, пожалуйста, повторный тест: у моих ПК только по 2 ядра и по 4 лог. потока (один - Intel, другой - AMD) и мне не понятен эффект от применения параллельных потоков.

Оффлайн AP

  • ***
  • Сообщений: 144
  • Благодарностей: 10
  • Мне нравится этот форум!
    • Сообщения от AP
Сейчас ограничения сняты и сам код модернизирован - https://yadi.sk/d/vviS6jkzxqKq4
Проведите, пожалуйста, повторный тест: у моих ПК только по 2 ядра и по 4 лог. потока (один - Intel, другой - AMD) и мне не понятен эффект от применения параллельных потоков.
Сейчас загружает на полную.

Но после остановки оптимизации вылаетает ошибка access violation at address 004034BC. Read of address 00559004.

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
Если у Вас будут конструктивные предложения по его модификации, готов их апробировать.
Переписать на нормальный язык с нормальными гайдлайнами в части именования переменных, выкинуть к чёртовой матери сей архаичный компилятор.
У природы нет плохой погоды, у неё просто на нас аллергия.

Учение без размышления бесполезно, но и размышление без учения опасно /Конфуций/
Слово есть поступок. /Л. Толстой/