|
0 / 0 / 0
Регистрация: 19.02.2019
Сообщений: 5
|
||||||
Распараллеливание с помщью потоков. Время работы19.02.2019, 14:32. Показов 5499. Ответов 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
Замедление работы потоков если запущено несколько потоков Распараллеливание работы между ядрами. Разделить время выполнения потоков Посчитать время события - время работы кассиров (система массового обслуживания) Выводить текущее время в определенные позиции консоли во время работы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|