2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Параллельные вычисления
Сообщение01.05.2014, 10:35 
Аватара пользователя
Здравствуйте.
Хочу ускорить свой алгоритм.
Имею следующую задачу. Даны два массива — Времени (исходный массив 1) и Сигнала (исходный массив 2). Нужно построить зависимость отношения первой гармоники сигнала ко второй от времени.

Решаю следующим образом. Сначала выбираю определённую точку $t0$ и на интервале $[t0-NT, t0+NT]$ (где NT - половина отрезка усреднения) и беру соответствующие значения Сигнала. Получаю массив для обработки, который представляет собой кусок "Исходного массива 2". Далее использую Дискретное преобразование Фурье для "Массива для обработки", и с помощью оператора 'if' нахожу амплитуду первой и второй гармоники. После этого записываю в выходную матрицу найденное отношение в виде: $[ {t0_i,\frac{ Amplitude[\nu]}{Amplitude[2\nu]}_i}]$. Потом выбираю следующую точку таким образом: $t0=t0+step$ и повторяю процедуру.
Вот нарисовал:
Изображение
Вопрос: Можно ли в такой ситуации использовать параллельные вычисления, и если да то как? Может можно почитать как организуют параллельные расчёты при работе с массивами?
P.S. Процессор Core i7.

 
 
 
 Re: Параллельные вычисления
Сообщение01.05.2014, 21:14 
Аватара пользователя
Уважаемые модераторы, перенесите эту тему, пожалуйста, в корень раздела Computer Science, так как заявленная тема не привязана к какому-либо конкретному языку программирования.

 i  Ветка перенесена из раздела «Программирование» в корень CS. В корне обсуждаются алгоритмы (в данном случае распараллеливания). Если обсуждение будет касаться преимущественно языков программирования, то, возможно, ветка будет возвращена в «Программирование» или, если будут обсуждаться специализированные математические библиотеки, перенесена в «Околонаучный софт». 2.05.1014

 
 
 
 Re: Параллельные вычисления
Сообщение01.05.2014, 22:33 
Babeuf в сообщении #857786 писал(а):
так как заявленная тема не привязана к какому-либо конкретному языку программирования.

...в чем ее основная проблема. На интересующие Вас вопросы почти невозможно ответить "абстрактно", без привязки к конкретному языку (а то и набора язык/компилятор/ОС). А вот информация о процессоре - это, наверное, самое ненужное, что только можно придумать. :D

К тому же хорошо было бы знать величины характерных параметров задачи, в частности, размеры обрабатываемых массивов.

 
 
 
 Re: Параллельные вычисления
Сообщение01.05.2014, 23:12 
Аватара пользователя
Babeuf
Из вашего описания, алгоритм совершенно не понятен. А из-того что понял могу предположить, что задачу можно оптимизировать алгоритмически.

Babeuf в сообщении #857522 писал(а):
Вопрос: Можно ли в такой ситуации использовать параллельные вычисления, и если да то как?

Да. Если алгоритм вычислим, то он должен быть вычислим на машине Тьюренга. А это не что иное как машина состояний, а распараллелить можно любую машину состояний. Правда не всякий алгоритм распараллеливание будет выполняться быстрее прямого. В вашем случае очевидно, что будет ускорение в разы.

Существует несколько технологий несколько технологий для распараллеливания.
1. Использовать готовые библиотеки: FFTW, cuFFT, cuBLAS-XT и тд.
2. Писать на специальном языке: CUDA, OpenCL, OpenMP (расширение Си/Си++ и ряда других), intrinsic (расширение си/си++) и тд.
3. Использовать средства языка и ОС: к примеру в юниксе fork, или кросс платформенное boost.thead и тд.
На самом деле в 3 пункте я имею в виду делать распараллеливание собственноручно, своими мозгами.

Babeuf в сообщении #857522 писал(а):
Может можно почитать как организуют параллельные расчёты при работе с массивами?

Да тут всё просто и очевидно. Можно и без книг. Циклы не зависимы по данным поэтому можно просто запустить параллельную обработку каждого витка цикла в своём потоке.
Затрудняюсь дать ответ. Дело в том что на данный момент общей методике нет. Да и в книгах даётся упор обычно на какую-то конкретную технологию, а не на все сразу. Да и стоит сказать, что параллелизм ещё имеет классификацию по данным и по командам, а по этому подходы к распараллеливанию несколько отличаются.

1) http://www.intuit.ru/studies/courses/586/442/info
Видео курс: основы распараллеливания программ

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group