|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 77
|
||||||
Попытка улучшить действующий код28.04.2016, 13:13. Показов 1135. Ответов 12
Добрый день! Появились желающие улучшить действующий код, который по заданной системе многочленов строит её базис Гробнера (по алгоритму F4). Вот сам проект github.com/galkinvv/gb_algs, собрал на debian 8.2 х64. Нужен вообще любой апдейт кода в плане скорости, даже немного, либо еще, как вариант, попытаться распараллелить алгоритм по дате. Сам не владею С++, писал только на жаве и не особо много, поэтому принимаю любую возможную помощь.
Может кто-нибудь откроет проект и посмотрит, что же можно заапдейтить и подскажет? Заранее благодарю, ребят. Вот отдельный файл из этого проекта с основным алгоритмом F4 (f4main.cpp). Если использовать распараллеливание, то скорее всего только тут.
0
|
||||||
| 28.04.2016, 13:13 | |
|
Ответы с готовыми решениями:
12
Как улучшить код?! Нужно улучшить код Попытка разобрать код |
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 28.04.2016, 13:33 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 77
|
||
| 28.04.2016, 13:46 [ТС] | ||
|
0
|
||
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
||
| 28.04.2016, 13:53 | ||
|
Добавлено через 1 минуту ...к чему я эти дурные вопросы задаю - можно "оптимизировать" 1000 строк а потом окажется что все время жрала одна единственная строка до которой руки так и не дошли потому что "мы считаем что это были другие строки". замерьте время выполнения
0
|
||
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 77
|
|
| 02.05.2016, 15:07 [ТС] | |
|
Да, как я и думал, функция в 123 строке потребляет очень много времени на некоторых примерах, что можно попробовать сделать для какого-нибудь, пусть даже маленького ускорения?
0
|
|
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 02.05.2016, 21:09 | |
|
Aspromist, в 123 вообще комент, вы о редуцировании? Там несколько строк. Пре, ду и пост- какая?
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 77
|
|
| 03.05.2016, 20:22 [ТС] | |
|
Да, редуцирование жрет 99% времени работы всей программы. Конкретно doReduceMatrix, пре и пост вообще не расходуют времени, разве что наносекунды. Тоесть метод в 119 строке toRowEchelonForm. Он описан в файле работы с матрицами cmatrix.cpp. Вот его содержимое: http://pastebin.ru/S956w2pn#
В свою очередь управление передается функции в 755 строке, а она вызывает функцию в 626 строке. Присутствуют комментарии и это хорошо. Что можно сделать в этом месте как попытку улучшить код в каком-нибудь плане?
0
|
|
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 03.05.2016, 23:47 | |
|
Aspromist, правильно ли я догадываюсь что в MPIDiagonalForm основное время потребляет либо forwardGaussElimination либо backGaussElimination?
Добавлено через 3 минуты ...а в них в свою очередь еще куча вызовов... причем меня немного насторожило что мы уже где-то в этой цепочке рассылали данные процессорам, а в нижестоящих функциях я тоже вижу рассылку, но я тут не спец может так надо...
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 77
|
|
| 04.05.2016, 10:11 [ТС] | |
|
Да, прямой и обратный ходы метода Гаусса расходуют все время, прямой метод расходует намного больше, вот к примеру:
ReducePre matrix: 0 millisec forwardGaussElimination: 104117 millisec backGaussElimination: 3421 millisec ReduceDo matrix: 107541 millisec ReducePost matrix: 0 millisec Примерно в таком соотношении происходят вычисления, то есть более чем в 10 раз по времени вычисляется дольше прямой метод Гаусса. Матрица делится на блоки построчно, которые рассылаются на разные процессоры для параллельного вычисления.
0
|
|
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 04.05.2016, 11:34 | |
|
Aspromist, внутри forwardGaussElimination смотрели что жрет? reduceRangeByMatrix? а в нем reduceRangeByRow и fastReduceRangeByRange?
Добавлено через 5 минут ...я к тому что надо дорыть до собственно вычислений. обложка вряд ли потребляет время - время уходит на само действие Добавлено через 6 минут reduceRangeByMatrix->reduceRangeByRow->reduceRowByRow->getCoefByMonom (этого у меня нет) или addRowMultypliedBy (вот тут много цифр может оно) Добавлено через 7 минут addRowMultypliedBy ничего такого плохого не делает... Добавлено через 4 минуты fastReduceRangeByRange->fastReduceRangeByRangeConstOverflow, а в fastReduceRangeByRangeConstOverflow есть три вызова new / delete - это достаточно тяжелая вещь возможно следует оставлять выделенный кусок памяти живым и использовать повторно если размер подходит - это сэкономит время на вызов new Добавлено через 8 минут ...кроме того в fastReduceRangeByRangeConstOverflow создаются несколько std::vector которые не сильно быстрые, а особой нужны в них по коду я не увидел. возможно есть смысл уйти от них к обычным массивам
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 77
|
||||||
| 04.05.2016, 15:28 [ТС] | ||||||
|
в reduceRangeByMatrix 2 пути в зависимости от толщины блоков, если блоки толщины в 1 строку, то запускается for с reduceRangeByRow, иначе for с fastReduceRangeByRange. Толщина блоков регулируется в доп параметрах при запуске уже самой программы. У меня с блоками толщины в 1 строку работает быстрее, но наверняка есть случаи когда выгоднее иначе делать. А в этих функциях в свою очередь есть еще forы. Поэтому очень большое количество итераций reduceRowByRow (они в случае блоков толщины 1), хотя каждая выполняется молниеносно. Вот файл cmatrix.h в котором в 106-й строке описан getCoefByMonom:
0
|
||||||
|
Модератор
3409 / 2181 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 04.05.2016, 16:51 | |
|
в getCoefByMonom очень настораживает поиск - каким бы он ни был это тоже емкая операция.
насколько отличаются показатели времени для первой ветки и второй (когда туча вызовов reduceRowByRow или один fastReduceRangeByRange)?
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 77
|
|
| 04.05.2016, 17:53 [ТС] | |
|
Для 1-й ветки, когда блок толщины в 1 строку и используется много вызовов reduceRowByRo 10679 millisec, для 2-й ветки с блоком толщины в 2 строки 17598 millisec. Но это только 1 тест. Пробовал несколько других, все-равно 1 ветка быстрее работает. Может быть другая будет эффективнее на процессорах с большим количеством ядер, чем у меня, у меня 2 физических и 4 виртуальных. http://mech.math.msu.su/~fpm/p... k08402.pdf Это статья по этому проекту, там в конце 1 главы говорится, что реализованные параллельные алгоритмы показали довольно неплохие результаты, что подтверждается экспериментальными вычислениями
на многопроцессорных кластерах с распределённой памятью.
0
|
|
| 04.05.2016, 17:53 | |
|
Помогаю со студенческими работами здесь
13
Помогите улучшить простой код Перегрузка функций - улучшить код Матрица порядка N (упростить/улучшить код) Как улучшить свой код и его структуру?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|