Member 11768130 Ответов: 2

Как я могу сравнить два массива, используя parallel for?


Привет,
Я хочу сравнить два массива и найти разницу между ними.
Но есть ошибка в сравнении, потому что при использовании parallel индекс массива не увеличивается в последовательности 1,2,3...

Пожалуйста, помогите мне.

Что я уже пробовал:

Параллель. для(1, 28, Sub(jjj)
Если ImgRecord. chromosome (jjj) = True, то
mstr = CStr(Form1.inp_img_measures(jjj))
d1 = CDbl(mstr)
d2 = CDbl(Form1. MeasuresArray (i, jjj))

AMCGH = AMCGH + Abs ((d1 - d2))

Конец, Если
Конец Подводной Лодки)

Patrice T

Сделайте свой ум и выберите язык.

Philippe Mori

Также используйте блок кода для форматирования вашего кода, чтобы его было легче читать.

2 Ответов

Рейтинг:
19

Patrice T

Цитата:
Но есть ошибка в сравнении, потому что при использовании parallel индекс массива не увеличивается в последовательности 1,2,3...

Parallel и in sequence являются взаимоисключающими условиями.
Вы можете иметь один из них, но не оба.

Вы должны переосмыслить свой алгоритм так, чтобы вам не нужно было in sequence состояние в parallel часть.


Member 11768130

Большое спасибо за ваш ответ.
Я хочу увеличить скорость сравнения двух массивов.
не могли бы вы помочь мне, как использовать параллель, если это одно из решений, пожалуйста.

Patrice T

Невозможно ответить без подробностей о том, что делает код.

Member 11768130

Я хочу сравнить массивы, чтобы найти сумму расстояний между элементами массивов.
У меня есть три арррея X, Y и Z.
Мне нужно сравнить массива x в массив Y, а массив X с З. массива
Я думаю, что могу сделать эти два сравнения параллельно. - Можно?

Patrice T

Не могу сказать, если вы не показываете автономный фрагмент кода.
Что такое CDbl ? и AMCGH ?
И мы не можем догадаться, почему сравнение должно быть последовательным.

Member 11768130

ниже приведен четкий код:

Параллель. для(1, 28, Sub (j)
Если ImgRecord. chromosome (j) = True, то
Д1 = форма form1.inp_img_measures(Дж)

d2 = Form1. MeasuresArray(i, j)

A = A + Abs ((d1 - d2))

Конец, Если
Конец Подводной Лодки)

Рейтинг:
10

Dave Kreskowiak

Вам действительно нужно прочитать документацию по Parallel. For.

Он работает, разбивая последовательность на куски и назначая каждый кусок проблемного пространства другому потоку.

Например, у вас есть параллель. For(1, 100,...). Последовательность может быть разделена на 1-25, 26-50, 51-75, 76-100. Каждый поток начинает работать на своем собственном куске, отдельно от других. Ни один поток не знает о том, что делают другие, и между ними нет синхронизации.

Проблема, как вы ее описываете, не поддается распараллеливанию. Поскольку вам нужна вся последовательность для запуска, ну, последовательно, вы должны были бы иметь код синхронизации, встроенный в саб, который вы запускаете. Это сделало бы ваш код по существу однопоточным, полностью обходя всю концепцию параллельности.


Member 11768130

Большое спасибо за ваш ответ.
Я хочу увеличить скорость сравнения двух массивов.
не могли бы вы помочь мне, как использовать параллель, если это одно из решений, пожалуйста.

Dave Kreskowiak

Вам придется выяснить, что вы можете обрабатывать атомарно. Если вы должны обрабатывать что-то последовательно, потому что это зависит от чего-то ранее обработанного, вы не можете распараллелить это. Если вы можете, вот ваша граница.

Кроме того, у нас недостаточно информации о том, что вы делаете и как вы это делаете.

Member 11768130

Я хочу сравнить массивы, чтобы найти сумму расстояний между элементами массивов.
У меня есть три арррея X, Y и Z.
Мне нужно сравнить массива x в массив Y, а массив X с З. массива
Я думаю, что могу сделать эти два сравнения параллельно. - Можно?

Dave Kreskowiak

Невозможно сказать. Это зависит от данных и того, как вы их обрабатываете, а не от того, что они находятся в массивах.