0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
1

Eвклидова норма вектора с помощью метода Parallel.For и Parallel.Invoke

26.10.2016, 19:11. Показов 1486. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется прога (евклидова норма вектора)
Преобразовать её, чтобы распараллеливание шло методом методом Parallel.For и Parallel.Invoke

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Evklid
{
    class Program
    {
        static void Main(string[] args)
        {
            var vector = new double[] { 2, 3, 4, 5, 6 }; // Вектор
            var taskCount = 3; //Число параллельных задач
 
            var sum = CalculateSum(vector, taskCount); //Параллельный подсчет суммы
            var norm = Math.Sqrt(sum);
            Console.WriteLine("Сумма квадратов: " + sum + "; Норма вектора: " + norm);
            Console.ReadKey();
        }
 
        private static double CalculateSum(double[] vector, int taskCount)
        {
            var len = vector.Length;
 
            //Не может быть задач больше числа элементов вектора
            if (taskCount > len)
                throw new ArgumentException();
 
            var step = (len + 1) / taskCount; //Интервал для суммы
            var tasks = new Task<double>[taskCount];
            for (var i = 0; i < taskCount; i++)
            {
                tasks[i] = Task<double>.Factory.StartNew((obj) => Sum(vector, (int)obj * step, ((int)obj + 1) * step - 1), i);
            }
            Task.WaitAll(tasks);
            var sum = tasks.Select(x => x.Result).Sum();
            return sum;
        }
 
 
 
        static double Sum(IEnumerable<double> vector, int index1, int index2)
        {
            index2 = index2 >= vector.Count() ? vector.Count() : index2;
            return vector.Skip(index1).Take(index2 - index1 + 1).Select(x => x * x).Sum();
        }
    }
}
0
26.10.2016, 19:11
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.10.2016, 19:11
Ответы с готовыми решениями:

Вычислить евклидову норма вектора. Используя класс Task или Parallel. Параллельное программирование
Народ помогите!!!

Как распараллелить цикл с помощью Parallel.For?
Подскажите, как данный цикл for (int i = 0; i &lt; round_segments; i++) bottom_array = new TPoint(Bottom.getX() +...

Невозможно получить аргумент типа для метода Parallel.ForEach
Добрый вечер, подскажите пожалуйста как это можно исправить, для обычного цикла foreach всё работает. ...

2
134 / 130 / 107
Регистрация: 17.03.2009
Сообщений: 364
27.10.2016, 09:15 2
Вот, все очень просто.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        static void Main(string[] args)
        {
            var vector = new double[] { 2, 2, 2, 2, 2 }; // Вектор
            var sum = 0.0;
            Parallel.ForEach(vector,
                () => // Initializer
                {
                    return 0.0;
                },
                (item, state, subtotal) => // Loop body
                {
                    return subtotal += item*item;
                },
                (subtotal) => // Accumulator
                {
                    lock (vector)
                    {
                        sum += subtotal;
                    }
                });
            
            var norm = Math.Sqrt(sum);
            Console.WriteLine("Сумма квадратов: "+sum+"; Норма вектора: "+norm);
            Console.ReadKey();
        }
0
0 / 0 / 0
Регистрация: 01.10.2016
Сообщений: 54
27.10.2016, 09:25  [ТС] 3
mishau, благодарю. С Invoke я думаю сам разберусь. На самом деле уже вчера разобрался и с For.
Чет запереживал, что не смогу понять )))
0
27.10.2016, 09:25
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.10.2016, 09:25
Помогаю со студенческими работами здесь

Parallel.For
Кароче идея в чём, имееться готовая программа которая патрошит word файлы. Шахтёрским способом добывает html заливает в БД ну вообщем...

Parallel.Foreach
привет. решил ускорить существующий код и воспользоваться Parallel.Foreach. итерирую объект DataTable подобным образом ...

Parallel ForEach
Доброго времени суток. У меня сложилась следующая задача: нужна была параллельная обработка очереди, я её реализовал, но есть проблема в...

Проблемы с Parallel.For
Есть компьютер с 4 ядрами. Решил оптимизировать своё приложение для анализа некоторых данных, используя Parallel.For. До этого использовал...

Цикл Parallel.For
Всем привет! У меня есть такой цикл int ApokolSize=15; .... ........ for (int i = 1; i &lt;= ApokolSize; i++) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
Laravel или Symfony: что лучше для старта?
Wired 18.02.2025
В веб-разработке выбор правильного фреймворка может стать определяющим фактором успеха проекта. Особенно это актуально для PHP - одного из самых распространенных языков программирования, где Laravel. . .
Что нового в Laravel 12
Wired 18.02.2025
С момента своего появления в 2011 году Laravel постоянно развивается, внедряя инновационные решения и совершенствуя существующие возможности. В начале 2025 года ожидается выход Laravel 12 - новой. . .
Роутер в Laravel: как работать с маршрутами
Wired 18.02.2025
Маршрутизация - один из основополагающих элементов любого веб-приложения на Laravel, определяющий как приложение отвечает на HTTP-запросы к различным URL-адресам. По сути, роутинг - это механизм. . .
Интеграция шаблона Bootstrap в Laravel PHP
Wired 18.02.2025
Разработка веб-приложений в современном мире требует не только надежного бэкенда, но и привлекательного, отзывчивого интерфейса. Laravel, как один из самых популярных PHP-фреймворков, отлично. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru