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


Автор: m0zg 3.11.2008, 20:53
Погите пожалуйста распараллелить:
A = N!M!

Автор: popovda 6.11.2008, 14:39
А в чём вы значения собираетесь хранить?  Язык какой?

Автор: Sartorius 6.11.2008, 14:57
Пусть каждый процессор вычисляет произведение подпоследовательносит из (N+M)/num_of_procs элементов а потом в корневом процессе они перемножаются. А дальше все зависит от того какой технологией вы пользуетесь для распараллеливания. MPI???

Автор: Иванофф 7.11.2008, 04:00
зачем это параллелить, разбить на два цикла. факториал быстро выберет разрядность. накладные расходы сожрут весь эфект.
надо учить преподавателей, что задавать некоректные тупые задачи - это плохо.

Автор: Sartorius 7.11.2008, 12:44
Цитата(Иванофф @  7.11.2008,  05:00 Найти цитируемый пост)
факториал быстро выберет разрядность.

кто сказал, что аппаратная арифметика используется... можно и длинную сделать.

Автор: popovda 7.11.2008, 12:54
Ну с длинной арифметикой не надо изобретать велосипед. Библиотеки есть и алгоритмы тоже. Только вот сомнительно, что от её использования в параллель будет выигрыш. А формула Стирлинга не подходит?

Автор: Иванофф 8.11.2008, 00:27
Цитата(Sartorius @ 7.11.2008,  12:44)
Цитата(Иванофф @  7.11.2008,  05:00 Найти цитируемый пост)
факториал быстро выберет разрядность.

кто сказал, что аппаратная арифметика используется... можно и длинную сделать.

можно и 2-3 тысячи знаков посчитать. ну и какое реальное применение у этого может быть.

Автор: m0zg 11.11.2008, 18:31
Цитата(popovda @ 6.11.2008,  14:39)
А в чём вы значения собираетесь хранить?  Язык какой?

Язык Фортран smile. Результаты в вектор

Автор: popovda 12.11.2008, 20:41
Я имел ввиду тип данныхsmile

Автор: m0zg 17.12.2008, 06:00
Я опять со своей задачей. Преподаватель мне сказал, что тут ещё кое-что нужно доделать, я комменты к коде подписал. Вобщем, нужна помощь smile

Код

      DIMENSION A(100), B(100), C(100), D(100)
      EQUIVALENCE (A(100), B(100), C(100), D(100))
      S=10
      N=5
      M=5
      DO 1 I=1,N
      A(I)=I
1     CONTINUE
      DO 2 I=1,M
      B(I)=I
2     CONTINUE
      H=1.0
      G=1.0
CSBEG
      DO 3 I=1,N
      H=H*A(I)
3     CONTINUE
      DO 6 I=1,M
      G=G*B(I)
6     CONTINUE
      H=H*G
CSEND
!      тут должна быть подготовка к параллельному вычислению
CPBEG
!      вот тут должен быть блок параллельного вычисления
CPEND
      IFLAG=0
      DO 4 I=1,N
      IF (C(I).NE.D(I)) IFLAG=1
4     CONTINUE
5     FORMAT(' H=',F10.2,' G=',F10.2,' S=',I2,' IFLAG=',I1)
      WRITE(6,5) H,G,S,IFLAG
      STOP
      END


Автор: m0zg 18.12.2008, 02:15
То, что нужно было в первом сообщении написать smile

Пояснения к моей лабе
 
РАСПАРАЛЛЕЛИВАНИЕ РЕКУРРЕНТНЫХ СООТНОШЕНИЙ
Цель работы - изучение особенностей распараллеливания рекуррентных соотношений, оценка эффективности  
применения средств МП для распараллеливания рекуррентных соотношений.
 
В работе исследуются алгоритмы параллельного вычисления рекуррентных соотношений на векторно-
конвейерном процессоре. Каждому студенту выдается индивидуальное задание в виде формулы рекурсии первого  
порядка и предлагается распараллелить исходное соотношение методом каскадных сумм, составить программу на  
языке ФОРТРАН для векторно-конвейерного вычислителя и исследовать зависимости полученного ускорения от  
длины конвейера и от числа вычисляемых термов в исходном выражении.
 
Рабочая программа должна включать последовательный циклический алгоритм вычисления  
рекуррентного соотношения и его параллельную  форму,  использующую средства МП До выполнения операторов  
тела цикла с помощью функций МП необходимо преобразовать массивы и векторы к виду, в  котором  индексы  
меняются непрерывно от 1 до заданной величины с шагом 1. 

Автор: m0zg 29.12.2008, 13:32
вобщем, с помощью добрых людей я таки написал, но она не работает под Фортран 77. Видимо, из-за функции CSHIFT. Может кто-нибудь знает как переделать?

Код

      DIMENSION A(8), B(8)
      S=8
      V=8
      N=11
      M=12
      AN1=1
      AM1=1
      AN2=1
      AM2=1
CSBEG
      DO 21 I=1,N
      AN1=AN1*I
21    CONTINUE
      DO 22 I=1,M
      AM1=AM1*I
22    CONTINUE
      A1=AN1/AM1
CSEND
CPBEG
      DO 6 I=1,N,V
      Z=N-I+1
      IF (Z.GT.V) GO TO 2
      GO TO 4
2     Z=V
4     DO 1 J=1,Z
      A(J)=I+J-1
1     CONTINUE
      DO 5 J=Z+1,V
      A(J)=1
5     CONTINUE
      #CALL EMULVV(A,A,CSHIFT(A,4),4)
      #CALL EMULVV(A,A,CSHIFT(A,2),2)
      AN2=AN2*A(1)*A(2)
6     CONTINUE
      DO 16 I=1,M,V
      Z=M-I+1
      IF (Z.GT.V) GO TO 12
      GO TO 14
12    Z=V
14    DO 11 J=1,N
      A(J)=I+J-1
11    CONTINUE
      DO 15 J=Z+1,V
      A(J)=1
15    CONTINUE
      #CALL EMULVV(A,A,CSHIFT(A,4),4)
      #CALL EMULVV(A,A,CSHIFT(A,2),2)
      AM2=AM2*A(1)*A(2)
16    CONTINUE
      A2=AN2/AM2
CPEND
      IFLAG=0
      DO 31 I=1,N
      IF (A1.NE.A2) IFLAG=1
31    CONTINUE
32    FORMAT(' A1=',F9.2,' A2=',F9.2,' S=',I2,' IFLAG=',I1)
      WRITE(6,32) A1,A2,S,IFLAG
      STOP
      END


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