PARALLEL.RU

Дискуссионный клуб по параллельным вычислениям
Текущее время: 21 авг 19 23:59

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Раскрытие циклов
СообщениеДобавлено: 4 апр 08 8:40 
Не в сети

Зарегистрирован: 3 апр 08 7:10
Сообщения: 5
Считаю тензор C[m, n, o, p] = C[i, j ,k ,l]*A[i, m]*A[n, j]*A[o, k]*A[p, l]
С - это матрица 3х3х3х3, А - матрица 3х3

на С++ считаю так:

for(int am=1; am<4;am++){
for(int an=1; an<4;an++){
for(int ao=1; ao<4;ao++){
for(int ap=1; ap<4;ap++){

int t=0;

for(int ai=1; ai<4;ai++){
for(int aj=1; aj<4;aj++){
for(int ak=1; ak<4;ak++){
for(int al=1; al<4;al++){
t=t+C[ai,aj,ak,al]*A[ai,am]*A[an,aj]*A[ao,ak]*A[p,l];
}}}}
C[am,an,ao,ap]=t;
}}}}

Как параллелить правильно?
я думал раскрывать циклы по очереди.
1 цикл - 3 потока,
2 - 9,
3 - 27,
4 - 81.

Но не записывать же мне вручную 81 поток..
Подскажите, где почитать про распараллеливание вложенных циклов..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Раскрытие циклов
СообщениеДобавлено: 4 апр 08 14:26 
Не в сети

Зарегистрирован: 28 май 07 12:10
Сообщения: 47
Откуда: ИПС РАН
На MC# (http://www.mcsharp.net) это можно записать очень просто:

Tensor tnsr = new Tensor();
for(int am=1; am<4;am++){
for(int an=1; an<4;an++){
for(int ao=1; ao<4;ao++){
for(int ap=1; ap<4;ap++){
tnsr.Calculation ( am, an, ao, ap, ... );
}
}
}
}
public async Calculation ( int am, int an, int ao, int ap, ... ) {
....
}
Другое дело, что, видимо, 81 поток на одну машину (со сколькими ядрами ? ) не очень эффективно,
поэтому аналогичным образом можно сократить их количество до 27 или 9.
Если поднапрячься, то несложными приемами можно обеспечить столько потоков, сколько имеется ядер на машине.
См., в качестве примера,
http://www.mcsharp.net/matrix_multiplication.html


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB