powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / BigInteger, Parallel.For, HashSet
4 сообщений из 4, страница 1 из 1
BigInteger, Parallel.For, HashSet
    #38878015
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Помогите перевести обычный цикл в Parallel.For

Для меня сложность перевода представляет использование типа BigInteger, шаг +2 и запись структуры в HashSet. Простые Parallel.For писал, но в этом случае не могу понять как модифицировать код, чтобы все работало корректно и оптимально с точки зрения производительности.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 for (BigInteger x = i.Clone(); x <= j; x = x + 2)
                            {                             
                                if (N % x == 0)
                                {
                                    nsn.m = x;
                                    nsn.n = N / x;
                                    multiplesList.Add(nsn); //HashSet
                                    Console.WriteLine("Found !!!");                             
                                }
                            }
...
Рейтинг: 0 / 0
BigInteger, Parallel.For, HashSet
    #38878094
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Testor1, это C#?

Шаг, отличный от единицы, можно сделать следующим образом:
Код: c#
1.
2.
3.
4.
Parallel.For(i, j / 2, x =>
{
    // здесь используем x*2
});


Однако, Parallel.For не может использовать BigInteger в качестве счётчика цикла.

Принимая во внимание
Код: c#
1.
x = x + 2

и
Код: c#
1.
if (N % x == 0)


следует выполнить условие перед циклом. И если true - выполняем цикл уже без условия внутри.

Напоследок отмечу, что HashSet не потокобезопасный.

Так что, следует полностью пересмотреть алгоритм.
...
Рейтинг: 0 / 0
BigInteger, Parallel.For, HashSet
    #38878129
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petalvikTestor1, это C#?

Шаг, отличный от единицы, можно сделать следующим образом:
Код: c#
1.
2.
3.
4.
Parallel.For(i, j / 2, x =>
{
    // здесь используем x*2
});


Однако, Parallel.For не может использовать BigInteger в качестве счётчика цикла.

Принимая во внимание
Код: c#
1.
x = x + 2

и
Код: c#
1.
if (N % x == 0)


следует выполнить условие перед циклом. И если true - выполняем цикл уже без условия внутри.

Напоследок отмечу, что HashSet не потокобезопасный.

Так что, следует полностью пересмотреть алгоритм.

а PLINQ может как-то помочь ?
...
Рейтинг: 0 / 0
BigInteger, Parallel.For, HashSet
    #38881464
Testor1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Testor1,

реализовал параллельную обработку по примеру из интернета. работает немного быстрее.

но не до конца разобрался в принципе.

для каждого вызова функции GenerateNumbers расчитывается возращаемое значение последовательно, а вызов функций происходит параллельно?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  Parallel.ForEach(GenerateNumbers(mNew, temp, mod2), (x) =>
                            {
                                if (N.IsDivisibleBy(x))
                                { 
                                    nsn.m = x;
                                    nsn.n = N / x;
                                    multiplesList.Add(nsn);
                                    Console.WriteLine("Found !!!");

                                }

                            });


public static IEnumerable<mpz_t> GenerateNumbers(mpz_t start, mpz_t end, mpz_t step)
        {
            mpz_t i = start.Clone();
            while (i <= end)
            {
                yield return i;
                i = i + step;
            }
        }
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / BigInteger, Parallel.For, HashSet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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