|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.10.2016, 16:48 | #1 |
Регистрация: 23.09.2016
Сообщений: 4
|
Параллельное программирование для ускорения обработки информации
Мне необходимо выполнить бинаризацию изображения с использованием k-means на 2 кластера.
Делаю я следующим образом: 1. сначала я подготавливаю массив массивов. Чтобы каждая ячейка соответствовала своему потоку. и в каждой ячейке содержались только те данные, которые будет своё ядро обрабатывать. Для оптимизации так сделал. вот таким образом я раскидываю. Тут вроде ничего интересного. Всё правильно вроде. Просто так код приложил Код:
Код:
Код:
Вот код функции Код:
Size image {Width=3976, Height=3299} time 34,45929 processors 1 Size image {Width=3976, Height=3299} time 52,25169305 processors 2 Size image {Width=3976, Height=3299} time 49,773416025 processors 3 Size image {Width=3976, Height=3299} time 44,0997120125 processors 4 Size image {Width=3976, Height=3299} time 38,79137545625 processors 5 Size image {Width=3976, Height=3299} time 34,887025578125 processors 6 Size image {Width=3976, Height=3299} time 31,8754485390625 processors 7 Size image {Width=3976, Height=3299} time 29,6087524195313 processors 8 Size image {Width=3976, Height=3299} time 27,7327576597656 processors 9 Size image {Width=3976, Height=3299} time 26,4133148798828 processors 10 Size image {Width=3976, Height=3299} time 25,2272720399414 processors 11 Size image {Width=3976, Height=3299} time 24,6323545199707 processors 12 Процессор i7-3930k. Количество ядер процессора 6, количество потоков процессора 12. Почему так печально у меня получается со скоростью? |
08.10.2016, 01:11 | #2 |
Форумчанин
Регистрация: 24.01.2011
Сообщений: 774
|
Ну, на создание и синхронизацию потоков отводится время. Я не помню формулу, которую нам в универе давали но там нужно было что-то вроде T = t/core_number + latency
Ну, в общем неважно. У тебя же на 10 секунд лучше стало, чем недоволен? И да, я вообще нифига не понял, что за магия у тебя в сохранении предыдущих центроидов. Заведи для этого лучше какой-то отдельный список. А так, вангую, что проблема в том, что ты в каждый цикл работы KMeans в каждом потоке выделяешь память. Это очень накладная операция. Я бы так сделал (это что-то вроде псевдокода): Код:
UPD: А вообще да, попробуй вынести создание массивов за пределы цикла, может этого уже будет достаточно для тебя.
a.k.a. Angelicos Phosphoros
Мой сайт Последний раз редактировалось New man; 08.10.2016 в 01:26. |
08.10.2016, 01:29 | #3 |
Регистрация: 23.09.2016
Сообщений: 4
|
Решил накидать простенькую задачу: выполнить какие-нибудь операции над большим блоком данных. И это все распараллелить. Это можно сделать 2мя способами:
1. Параллелить вызов коротеньких процедур. Но тогда будет очень много времени тратиться на то, чтобы передать управление другому ядру. Ведь так? ну нет смысла параллелить операцию 2+2. 2. Параллелить обработку блоков данных. Логично предположить. что когда параллельно запускаться будут тяжелые процедуруы, эффект от параллельности будет гораздо выше. Однако оказались весьма странные результаты. Почему-то первоначальный эффект от параллельности отрицательный. Вот код простой программки, которая наглядно всё демонстрирует: Код:
1 итерация: 1 поток, время: 2,5947303 2 поток, время: 1,5046816 3 поток, время: 1,2435103 4 поток, время: 1,1743574 5 поток, время: 1,8177255 6 поток, время: 1,8564871 7 поток, время: 1,7038264 8 поток, время: 1,7404472 Блок итераций: 1 поток, время: 1,2824387 2 поток, время: 1,2592897 3 поток, время: 1,3303499 4 поток, время: 1,3710368 5 поток, время: 1,4195757 6 поток, время: 1,4460356 7 поток, время: 1,5213963 8 поток, время: 1,6072681 Как видно, во втором случае результат очень плохой. То есть распараллеливание медленно отрабатывает. Почему так? Ведь по логике второй способ распараллеливания должен быть лучше первого? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Составить программу, для обработки информации об оценках студентов | Ravgus | Общие вопросы C/C++ | 8 | 22.03.2015 19:04 |
Создать класс для обработки информации о различных датах.Исправить функцию. | kokoz9br | Общие вопросы C/C++ | 0 | 05.12.2012 21:55 |
составить программу для обработки информации о кадрах предприятия | Лунатик13 | Помощь студентам | 2 | 28.03.2012 16:31 |
Создание пользовательских функций для обработки числовой информации. | Larisa7 | Помощь студентам | 1 | 16.12.2011 18:40 |
Многократный запуск одного макроса для обработки информации по нескольким заказам поочередно | Ribun | Microsoft Office Access | 1 | 30.06.2011 09:36 |