Я работаю над кодом обработки сигналов в SciPy и сейчас пытаюсь использовать числовой оптимизатор для его настройки.К сожалению, с течением времени этот процесс оказывается довольно медленным.
Операции, которые я должен выполнить для этой оптимизации, следующие:
- Загрузка большого 1-d файл данных (~ 120000 точек)
- Запустить оптимизатор, который:
- Выполняет операцию обработки сигнала, не изменяет исходные данные, создает 120000 новых точек данных.
- Проверяетразница между исходным сигналом и новым сигналом с использованием различных операций,
- Одна из которых включает в себя свертку на основе БПФ
- Генерирует единственное значение «ошибки» для суммирования результата - это то, что следует минимизировать
- Просмотр ошибок и повторный запуск работы с различными параметрами
Функции обработки сигналов и ошибок занимают менее 3 секунд, нок сожалению, 50000 раз занимает намного больше времени.Я экспериментирую с различными более эффективными алгоритмами оптимизации, но независимо от того, что это займет тысячи итераций.
Я распараллелил пару оптимизаторов, которые я пробую, используя потоки процессора, что было не слишком сложно.так как оптимизатор может легко выполнить несколько запланированных запусков одновременно в отдельных потоках, используя ThreadPool.map
.
Но на моем ноутбуке это примерно в 2 раза больше, а на многоядерном компьютере - в 8 раз.У меня вопрос, это приложение, для которого я мог бы использовать обработку GPU?Я уже перевел некоторые части кода на C, и я мог бы представить использование OpenCL для создания функции из массива параметров в массив значений ошибок и выполнения этого сотни раз за раз.- Даже если он выполняет последовательную обработку медленно, получение всех результатов за один снимок было бы удивительным.
Однако я предполагаю, что требования к памяти (загрузка большого файла и создание временного файларавный размер для генерации каждой точки данных) затруднит запуск всего алгоритма в ядре OpenCL.У меня нет большого опыта работы с GPU и написания кода CUDA / OpenCL, поэтому я не хочу изучать все тонкости, если нет надежды заставить его работать.
Любой совет?