2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Параллельные вычисления
Сообщение01.05.2014, 10:35 
Аватара пользователя


28/01/12
112
Здравствуйте.
Хочу ускорить свой алгоритм.
Имею следующую задачу. Даны два массива — Времени (исходный массив 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 
Аватара пользователя


28/01/12
112
Уважаемые модераторы, перенесите эту тему, пожалуйста, в корень раздела Computer Science, так как заявленная тема не привязана к какому-либо конкретному языку программирования.

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

 Профиль  
                  
 
 Re: Параллельные вычисления
Сообщение01.05.2014, 22:33 
Заслуженный участник


09/05/12
25179
Babeuf в сообщении #857786 писал(а):
так как заявленная тема не привязана к какому-либо конкретному языку программирования.

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

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

 Профиль  
                  
 
 Re: Параллельные вычисления
Сообщение01.05.2014, 23:12 
Аватара пользователя


31/10/08
1244
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 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group