powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как оптимизировать перемножние результатов массива задач?
16 сообщений из 16, страница 1 из 1
Как оптимизировать перемножние результатов массива задач?
    #40112820
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Задача следующая: имею массив - Task<BigInteger>[Environment.ProcessorCount] нужно перемножить все результаты.
На данный момент это решается так:
Код: c#
1.
2.
3.
4.
5.
6.
return Task.WhenAll(tasks).ContinueWith(_ =>
        tasks
            .Select(t => t.Result)
            .AsParallel()
            .Aggregate((a, b) => a * b),
    TaskContinuationOptions.ExecuteSynchronously).Result;

Однако очевидно, что это не оптимальное решение, тк при получение первых двух результатов уже можно начать считать, не дожидаясь остальных. Так же очевидно(хотя проверил), если имеем планировщик в к-ом BigInteger Result { get; private set; } + lock (_lock){ Result *= task.Result; } это ещё медленнее(точнее практически столько же, как и без AsParallel()), чем выше.

Заранее благодарю ВС
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40112826
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40112832
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik,
тоже дольше, там просто действие разделено во времени, те не в конце, а по ходу исполнения, но временные затраты такие как у без AsParallel() (((
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40112834
Andromeda777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
v skopin
Привет всем!

Задача следующая: имею массив - Task<BigInteger>[Environment.ProcessorCount] нужно перемножить все результаты.
На данный момент это решается так:
Код: c#
1.
2.
3.
4.
5.
6.
return Task.WhenAll(tasks).ContinueWith(_ =>
        tasks
            .Select(t => t.Result)
            .AsParallel()
            .Aggregate((a, b) => a * b),
    TaskContinuationOptions.ExecuteSynchronously).Result;

Однако очевидно, что это не оптимальное решение, тк при получение первых двух результатов уже можно начать считать, не дожидаясь остальных. Так же очевидно(хотя проверил), если имеем планировщик в к-ом BigInteger Result { get; private set; } + lock (_lock){ Result *= task.Result; } это ещё медленнее(точнее практически столько же, как и без AsParallel()), чем выше.

Заранее благодарю ВС

Я не уверен, тут зависит от данных, но вы больше ресурсов потратите на накладные операции. Интересная задача, я потестирую различные решения, какой у вас порядок количества чисел?
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40112842
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andromeda777,
не знаю точно - пишу для родственника-физика ... что-то в космосе считает. Тестирую на 1000000! (факториал)
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40112853
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopin,
Если ты работаешь с числами, то может тебе будут полезны векторы ?
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40112859
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopin
Тестирую на 1000000! (факториал)
на факториале от миллиона? через сколько тысяч лет должен закончиться расчет?
Да и не влезет результат в BigInt, если хотя бы небольшая часть чисел будет больше 1 )
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40112955
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro
через сколько тысяч лет должен закончиться расчет?
через 00:02:44.0923093 (при ||-ом вычислении); к слову при нормальном что-то типа 7 минут
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40112994
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как вы его считаете? Он же ни в память ни в диск не влезет.
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40113010
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Так как вы его считаете?

Ну, может он его по формуле Стирлинга считает. Хотя с памятью да, в любом случае будет затык.
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40113096
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 1млн! только число порядков несколько миллионов
источника такого количества информации просто не существует
Я думаю, что с ТС просто возникло какое-то недопонимание ))

считается, что в известной наблюдаемой вселенной существует от 10 78 до 10 82 атомов
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40113097
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Если отбросить коэффициенты то по Стирлингу будет примерно
миллион в миллионной степени. Такие числа невозможно ни хранить
ни перемножать. Всей планеты Земля не хватит на это.

Наверное ТС страдает фигней.
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40113293
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь разочаровать уважаемых знатоков: не просто считает, но и выводит на экран
На скане факториал 800000L - (долго работает ToString(), поэтому не 1 000 000), влезла в скан только часть последних нулей, размер шрифта 5)))))
результаты вычислений 1000000L! на 8ми ядерном ноутбучном i5 10ого поколения получен за 00:03:10.1499570.
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40113294
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проще же посмотреть, например тут: Factorial Calculator n!

там нет возможности посчитать для 1000000, только для 999999
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40113317
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopin
Боюсь разочаровать уважаемых знатоков: не просто считает, но и выводит на экран
посчитать факторил - задача тривиальная и одноразовая, вопрос был в другом
Andromeda777
какой у вас порядок количества чисел?
и ответ
v skopin
Тестирую на 1000000! (факториал)

это и вызвало недоумение
...
Рейтинг: 0 / 0
Как оптимизировать перемножние результатов массива задач?
    #40113318
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну то есть задача фактически перемножить 1000000 чисел, а не 1000000! чисел
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как оптимизировать перемножние результатов массива задач?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]