Форум

Пожалуйста или Регистрация для создания записей и тем.

Исследование свойств диагональных латинских квадратов в проектах добровольных распределенных вычислений и не только...

НазадСтраница 148 из 191Далее

Надеюсь внезапно возникшие проблемы с добавлением Wu'шек будут оперативно решены, пока сделаю анонс того, что планируется сделать в самое ближайшее время...

Итак, к концу подходят два эксперимента, связанные с построением спектров числа диагональных трансверсалей в ДЛК порядков N=12 и N=15. Вроде бы одно и то же, только размерность задачи разная, на самом деле — нет. Проблема здесь в том, что с ростом размерности N алгоритмы, которые более менее нормально работали ранее, начинают работать неприемлимо долго и приходится думать над тем, как их менять на менее вычислительно сложные или распараллеливать. В данном случае для размерности N=12 применялись алгоритмы поквадратного построения спектра (фактически отталкиваясь от каждого квадрата в исходном спектре происходит построение нового спектра, при постобработке данные новые спектры объединяются) и поквадратная диагонализация (те самые WU'шки, которые считаются по нескольку суток для тяжелых квадратов). Для размерности N=15 поквадратное построение спектра потребует нескольких сотен лет расчетов в проекте при текущей реальной производительности, диагонализация потребует еще раз в 100 больше времени, поэтому был применен другой алгоритм, основанный на частичной диагонализации и обработке 1-окрестностей для заданных квадратов. В результате для N=15 на данный момент получен довольно большой спектр, который в ходе постобработки был разбит на 5 частей по миллиону значений в каждой:

1-я часть — {15510, 15669, 16210, 16296, 16403, ..., 999996, 999997, 999998, 999999, 1000000}, 933061 элемент;
2-я часть — {1000001, 1000002, 1000003, 1000004, 1000005, ..., 1999972, 1999974, 1999990, 1999995, 1999996}, 915174 элемента;
3-я часть — {2000032, 2000050, 2000057, 2000058, 2000061, ..., 2916155, 2916625, 2917501, 2918550, 2954593}, 104096 элементов;
4-я часть — {}, 0 элементов;
5-я часть — {4588133, 4588962, 4589048, 4589133, 4589188, ..., 4608497, 4613052, 4616090, 4617772, 4620434}, 6587 элементов,

итого 933061 + 915174 + 104096 + 0 + 6587 = 1958918 элементов, что позволяет наложить новое нижнее ограничение на мощность соответствующего спектра, но... В полученных результатах я уверен не до конца, т.к. попадались сбойные результаты, в одном случае даже пришлось блокировать пользователя с потоком глючных результатов, поэтому подготовлено примерно 10 тыс. WU'шек эксперимента exp1063 для их проверки. WU'шки короткие, примерно по 10 минут счета, считать их планируется с кворумом 2 (спектр долго строить, но быстро проверить его корректность, ранее это удавалось сделать на моей машине, теперь спектр большой и требуется помощь проекта, на моей машине данная проверка будет идти несколько месяцев). Подобная схема (долгий расчет с кворумом 1, быстрая проверка с кворумом 2) требует от меня ряда дополнительных действий, однако работает быстрее, чем организация исходного расчета с кворумом 2. После завершения проверки я выложу точное нижнее ограничение на мощность спектра (значение 1958918 пока будем считать предварительным) и сами спектры (значения с подтверждающими квадратами), которые на данный момент весят 438 МБ. По моим ощущениям данный спектр еще можно расширить процентов на 10-20, но для этого будут нужны другие алгоритмы, чем мы займемся чуть позже... Для порядков N=16 и выше построение полных спектров будет еще более тяжелой задачей: спектры будут включать в своем составе несколько миллионов элементов, подтверждающие файлы будут весить по нескольку ГБ, пока решение данной задачи "в лоб" мне представляется нецелесообразным, поэтому скорее всего в перспективе в данном вопросе придется немного схитрить и задача будет декомпозирована... :)

PS. Анонс результатов по спектру для N=12 выложу отдельно после завершения счета хвостов из 9 долгих WU'шек.

PPS. Ну и немного технических деталей, если это интересно кому-то кроме меня...

1. Без разбиения на части построение спектра (постобработка) выполнялось очень долго, десятки часов, пришлось переписывать код...
2. В ходе переписывания выяснилось, что при построении спектра заранее неизвестного и довольно большого размера (несколько сотен тысяч элементов) из-за серии realloc'ов возникает неприятная ситуация, скорее всего связанная с фрагментацией кучи, когда при выделении примерно 300 МБ динамической памяти все либо начинает страшно тормозить, либо вообще выдается сообщение о нехватке динамической памяти, хотя это даже близко не так. Постобработку пришлось делать по сути в 3 этапа: объединение результатов из проекта (мелкие файлы спектров) в крупные файлы по 300 тыс. значений, затем объединение крупных файлов в один большой файл спектра, а уже затем его раскладка по частям с непосредственно постобработкой (сортировка, поиск новых элементов, добавление новых в существующий спектр, формирование на их основе новых WU'шек, добавление в проект).
3. Работа со спектрами неотсортированных значений для данной размерности выполняется неприемлимо долго. Сортировка и последующий бинарный поиск ситуацию выправляют, но не сильно. Пришлось вспомнить о том, что есть алгоритмы сортировки за время быстрее O(N * log(N)), что вроде бы запрещено теорией, но они есть... Кто в этом сомневается, либо ко мне в презентацию http://evatutin.narod.ru/evatutin_edu_01_sorting.pdf, либо на предстоящую лекцию по программированию в следующий четверг, тематика как раз совпадает по странному стечению обстоятельств :). В данном вопросе есть тонкость, объясняющая, все-таки можно или нельзя быстрее N * log(N) ... Так вот, на базе алгоритма сортировки распределением удалось сделать программную реализацию объединения спектров и поиска новых элементов, которая работает почти мгновенно для спектров мощностью по миллиону элементов (до оптимизации на это требовалось более часа времени на каждую часть спектра). При этом правда требуется много памяти, но ее в данном случае ее хватает.

Незаметная фоновая работа, отнимающая крохи доступного времени, но ведущая к получению новых результатов, что не может не радовать :). На какой-либо из предстоящих конференций будет о чем рассказать...

hoarfrost, citerra и 3 отреагировали на эту запись.
hoarfrostciterramike765321V0d01eyШмяка

evatutin, да Вам тут целый суперкомпьютер нужен :-)

hoarfrost, см. почту.

evatutin отреагировал на эту запись.
evatutin

В проекте Gerasim@Home (https://gerasim.boinc.ru) получена очередная (10-я по счету) порция КФ ОДЛК порядка 10, общее количество КФ ОДЛК перевалило за 19 млн. Ее анализ на спектры, который является рутинной процедурой и последнее время редко дает что-то новое, позволил обнаружить в ее составе квадрат

0 1 2 3 4 5 6 7 8 9
1 2 0 4 6 3 8 9 5 7
4 5 9 8 7 2 3 6 1 0
6 3 4 7 9 8 1 0 2 5
8 6 3 1 5 7 9 2 0 4
9 8 5 6 0 1 7 4 3 2
5 0 1 2 3 9 4 8 7 6
7 9 8 5 2 6 0 3 4 1
2 4 7 9 8 0 5 1 6 3
3 7 6 0 1 4 2 5 9 8

который является однушкой и имеет 1208 трансверсалей. Такого значения в соответствующем спектре числа ОДЛК до этого не было, данная находка позволяет усилить нижнее ограничение на мощность данного спектра (ряд https://oeis.org/A350585) с a(10) >= 192 до a(10) >= 193. Мелочь, а приятно...
mike765321 и Шмяка отреагировали на эту запись.
mike765321Шмяка

 

2 SerVal: подготовил WU'шки для следующего эксперимента (проверка только что посчитанного спектра), не могу добавить, пишет "String or binary data would be truncated". Что-то меняли в добавлении?

Нет, я ничего не менял. (да я бы и сообщил). Вот последнее добавление из логов сервера:

<wu_addition>
<archive_name>WUs.zip</archive_name>
<app_name>test_separator</app_name>
<n_wu_processed>100100</n_wu_processed>
<n_wu_inserted>100100</n_wu_inserted>
<start_time>29 Apr 2022, 07:11:17</start_time>
<end_time>29 Apr 2022, 07:13:36</end_time>
<duration>2 minutes, 19 seconds</duration>
</wu_addition>

Или ошибка вылезает только при добавлении WUшек для приложения odls_bs ?

== Возможно, размер WUшек превышает 8000 bytes и в переменную varbinary они не влезают.

Это поправить не трудно, надо только найти, где это происходит. Но, поскольку таблица ВУшек одна для всех подпроектов, надо чтобы она была пустой. (иначе не проходит alter table ...). То есть, надо досчитать все подпроекты и забрать все ВУшки из научной базы (чтобы и научная база была пустой).

p.s.

Эдуард Игоревич, пришлите сюда архив с ВУшками, которые не получилось добавить. Я попробую добавить.

Может что-нибудь сразу будет видно.

 

Цитата: SerVal от 29.04.2022, 10:16

== Возможно, размер WUшек превышает 8000 bytes и в переменную varbinary они не влезают.

Скорее всего именно в этом и дело, размер WU'шек примерно 45 КБ

Но, поскольку таблица ВУшек одна для всех подпроектов, надо чтобы она была пустой. (иначе не проходит alter table ...)

Хм, я когда с SqlServer работал, ресайз поля в большую сторону обычно проходил без проблем даже на таблице с данными. Если верно помню, нужно было писать
```

begin_transaction()

alter table ...
end_transaction()

```
Точных команд я, конечно, спустя почти 10 лет уже не помню.

Загрузку ВУшек поправил. ВУшки добавил. Выдача заданий разрешена.

*****

<wu_addition>
<archive_name>WUs gt cl check sp dt n15.zip</archive_name>
<app_name>gt_cl</app_name>
<n_wu_processed>9797</n_wu_processed>
<n_wu_inserted>9797</n_wu_inserted>
<start_time>29 Apr 2022, 20:27:34</start_time>
<end_time>29 Apr 2022, 20:28:14</end_time>
<duration>40 seconds</duration>
</wu_addition>

*****

Всем привет и хорошего настроения! :)

evatutin, AenBleidd и Шмяка отреагировали на эту запись.
evatutinAenBleiddШмяка

Забрал первую половину результатов, посчитанную на данный момент, посмотрел: ошибки таки есть, немного, на данный момент 170 элементов спектра имеют неправильные значения. Досчитываем вторую половину и будем исправлять спектр. Видимо та глючная машина, выдача заданий обладателю которой была запрещена, таки успела сделать свое черное дело...

Не совсем понятно где ошибки? Вы про старые ВУшки или из последней партии?

Сейчас в научной базе ~1500 посчитанных ВУшек для приложения gt_cl.  Все посчитаны с кворумом = 2

Цитата: SerVal от 30.04.2022, 11:29

Не совсем понятно где ошибки? Вы про старые ВУшки или из последней партии?

Сейчас в научной базе ~1500 посчитанных ВУшек для приложения gt_cl.  Все посчитаны с кворумом = 2

Речь не о них, а о предыдущей партии, которую мы считали более месяца в подпроекте GT CL с кворумом 1. К работе Герасима претензий нет, досчитываем 18 хвостов, я все проверяю, исправляю (соответствующий код у меня уже готов) и выкладываю анонс по результатам.

SerVal отреагировал на эту запись.
SerVal
НазадСтраница 148 из 191Далее
BOINC.RU