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

Распараллеливание циклов в OpenMP

05.04.2016, 17:30. Показов 2539. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Собственно в чем заключается вопрос: есть код, который заполняет трехмерный массив. как эффективно распараллелить? Были предприняты попытки распараллелить циклы заполнения массива, но время работы с opm(в параллельном режиме) получалось больше, чем без. Подскажите пожалуйста, в чем проблема.
Fortran
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
program laba5
integer::i, n, j, k
real::dx,dy,dt
real, allocatable::u(:,:,:)
 
write(*,*) 'n = '
read(*,*) n
!write(*,*) 'dx = '
!read(*,*) dx
!write(*,*) 'dy = '
!read(*,*) dy
!write(*,*) 'dt = '
!read(*,*) dt
dt=0.001
dx=1.0/n
dy=dx
 
allocate(u(n+3,n+3,n+3))
call cpu_time(start)
 
!$OMP PARALLEL
    
do k=1,n
 
    do i=2,n
 
!$OMP DO
        do j=2,n
        u(1,j,k)=f(i*dy,j*dt)
        u(n,j,k)=f(i*dy,j*dt)
        u(i,1,k)=f(i*dx,j*dt)
        u(i,n,k)=f(i*dx,j*dt)
        u(i,j,1)=f(i*dx,j*dy)
        end do
    !$OMP END DO
 
    end do
        
end do
    
 
    
!$OMP END PARALLEL   
 
call cpu_time(finish)
write(*,*) finish-start
 do i=2,n
    do j=2,n
        do k=1,n       
        u(i,j,k+1)=k1(i*dx,j*dy)*(u(i+1,j,k)-2*u(i,j,k)+u(i-1,j,k))
        u(i,j,k+1)=u(i,j,k+1)/(dx*dx)
        u(i,j,k+1)=u(i,j,k+1)+k2(i*dx,j*dy)*(u(i,j+1,k)-2*u(i,j,k)+u(i,j-1,k))/(dy*dy)
        u(i,j,k+1)=u(i,j,k+1)+g(i*dx,j*dy,k*dt)
        u(i,j,k+1)=u(i,j,k+1)*dt+u(i,j,k)
        end do
    end do
end do
open(12,FILE='res',STATUS='REPLACE', ACTION='WRITE')
!WRITE(12,*) 'RESULTS: 22'
WRITE(12,*)(((u(i,j,k),j=2,n),i=2,n),k=2,n)
close(12)
 
deallocate(u)
write(*,*) 'end'
end
gcc frotran на open suse
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2016, 17:30
Ответы с готовыми решениями:

Распараллеливание циклов с использованием OpenMP C++
Доброго времени суток. (Нужен совет, так как разбираюсь с omp почти 3 дня и не хватает знанний) ...

Распараллеливание циклов с ипользованием OpenMP
Есть проблема , получился парадокс - время роботы программы с распараллеливанием дольше на 1 сек...

OpenMP распараллеливание вычислений
Выручите, перепробовал уже с бубном плясать не выходит. Матрицу создаю рандомно, элементов должно...

OpenMP: распараллеливание цикла
Ниже представлена программа для численного интегрирования методом средних прямоугольников,...

2
WH
1577 / 807 / 189
Регистрация: 10.09.2013
Сообщений: 3,197
Записей в блоге: 3
06.04.2016, 16:14 2
А у вас библиотека, которая понимает распараллеливание для gcc установлена? Точно не помню как она называется, что то вроде multilib, если не ошибаюсь. Поищите в нете.
0
1 / 1 / 0
Регистрация: 13.09.2013
Сообщений: 99
08.04.2016, 00:15  [ТС] 3
установлена, я имею в виду как лучше всего распаралелить
0
08.04.2016, 00:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2016, 00:15
Помогаю со студенческими работами здесь

OpenMP распараллеливание цикла
Привет кодеры! Нужна ваша помощь. У меня есть код который нужно распараллелить и тем самым получить...

Распараллеливание с помощью OpenMP
Здравствуйте, уважаемые участники форума! Имеется цикл вида:for (i=1; i<number; i++) { do...

Распараллеливание цикла For с использованием OpenMP
Всем привет. Задался целью изучить OpenMP, что бы в дальнейшем уметь распараллеливать программы....

Работа с OpenMP. Распараллеливание цикла for
Доброго времени суток товарищи. При работе с OpenMP возник следующий вопрос Почему код int i;...

Как выполнить распараллеливание с помощью OpenMP
Доброго дня. У меня есть две функции. void A(const vector <double> &a){ //что-то считаем c...

Распараллеливание вычисления интеграла используя редукции (OpenMP)
Доброго времени суток, ребята! Ксть задача распараллелить процесс вычисления интеграла методом...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru