|
0 / 0 / 0
Регистрация: 19.02.2019
Сообщений: 5
|
||||||
Распараллеливание с помщью потоков. Время работы19.02.2019, 14:32. Показов 5541. Ответов 23
Метки нет (Все метки)
Здравствуйте!
Написал программу, которая должна распараллеливать умножение матриц (код программы ниже). Распараллеливал по i формулу: Тестировал на матрицах размера 2000 x 2000, 2000 x 2000 на машине с 4-мя процессорами. Запускал с 2, 3, 4 потоками. Вопрос: Почему программа работает медленнее, чем последовательный вариант? Причем чем больше потоков, тем медленнее. Использовать одну память для чтения несколькими потоками нельзя?
0
|
||||||
| 19.02.2019, 14:32 | |
|
Ответы с готовыми решениями:
23
Распараллеливание потоков для нахождения суммы матрицы <omp.h> Используя распараллеливание потоков найти количество цифр, входящих в заданную строку |
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
||
| 20.02.2019, 08:32 | ||
|
Возьмите например clock_gettime(CLOCK_MONOTONIC, )
2
|
||
|
0 / 0 / 0
Регистрация: 19.02.2019
Сообщений: 5
|
||
| 20.02.2019, 12:50 [ТС] | ||
|
Возникает несколько вопросов. Прошу прощения, если скажу глупость. Суть распараллеливания - это ведь ускорение времени выполнения программы. В моем понимании функция clock() отражает время выполнения основной части программы. Разве это не так? В моем примере даже визуально выполнение параллельной программы проходит дольше чем последовательной (если смотреть за терминалом после запуска программы). Неужели на таком примере (умножение матриц) нельзя увидеть эффект распараллеливания? (ускорение времени) Или нужны входные данные побольше (матрицы) и побольше количество процессоров?
0
|
||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||||
| 20.02.2019, 13:54 | |||||
Ответы у одно/много поточных решений совпадают?
1
|
|||||
| 20.02.2019, 23:34 | ||
|
Может в этом причина? Попробуй pthread_tryjoin_np() или синхронизироваться через семафоры... З.Ы. но мне кажется - дело в "лёгкости" задачи для потока. Сколько там получается - 4 млн умножений и при этом данные, наполовину в кеше 3лвл? Кроме того как компиируешь? попробуй указать gcc -O0 (отрубить все оптимизации) З.З.Ы Как получить доступ к input.txt? - могу поэкспериментировать...
1
|
||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
||||
| 21.02.2019, 08:08 | ||||
8000 млн.
0
|
||||
| 21.02.2019, 08:33 | |||||
|
Вообще хотелось бы проверить у себя утверждение
0
|
|||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||||||||
| 21.02.2019, 08:56 | |||||||||
0
|
|||||||||
|
0 / 0 / 0
Регистрация: 19.02.2019
Сообщений: 5
|
||
| 21.02.2019, 10:04 [ТС] | ||
|
Ответы у одно/много поточных решений совпадают. По поводу ядер. Я тестировал на двух машинах. Одна может быть не в счет. Там тестировал на гостевой Ubuntu в VirtualBox. Для гостевой Ubuntu выделено 2 ядра из 4. Хостовая Win10. На второй машине стоят две системы (параллельно): Ubuntu и Win7. Процессор там Intel(R) Core(TM) i3-2120 CPU @ 3.30 GHz c 4-мя ядрами. В терминале в Ubuntu ответ на команду nproc выдет 4. Вот на второй машине запускал с 2,3,4 потоками.
0
|
||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||||||
| 21.02.2019, 10:33 | |||||||
Сообщение было отмечено prime2019 как решение
Решениетаки поменяйте ваш xxx_time = clock(); на
1
|
|||||||
|
0 / 0 / 0
Регистрация: 19.02.2019
Сообщений: 5
|
|||||||||||
| 21.02.2019, 12:17 [ТС] | |||||||||||
|
дождался созданные им остальные потоки. Во многих примерах (в частности, в примерах книги Богачева К.Ю. "Основы параллельного программирования") есть вызов функции pthread_join(). Попробовал с ключом -o0, компилятор ругается, причем я таких слов не знаю. Заполнял рандомно. Вот код программы, которая заполняла файл.
Запускал три раза оба варианта программы с Вашим кодом. Время работы последовательной программы: 1) 94.127962015 2) 94.233204728 3) 94.10741871 Время работы параллельной программы: 1) 49.317953911 2) 49.14839388 3) 49.404053058 Параллельную программу запускал на двух потоках. Буду разбираться с функциями clock() и clock_gettime() и распараллеливанием в целом. Да, кстати что такое НТ из вашего сообщения? 1) Что читать? Что слушать, смотреть? 2) Какие задачи полезны для освоения распараллеливания?
0
|
|||||||||||
| 21.02.2019, 12:46 | ||||
|
0
|
||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
||||
| 21.02.2019, 13:04 | ||||
Сообщение было отмечено prime2019 как решение
Решение
0
|
||||
| 21.02.2019, 19:16 | ||||||||||||||||||
Сообщение было отмечено prime2019 как решение
РешениеДобавлено через 5 часов 48 минут man 3 орёт "Функция clock() возвращает приблизительное процессорное время, использованное программой." (archlinux почти ежедневнообновляемый) - совсем не очевидно, что считается суммарное процессорное время. opennet намного короче, но сразу даёт понять о чём идёт речь: "Функция clock() возвращает суммарное процессорное время, использованное программой. " тут уже всё понятно... Мои результат с использованием clock():
Выше я компилил с -O0 , сейчас решил посмотреть что будет с 03:
![]() Добавлено через 10 минут Интересно, оказывается и -Og работает, я думал это аналог -O0 - ан-нет:
0
|
||||||||||||||||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||||||
| 21.02.2019, 19:30 | |||||||
1
|
|||||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 21.02.2019, 19:45 | |
|
0
|
|
| 21.02.2019, 20:00 | |||||||
|
Вот сделал по рекомендации prik, через clock_gettime() - теперь можно отказаться от time и видеть действительное время работы:
Сейчас погоняю на разном кол-ве потоков и посмотрю что будет. Оптимизации только -O3, исходный текст с clock_gettime в качестве образца, переделывать не буду(хотя там, если полопатить....)
0
|
|||||||
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|||||||
| 21.02.2019, 20:38 | |||||||
0
|
|||||||
| 21.02.2019, 21:08 | |||||||||||||
|
Ну вот, то чего и ожидал ТС. У меня 4 ядерный феном (никаких HT), на 5 потоках - я полазил в гуглохроме, и потому сбил показания... Оверхед от операционки(еа переключение процессов) в данном случае минимален:
Кликните здесь для просмотра всего текста
Добавлено через 27 минут
Добавлено через 55 секунд
0
|
|||||||||||||
| 21.02.2019, 21:08 | |
|
Помогаю со студенческими работами здесь
20
Замедление работы потоков если запущено несколько потоков Распараллеливание работы между ядрами. Разделить время выполнения потоков Посчитать время события - время работы кассиров (система массового обслуживания) Выводить текущее время в определенные позиции консоли во время работы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|