|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
|||||||||||||||||||||||
Распараллеливание вычислений с задействованием SymEngine20.01.2025, 15:28. Показов 2176. Ответов 8
Метки нет (Все метки)
Всем привет!
Я пишу конструктор нейронных сетей на ЯП C++, ОС Linux, сборщик CMake, IDE QtCreator (саму библиотеку Qt не юзаю, просто в QtCreator удобно писать код) SymEngine - библиотека, которая позволяет выполнять символьные вычисления. Например, 2 * x + 4 * y хранить. А потом брать производную и подставлять значения вместо неизвестных. Очень удобно в обучении нейросети (взятие, хранение производных и постановка в них значений) Код, который я приведу ниже, работает в однопоточном режиме нормально Я решил распараллелить на n-потоков нахождение градиента по неизвестным Например, у нас есть неизвестные x1, x2, x3, x4. Если бить на два потока, то первый считает производные по x1 и x2, второй одновременно считает производные по x3 и x4. Потом мёржим их результат Уже несколько часов бьюсь над тем, как это настроить. SymEngine имеет базовый класс Basic. Basic обёрнутый в умный указатель (RCP) я назвал SE_Basic. В качестве Basic могут выступать разные сущности математики - int, double, сумма, произведение, синус, косинус и так далее. SymEngine выражение хранит в виде графа. Где мы имеем доступ к его коренному узлу, который хранится в SE_Basic - это и есть отражение нашего выражения Вот код. Попытка распараллелить поиск градиентов по заранее посчитанным производным (dir) Кликните здесь для просмотра всего текста
Здесь SE_Basic представляет из себя символ. Например, "x1". Такое работает нормально
Вот эта штука не работает при распараллеливании Любое обращение к der вызывает ошибку и вылет программы. Даже сериализация объекта der (const std::string str = der->__str__() ![]()
Помогите настроить SymEngine для многопоточного выполнения Спасибо за помощь!
0
|
|||||||||||||||||||||||
| 20.01.2025, 15:28 | |
|
Ответы с готовыми решениями:
8
Распараллеливание вычислений Распараллеливание вычислений Объясните нубу про распараллеливание вычислений. thread |
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
||||||||||||||||||||||||||||||||
| 21.01.2025, 08:11 [ТС] | ||||||||||||||||||||||||||||||||
Здесь мы получаем объект SymEngine::Add, представленный базовым классом SymEngine::Basic Дальше делаем подстановку (sub) значения в переменную В моём проблемном фрагменте кода механика та же, только ошибка появляется Пока не решено. Кто сможет - помогите. Я пока сам покопаю в чём может быть дело Добавлено через 22 минуты
Добавлено через 6 минут Если написать так, без потока, то работает нормально
Добавлено через 3 минуты Qt disassembler показывает в момент вылета на строку
Я пробовал копировать все передаваемые объекты. Тоже не помогло
0
|
||||||||||||||||||||||||||||||||
|
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,693
|
|
| 21.01.2025, 08:43 | |
|
SomniPhobia, а где сам СимЭнжин взяли? Судя по исходникам, если предполагается использование либы в многопотоке, то её надо собирать с макросом WITH_SYMENGINE_THREAD_SAFE, при объявлении которого инварианты Basic'а заворачиваются в атомики.
0
|
|
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
||||
| 21.01.2025, 09:00 [ТС] | ||||
|
Ссылка на репозиторий SymEngine на GitHub Добавлено через 1 минуту Добавлено через 7 минут Annemesski, так?
0
|
||||
|
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,693
|
||||
| 21.01.2025, 09:11 | ||||
Сообщение было отмечено Annemesski как решение
Решение
1
|
||||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
|||||||
| 21.01.2025, 09:18 [ТС] | |||||||
SymEngine пересобрал, установил. Сейчас проект пересоберу и проверю Добавлено через 1 минуту Annemesski, ура! Всё стало выполняться отлично! Спасибо большое за помощь! Добавлено через 1 минуту Не по теме:
0
|
|||||||
|
2674 / 1336 / 480
Регистрация: 08.11.2016
Сообщений: 3,693
|
|||
| 21.01.2025, 09:24 | |||
|
Добавлено через 1 минуту
0
|
|||
|
2742 / 1668 / 269
Регистрация: 19.02.2010
Сообщений: 4,413
|
||
| 21.01.2025, 21:29 | ||
|
Если баловался - сколько времени в однопотоке занимает 1 эпоха обучения MLP с одним скрытым слоем из 100 нейронов? Я чисто ради любопытства интересуюсь.
0
|
||
|
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,407
|
|
| 22.01.2025, 06:22 [ТС] | |
|
VTsaregorodtsev, привет!
Не пробовал MNIST пока что
0
|
|
| 22.01.2025, 06:22 | |
|
Помогаю со студенческими работами здесь
9
Распараллеливание вычислений
Распараллеливание вычислений с openmp OpenMP распараллеливание вычислений Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|