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

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

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

  • *****
  • Сообщений: 7 043
  • Благодарностей: 406
    • Сообщения от ekvi
Поиск соседних минимумов, выход из локальной ямы.
Попытался сымитировать "режим Хаммера".
В БФГС есть подпрограмма, промежуточная между линейным спуском, на котором ездит БФГС, и блоком тестирования ОС. Обычно БФГС, вычислив матрицу градиентов Г по переменным оптимизации П, нормирует эту матрицу и даёт приращения для нового значения Пн, одинаковые для всех переменных по формуле: Пн = Пс+Г*К. Если в этой формуле для каждой переменной сделать свой коэффициент Кп, то, можно надеяться, оптимизация пойдёт иным путём.
Сделал, пошла, но .. выдала худшие результаты, чем в оригинале (=срединным, "царским" путём).
Делал отступления от "царского" пути и на 10%, и на 1% и на 0.001%, и варьированную -  в зависимости от приближения к минимуму. Может сначала ускориться, затем - пойти по горизонту. Но всегда даёт более высокий минимум, чем в оригинале: срединный путь оказывается наискорейшим.
Можно сказать, первая попытка "заплыва по Хаммеру" оказалась неудачной.
« Последнее редактирование: 03 Авг 2020 [11:32:48] от ekvi »

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

  • *****
  • Сообщений: 7 043
  • Благодарностей: 406
    • Сообщения от ekvi
На "большое ядро" - свой. Дальше вопрос в количестве его вычислительных блоков и их быстродействии на конкретных операциях (квадратном корне, например).
А на "маленькое ядро"?
В контексте дебатов вопрос стоял так: большинство приложений для Windows написаны в сишных средах , где используются числа с плавающей запятой, представленные 8 байтами машинной памяти (формат double). В этих средах (VB, VS, Qt и т.п.) формат 10-байтного представления чисел extended не используется. Формат extended известен в Дельфи и применяется в программе РОС как основной формат чисел с плавающей запятой.
Эксперимент показывает, что оптимизация оптических систем на 8 и на 10 байтах даёт сильно разнящиеся результаты в пользу 10-байтного формата. Отсюда следует, что всякого рода векторные инструкции (SSE, MMX и пр.), используемые для "тяжёлой" графики, для оптимизации оптики не пригодны. Зная тенденцию современной вычислительной техники, возникает подозрение, что чем далее, тем более процессор освобождается от обработки "устаревшего", а потому никому не нужного 10-байтного числа. То есть возникают два вопроса.
1. Поддерживается ли современными процессорами 10-байтный формат? Вычисления показывают: поддерживается.
2. Имеет ли смысл распараллеливать вычисления 10-байтных чисел, если в процессоре только один сопроцессор - не зависимо от числа ядер? Эксперименты дают неоднозначные результаты, и, видимо, зависят от модели (внутреннего устройства) процессора.
Раньше математический сопроцессор обрабатывал 10-байтные числа (80 бит), а выдаваемый результат вычислений зависел от запросов пользователя - double (8б) или extended (10б). Сопроцессор ставился в отдельный разъём. Потом сопроцессор стал входить в состав процессора и его перестали упоминать. Как обстоят дела сегодня, с появлением процессоров, состоящих из нескольких ядер, я не нашёл в интернете.
То, что я услышал здесь, мне давно известно, но подтверждения тому, что ядро процессора = АЛУ + Блок для векторных вычислений+ Блок для чисел формата Extended - в литературе я не нашёл. Если у кого есть ссылка, подайте нищему духом.
« Последнее редактирование: 03 Авг 2020 [13:19:59] от ekvi »

Оффлайн Алексей Юдин

  • *****
  • Сообщений: 28 792
  • Благодарностей: 1131
  • Так-с, где тут у Вас Кровавое Мясное Бодалово?
    • Сообщения от Алексей Юдин
На маленьком ядре FX один FPU на модуль. На недоядрах атомного класса свои, но очень слабые.

Насчёт инструкций - в 64-бит режиме работа однозначно идёт с SSE.

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

  • *****
  • Сообщений: 7 043
  • Благодарностей: 406
    • Сообщения от ekvi
На недоядрах атомного класса свои, но очень слабые.
Между нами девушками говоря, 4гуд взят в качестве игрушки, но считает он по-взрослому, точно, заряд держит месяцами - у него нет винчестера и сидирома, стоит Windows 10, экран 1920х1080.  Единственный недостаток - тормозной: не только тактовая частота низка - это полбеды; у него нет внутреннего конвейера - Атом и есть атом! На нём удобно проверять ускорение за счёт распараллеливания на физических ядрах по сравнению со встроенной поточностью.
« Последнее редактирование: 03 Авг 2020 [14:31:44] от ekvi »

Оффлайн Алексей Юдин

  • *****
  • Сообщений: 28 792
  • Благодарностей: 1131
  • Так-с, где тут у Вас Кровавое Мясное Бодалово?
    • Сообщения от Алексей Юдин
А я себе взял в начале года Thinkpad T450 за 13 т.р. чтобы до ДДР5 досидеть. Производительность уже почти современная, плюс хоть и ранний, но 14-нм техпроцесс. Видюха встроенная, скромный охлад тонкого ноута отлично тянет 15-Вт ТДП проца. Хаммерит вовсю для своих 2/4.

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

  • *****
  • Сообщений: 7 043
  • Благодарностей: 406
    • Сообщения от ekvi
А я себе взял в начале года Thinkpad T450 за 13 т.р. чтобы до ДДР5 досидеть. Производительность уже почти современная, плюс хоть и ранний, но 14-нм техпроцесс. Видюха встроенная, скромный охлад тонкого ноута отлично тянет 15-Вт ТДП проца. Хаммерит вовсю для своих 2/4.
Может, Алексей, Вы сможете описать процесс работы оптимизатора в режиме Hammer? - чтобы под эти слова я мог "подобрать музыку" на коде.

Оффлайн Алексей Юдин

  • *****
  • Сообщений: 28 792
  • Благодарностей: 1131
  • Так-с, где тут у Вас Кровавое Мясное Бодалово?
    • Сообщения от Алексей Юдин
В мануале описано лучше всего, а так оно выглядит чёрным ящиком практически - только промежуточные варианты в процессе эволюции можно наблюдать.

Грузит, как выше написал AP, хорошо и многопоточно, в т.ч. на практически интересных лёгких функциях. Очень чувствительно к скорости однопоточного обновления системы (3-я графа в тесте производительности) и сильно тормозит на нума-системах с медленным снупом (например G34). Видно, что под серьёзные компы не оптимизировалось, да и в рекомендациях совет под рабочую станцию - быстрая однопроцессорка.

Кстати, насчёт лёгкости функций - в кодфайве вообще есть возможность иметь в целом монохромную функцию качества с местной дифференциальной оценкой хроматизма.

CodeV-PC, кстати, вообще совсем недавно стал многопоточным и ещё позже стал стёкла перебирать как Земакс. Однако, это Столп, на котором росла почти вся их оборонка, хотя она могла и на спарках это делать...
« Последнее редактирование: 03 Авг 2020 [16:24:13] от Алексей Юдин »

Оффлайн e+

  • *****
  • Сообщений: 4 781
  • Благодарностей: 188
  • Урания, ВАГО
    • Сообщения от e+
... В контексте дебатов вопрос стоял так: большинство приложений для Windows написаны в сишных средах , где используются числа с плавающей запятой, представленные 8 байтами машинной памяти (формат double). В этих средах (VB, VS, Qt и т.п.) формат 10-байтного представления чисел extended не используется. Формат extended известен в Дельфи и применяется в программе РОС как основной формат чисел с плавающей запятой. ...
В C/C++ есть тип long double. С 1989-года - в стандарте.

Цитата
2. Имеет ли смысл распараллеливать вычисления 10-байтных чисел, если в процессоре только один сопроцессор - не зависимо от числа ядер? Эксперименты дают неоднозначные результаты, и, видимо, зависят от модели (внутреннего устройства) процессора.
Раньше математический сопроцессор обрабатывал 10-байтные числа (80 бит), а выдаваемый результат вычислений зависел от запросов пользователя - double (8б) или extended (10б). Сопроцессор ставился в отдельный разъём. Потом сопроцессор стал входить в состав процессора и его перестали упоминать. Как обстоят дела сегодня, с появлением процессоров, состоящих из нескольких ядер, я не нашёл в интернете.
То, что я услышал здесь, мне давно известно, но подтверждения тому, что ядро процессора = АЛУ + Блок для векторных вычислений+ Блок для чисел формата Extended - в литературе я не нашёл. Если у кого есть ссылка, подайте нищему духом.
Важно, о каком параллелелизме идёт речь. Ядро современного CPU - это большой набор блоков, которые обрабатывают разные операции и могут работать независимо. Из этого возникает возможность во время выполнения параллелить инструкции внутри одного потока, насколько это позоволяет сочетание кода и конкретной модели CPU. При этом - в разных процессорах это будет работать по разному. Отсюда же - разная эффективность потоков в разных процессорах. В AMD Ryzen включение SMT часто даёт прирост раза в полтора (в валовой производительности), а HT в Intel-ах - в среднем - процентов 20 или меньше. Иногда 0 или даже в "-".

могу запустить на Ryzen 12C / 24T
Для потенциальных пользователей, наверное, будет интересно: и скорость счёта, и скорость нагрева.
Хьюлет-паккардовский ноут, который был мной использован для экспериментов (2х-ядерный АМД) -  самый хилый по теплостойкости из тех, которые есть в моём арсенале, и он не показателен для ассов.
Если интересно, то на всякий случай - что именно запускать? :) С нагревом, если всё сделано по человечески - всё хорошо, он (впрочем, как и другие компьютеры) у меня 24/7 считает проекты распределённых вычислений на всех потоках. :) Ноутбук, как ни крути, это всё-таки не компьютер. ;D
« Последнее редактирование: 03 Авг 2020 [16:50:13] от e+ »

Оффлайн xd

  • *****
  • Сообщений: 17 982
  • Благодарностей: 378
    • Skype - deimos.belastro.net
  • Награды Открытие комет, астероидов, сверхновых звезд, научно значимые исследования.
    • Сообщения от xd
    • Белорусская любительская астрономическая сеть
В C/C++ есть тип long double. С 1989-года - в стандарте.
Но нет гарантий, что это будет. Может быть и синоним для double, и формат x87, и 128-битный.
У природы нет плохой погоды, у неё просто на нас аллергия.

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

Оффлайн e+

  • *****
  • Сообщений: 4 781
  • Благодарностей: 188
  • Урания, ВАГО
    • Сообщения от e+
В C/C++ есть тип long double. С 1989-года - в стандарте.
Но нет гарантий, что это будет. Может быть и синоним для double, и формат x87, и 128-битный.
Есть гарантия того, что есть в языке. Если человеку потребовался именно long double, то и тем, как именно его поддерживает тот или иной компилятор под ту или иную платформу - уж поинтересоваться следует. :) Очевидно, что между Windows + Intel и Raspbian + ARM - разница вполне может быть.

Оффлайн Алексей Юдин

  • *****
  • Сообщений: 28 792
  • Благодарностей: 1131
  • Так-с, где тут у Вас Кровавое Мясное Бодалово?
    • Сообщения от Алексей Юдин
Ноутбук, как ни крути, это всё-таки не компьютер.
Если охлад тянет стабильный буст хотя бы в 20-30 градусах от tjmax - то вполне себе компьютер.

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

  • *****
  • Сообщений: 7 043
  • Благодарностей: 406
    • Сообщения от ekvi
В мануале описано лучше всего
Где-то был год за 2015 - надо поискать.
росла почти вся их оборонка
на чём она растёт, известно: типа ДОСовского ОПАЛа, сочинённого сторонним программистом (как сегодня пишется "Бухгалтерия"..
есть тип long double
Да, спасибо, за напоминание: в 1990х писал программу на С.
о каком параллелелизме идёт речь
Что и как параллелит сам процессор - мы все начитаны и наощуп убедились: работает как зверь, даже от расчётов на видеокарте пришлось отказаться: внутренний конвейер процессора не отстаёт от изысков распараллеливания задачи на потоки.
Что в РОС поставлено на параллель - выше даже модуль с кодом приведён - текстовый файл в #791 сообщении.
Ноутбук, как ни крути, это всё-таки не компьютер.
Я согласен: ноут, чтобы не скучать. Мой интеловский стационар 2яд 4пот в 6 раз быстрее 2яд ХьюлетПаккардовского АМД, хотя такт.частоты одного уровня.
Но нет гарантий, что это будет
- да, тенденция отрицательная.
Есть гарантия того, что есть в языке
Тут, скорее, гарантия упёртости спецов сохранить эту возможность. Есть пример: группа программистов в В-Британии, написавшая книгу "Рецепты вычислений", наполненную исходным кодом, сначала на Фортране (долгое время), затем - на Паскале и, наконец, на С. Но, как шутит М. Жванецкий, "С уходом профессионалов со сцены равновесие между сценой и залом восстанавливается". Так и здесь: ушли британцы - канул влету фортран, разжал руку Борланд - исчезла Дельфи и т.д.
Не с целью критикнуть, но только охарактеризовать: запад любит с минимума выжать по-максимуму. С одной стороны, это не плохо: хороша верёвка длинная, но речь - короткая. Но надо вспомнить Максутова: "но мы всегда будем делать только 1классную оптику" - чтобы не кусать локти во время сиинга: запас карман не тянет и из большого маленькое всегда можно сделать, а вот наоборот - не растянешь!.
Кстати, есть алгоритм прогона лучей через ОС, повышающий точность вычисления волновой ошибки в ... 1000 раз. В своё время ядавал его А. Водянику - для расчета оптики на 4б флоатах (в 2008м в-карта была одиночной точности. Так что проблема double - extended во многом искусственная. Просто переучиваться мне уже поздно, а повторять всё сначала уже нет сил:20 тыс операторов, 20 модулей, не одна сотня графиков ...
« Последнее редактирование: 03 Авг 2020 [19:24:42] от ekvi »

Оффлайн Алексей Юдин

  • *****
  • Сообщений: 28 792
  • Благодарностей: 1131
  • Так-с, где тут у Вас Кровавое Мясное Бодалово?
    • Сообщения от Алексей Юдин
Но надо вспомнить Максутова: "но мы всегда будем делать только 1классную оптику"
Правда, сделал её в итоге в СССР в метровом+ классе только serega2007, уже сильно после Максутова....

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

  • *****
  • Сообщений: 7 043
  • Благодарностей: 406
    • Сообщения от ekvi
Если не считать 6м-го, Максутов лично реализовал 0.7м (хотя, он скорее "держится" за ручки перед фотокамерой ...) Тут вам, центральным, известнее, чем нам, провинциалам.

Оффлайн Алексей Юдин

  • *****
  • Сообщений: 28 792
  • Благодарностей: 1131
  • Так-с, где тут у Вас Кровавое Мясное Бодалово?
    • Сообщения от Алексей Юдин
Так 6м на первоклассную как не тянул, так и не тянет...

Оффлайн e+

  • *****
  • Сообщений: 4 781
  • Благодарностей: 188
  • Урания, ВАГО
    • Сообщения от e+
о каком параллелелизме идёт речь
Что и как параллелит сам процессор - мы все начитаны и наощуп убедились: работает как зверь, даже от расчётов на видеокарте пришлось отказаться: внутренний конвейер процессора не отстаёт от изысков распараллеливания задачи на потоки.
Поэтому на всякий случай и уточняю. Потому, что возможно, тут начинается некоторая путаница.
Есть параллелизм, организуемый за счёт разбиения задачи на параллелые потоки, которые выполняются на отдельных ядрах / процессорах / узлах. А есть параллелизм на уровне выполнения инструкций (out-of-order execution), которым при написании программы особо не порулишь, он реализуется в каждой модели CPU по своему. Но можно попробовать оптимизировать программу под конкретный CPU, если это действительно нужно. Поскольку в ветку пошла речь о всяких блоках в CPU и пр. - я на всякий случай упоминаю, что он бывает разный. :)

Цитата
Есть гарантия того, что есть в языке
Тут, скорее, гарантия упёртости спецов сохранить эту возможность. Есть пример: группа программистов в В-Британии, написавшая книгу "Рецепты вычислений", наполненную исходным кодом, сначала на Фортране (долгое время), затем - на Паскале и, наконец, на С. Но, как шутит М. Жванецкий, "С уходом профессионалов со сцены равновесие между сценой и залом восстанавливается". Так и здесь: ушли британцы - канул влету фортран, разжал руку Борланд - исчезла Дельфи и т.д.
Не с целью критикнуть, но только охарактеризовать: запад любит с минимума выжать по-максимуму. С одной стороны, это не плохо: хороша верёвка длинная, но речь - короткая. Но надо вспомнить Максутова: "но мы всегда будем делать только 1классную оптику" - чтобы не кусать локти во время сиинга: запас карман не тянет и из большого маленькое всегда можно сделать, а вот наоборот - не растянешь!.
Да как бы, всё проще. На уровне стандартов IEEE определёна, скажем так разные уровни точности арифметических вычислений. Процессоры самых разных поколений реализуют поддержку тех или иных стандартов. Она же, естественным образом появилась и в языках программирования. При релизации компилятора для той или иной платформы (различные архитектуры и/или модели CPU, OS)- поддержка языковых конструкций тем или иным образом релизуется. Вот, собственно и всё.
« Последнее редактирование: 03 Авг 2020 [20:14:39] от e+ »

Оффлайн AP

  • ***
  • Сообщений: 144
  • Благодарностей: 10
  • Мне нравится этот форум!
    • Сообщения от AP
Если интересно, то на всякий случай - что именно запускать?  С нагревом, если всё сделано по человечески - всё хорошо, он (впрочем, как и другие компьютеры) у меня 24/7 считает проекты распределённых вычислений на всех потоках.  Ноутбук, как ни крути, это всё-таки не компьютер.
Я проверял на таком же процессоре. Результаты выше. Охлаждение у меня хорошее, при полной загрузке рабоает без перегрева.

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

  • *****
  • Сообщений: 7 043
  • Благодарностей: 406
    • Сообщения от ekvi
можно попробовать оптимизировать программу под конкретный CPU
Это стоит делать для всей программы - чтобы она "летала" на данном ПК.
Но я взялся за это дело, чтобы попробовать загрузить все ядра процессора. Самое доступное - применить параллельные потоки при оптимизации. Это получилось - см. код на Паскале в #791.
За ускорение/оптимизацию остального кода я брался в разное время и на разных языках (лучше всего получилось на шарпе растаскивать циклы. Но занятие это муторное, путаное, а эффект - 1.5-кратный.
Вот 12-24 ядер - другое дело - ускорение на порядок.
Кстати, сейчас посмотрел в мануале Земакса: метод Хаммер = метод молотка (в переводном мануале). А поскольку все ядра пыхтят и упоминается DLS и метод отжига, значит, Земакс блудит по случайному маршруту - от этого блуда уже оскома.

Оффлайн e+

  • *****
  • Сообщений: 4 781
  • Благодарностей: 188
  • Урания, ВАГО
    • Сообщения от e+
можно попробовать оптимизировать программу под конкретный CPU
Это стоит делать для всей программы - чтобы она "летала" на данном ПК.
Но я взялся за это дело, чтобы попробовать загрузить все ядра процессора. Самое доступное - применить параллельные потоки при оптимизации. Это получилось - см. код на Паскале в #791.
За ускорение/оптимизацию остального кода я брался в разное время и на разных языках (лучше всего получилось на шарпе растаскивать циклы. Но занятие это муторное, путаное, а эффект - 1.5-кратный.
Вот 12-24 ядер - другое дело - ускорение на порядок.
Всё верно, всё правильно. Ядер всё больше и больше. А если потом как-то удастся оптимизировать расчёт в отдельном потоке, то эффект будет сразу на всех параллелях.

Оффлайн AP

  • ***
  • Сообщений: 144
  • Благодарностей: 10
  • Мне нравится этот форум!
    • Сообщения от AP
Попробовал запустить на двухпроцессорной машине (2 процессора по 10 ядер-20 потоков, но частота пониже чем у Райзена).  Коэффициент порядка 23.