Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [Pro] Распаралелить. Метод гиперплоскостей


Автор: ctud 4.1.2009, 02:51
Кто в силах, помогите с прогой, очень прОшу 
(распаралелить)
;////////////////////////////////////////////////////// 
Исходный цикл имеет вид: 
DO 21 I=1,N 
DO 21 J=1,L 
B(J,I)=(A(I,J)-C(J,I)-D(I)) 
D(I)=B(I,I)/2 
21 CONTINUE 
Метод гиперплоскостей

Автор: marcusmae 9.1.2009, 13:45
ctud

Просто распараллелить Вам поможет автораспараллеливание (см. опции компилятора). А чтобы распараллелить так, чтобы от этого был толк, необходимо знать, как будут кешироваться значения массивов. В частности, они будут кешироваться по-разному в зависимости от того, мало ли N или L. А если оба не малы, то может поможет chop into chunks - разбивать цикл на кэшируемые по размеру данных подциклы и их уже параллелить.

Автор: ctud 14.1.2009, 01:30
мне нужено было распаралелить "Методом гиперплоскостей", я вроде писал, жаль помощь вовремя не пришла

Автор: marcusmae 14.1.2009, 03:00
А, вот оно что. Жаль, что невовремя, надеюсь, всё в порядке. 

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

Код

DO 21 I=1,N 
DO 21 J=1,L 
B(J,I)=(A(I,J)-C(J,I)-D(I)) 
D(I)=B(I,I)/2 
21 CONTINUE


Кажется, тут для каждого i при 1 < j < i D(i) будет всё-время один, а при j > i - всё-время другой. Значит, можно

Код

DO I=1,N
  B(1,I)=(A(I,1)-C(1,I)-D(I))
  D(I)=B(I,I)/2
  DO J=2,I
    B(J,I)=(A(I,J)-C(J,I)-D(I))
  ENDDO
  D(I)=B(I,I)/2
  DO J=I+1,L
    B(J,I)=(A(I,J)-C(J,I)-D(I))
  ENDDO
ENDDO


Примерно так. Зависимостей по данным ни для какого цикла, будь он параллльный, тут вроде нет, а эквивалентность результатов вроде должна быть (при доп. проработке особых случаев). Не проверял, может это и неправильно, но похоже. И ещё по-моему для такого рода задач есть какой-то строгий метод типа построения свёрток графов что ли. Интересно, каков ответ? И ещё больше интересно: скажите, пожалуйста, а где Вас этому учат, если не секрет?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)