|
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
|
|||||||
Эффект от применения потоков к сумированию элементов массива12.11.2015, 02:29. Показов 1763. Ответов 33
Метки нет (Все метки)
Здраствуйте, есть массив на 100000000 элементов. В него пихаем рандомные данные типа double.
Потом считаем суму всех элементов. Получаеться, что выполнение в главном потоке в 3 раза быстрее, чем, если бы запускать 2 потока Почему так? И почему результаты не совпадают в дробной части?
0
|
|||||||
| 12.11.2015, 02:29 | |
|
Ответы с готовыми решениями:
33
Ошибка из-за применения массива
Связка массива структур с классом без применения указателей |
|
Администратор
|
|||
| 12.11.2015, 03:47 | |||
Сообщение было отмечено zewer как решение
Решение
zewer, потоки не являются магическим средством волшебным образом ускорящие программу. Создание потока и синхронизация с ним требует накладных расходов и в данном случае они оказались такими что многопоточное выполнение оказалось медленнее. Операция сложения слишком простая для сравнения. Попробуй посчитать сумму синусов например и тогда многопоточное выполнение вероятно окажется быстрее.
1
|
|||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|
| 12.11.2015, 09:36 | |
|
Применяйте библиотеку BindingAndSeviceCoreParallel
Инструмент многопоточного программирования и все станет на свои места, N потоков выполнят задание в N раз быстрее. Собственно для этого она и создавалась.
0
|
|
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|
| 12.11.2015, 10:38 | |
|
Попробовал несколько вариантов суммирования. Массив того-же размера, метод заполнения тот-же. Результаты:
Creating time: 3608 ms By FOR elapsed 514 ms, sum = 24977824773,1524 By FOREACH elapsed 503 ms, sum = 24977824773,1524 By LINQ elapsed 710 ms, sum = 24977824773,1524 By PLINQ elapsed 248 ms, sum = 24977824773,1551 By TASKS elapsed 2637 ms, sum = 24977824773,1574 Добавлено через 8 минут Dedoc, много начитан об этой чудо-библиотеке, но ниразу не видел её в действии. Если несложно повторите эксперимент с сумированием вышепреведённого массива и выложите код на посмотреть.
0
|
|
|
Администратор
|
||
| 12.11.2015, 10:43 | ||
|
0
|
||
|
|
|
| 12.11.2015, 11:10 | |
|
Ради интереса попробовал в двух вариантах (оба с применением PLINQ). Результат на скрине.
1
|
|
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|||
| 12.11.2015, 11:25 | |||
|
Здесь https://sites.google.com/site/algonauts/Home/fajly в файле Sorting_Demo.cs – пример сортировки массива. Можете сами поэкспериментировать, измените суммирование на сортировку пузырьком. При длине массива 10.000.000 мой чудо-богатырь FX 8320 пятью ядрами пыхтит часами. Это хорошая задача. Суммировать не буду, но отдельно выполню сортировку в однопоточном режиме для сравнения.
0
|
|||
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|||||||
| 12.11.2015, 11:32 | |||||||
|
Ваш отказ в решении ДАННОЙ задачи я могу рассматривать, как невозможность реализации в приемлимых временных рамках.
0
|
|||||||
|
|
|||
| 12.11.2015, 11:35 | |||
|
Вот действительно, сделайте простой пример - суммирование большого массива. И проведите его всеми способами - обычный Thread, Task, PLINQ и с применением вашей библиотеки. И выложите результат. Тогда сразу будет ясно, имеет она преимущества перед штатными средствами или нет. Добавлено через 29 секунд
0
|
|||
|
Администратор
|
|
| 12.11.2015, 11:40 | |
|
0
|
|
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
||
| 12.11.2015, 12:13 | ||
|
0
|
||
|
|
|||
| 12.11.2015, 12:25 | |||
|
0
|
|||
|
-39 / 2 / 1
Регистрация: 21.09.2015
Сообщений: 58
|
|||
| 12.11.2015, 12:38 | |||
|
0
|
|||
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
||
| 12.11.2015, 13:04 | ||
|
При разбиении задачи на 2 потока Thread этого добиться не получилось. Вот он звёздный час твоей библиотеки. Докажи, что всё о чём ты уже несколько месяцев говоришь является правдой. Реши эту задачу. Разбей на потоки, уменьши время выполнения.
0
|
||
|
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
|
|
| 12.11.2015, 17:32 [ТС] | |
|
спасибо всем отвечающим.
Такой вопрос, видел применение обычных потоков(Thread), библиотеки с тасками(Tasks), может еще есть другие, PLINQ(от модератора выше, но сам не знаком с этим). Какая из этих технологий дает больше всего прироста, и с какой лучше всего начать знакомиться?
0
|
|
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
||
| 12.11.2015, 17:36 | ||
|
Thread -> Task -> BackGroundWorker и параллельно LINQ->PLINQ->PARTITIONER
0
|
||
|
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
|
||
| 12.11.2015, 17:47 [ТС] | ||
|
0
|
||
|
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
|
|||||||
| 12.11.2015, 18:06 | |||||||
Сообщение было отмечено zewer как решение
Решение
1
|
|||||||
|
Администратор
|
|
| 12.11.2015, 19:51 | |
|
0
|
|
|
2357 / 1775 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
|
|
| 12.11.2015, 20:09 [ТС] | |
|
всем спасибо за ответы.
0
|
|
| 12.11.2015, 20:09 | |
|
Помогаю со студенческими работами здесь
20
Последнее значение массива x, после применения функции обращается в 0 Как реализовать код без применения ассоциативного массива (map)?
Как сделать эффект размытия (эффект стекла) в Xaml? Необходимо разработать функцию, вычисляющую среднее арифметическое массива (без применения рекурсии) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|