PARALLEL.RU

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

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: SMP - помогите, кто чем может
СообщениеДобавлено: 24 ноя 06 13:19 
Не в сети

Зарегистрирован: 24 ноя 06 13:01
Сообщения: 4
Откуда: Москва
Есть практическая задача - вкратце вылядит так:

int cnt,i;
long ProcessNumber=((struct SMPType*)(Data))->Number;
long n=SMP_nn;
double boofer;
double a[1000],b[1000];
int GStart=SMP_i0;
int GEnd =SMP_i__1;
int Start=SMP_n[ProcessNumber];
int End=SMP_ne[ProcessNumber];
for (i = GStart; i <= GEnd; ++i) {
boofer=0;
for(cnt=SMP_n[ProcessNumber];cnt<SMP_ne[ProcessNumber];cnt++){
boofer+=a[cnt]*b[cnt];
}
//-----Barrier sychronization section start
pthread_mutex_lock(&MutexLock);
SMP_hes[(i)-1 + ((*SMP_ll)-1)* ( SMP_ldhes)]+=boofer;
pthread_mutex_unlock(&MutexLock);
Synchronize(ProcessNumber,NULL);
*SMP_tem = -SMP_hes[(i)-1 + ((*SMP_ll)-1)* ( SMP_ldhes)];
for(cnt=SMP_n[ProcessNumber];cnt<SMP_ne[ProcessNumber];cnt++){
SMP_vnew[cnt]+=SMP_v[((i)-1)* n+cnt]*(*SMP_tem);
}
}

Это тело PThreada, вектора SMP_v и SMP_vnew динамически аллокируемые в основной программе и явялются частями одного динамически аллокируемого вектора...

Испытывается все на 4-х процессорном SUN-е, собирается с помощью g++ 3.2 или Sun-овского CC (оптимизация ключом -O3) все делается под Solaris.
Тестовые примеры с расчетом числа PI распараллеливаются, а этот вариант нет - нет ускорения - есть незначительное замедление.

Мне мниться, что проблемма состоит в подкачке данных из памяти (сиреч два процесса читают данные из памяи с той же скоростью, что и один процесс).

Но может быть есть и другие более практичные версии? Может кто сталкивался с подобной проблеммой? Буду рад любым дельным мыслям и коментариям - заранее большое спасибо.

_________________
In a theory - theory and practice are same, but in a practice ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 ноя 06 13:22 
Не в сети

Зарегистрирован: 24 ноя 06 13:01
Сообщения: 4
Откуда: Москва
Пардон - задачка выглядить так:
void* ParallelOrt1(void* Data){
int cnt,i;
long ProcessNumber=((struct SMPType*)(Data))->Number;
long n=SMP_nn;
double boofer;
double a[1000],b[1000];
int GStart=SMP_i0;
int GEnd =SMP_i__1;
int Start=SMP_n[ProcessNumber];
int End=SMP_ne[ProcessNumber];
for (i = GStart; i <= GEnd; ++i) {
//-----computing of "partitial" dot product : avery process will compute the dot product of elements at first part of vectors
boofer=0;
for(cnt=Start;cnt<End;cnt++){
boofer+=SMP_vnew[cnt]*SMP_v[((i)-1)* n+cnt];
}
//-----Barrier sychronization section start
pthread_mutex_lock(&MutexLock);
SMP_hes[(i)-1 + ((*SMP_ll)-1)* ( SMP_ldhes)]+=boofer;
pthread_mutex_unlock(&MutexLock);

Synchronize(ProcessNumber,NULL);
*SMP_tem = -SMP_hes[(i)-1 + ((*SMP_ll)-1)* ( SMP_ldhes)];
//------computing of the "partition" daxpy according to previous approach
//for(cnt=SMP_n[ProcessNumber];cnt<SMP_ne[ProcessNumber];cnt++){
SMP_vnew[cnt]+=SMP_v[((i)-1)* n+cnt]*(*SMP_tem);
}
}
return(0);
}

_________________
In a theory - theory and practice are same, but in a practice ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 ноя 06 16:42 
Не в сети

Зарегистрирован: 11 дек 02 19:37
Сообщения: 872
Откуда: НИВЦ МГУ
Можно попробовать временно убрать барьер и запись в SMP_hes и сравнить скорость на одной и 4-х нитях. У меня подозрение, что тормозит именно запись (ещё ведь кэши обновлять надо).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 ноя 06 16:55 
Не в сети

Зарегистрирован: 24 ноя 06 13:01
Сообщения: 4
Откуда: Москва
Увы, этот ход уже опробован - проблеммы это не решает. Ежели убрать синхронизацию, то времена работы программ в 1-но и 2-х (4-х) процессном варианте совпадают.

_________________
In a theory - theory and practice are same, but in a practice ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 ноя 06 11:58 
Не в сети

Зарегистрирован: 11 дек 02 19:37
Сообщения: 872
Откуда: НИВЦ МГУ
Запись в SMP_hes тоже убирали? Если да, то по всей видимости тормозит чтение из памяти, хотя это и странно... Что именно за SUN?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 ноя 06 17:36 
Не в сети

Зарегистрирован: 24 ноя 06 13:01
Сообщения: 4
Откуда: Москва
Машинка зовется так SUNW,Sun-Fire-V440.

4 процессора
16 ГБ оперативки.
Процессоры UltraSPARC IIIi 1,06 ГГц. (64 бита) Кэш-память 64 КБ, 1 МБ встроенный кэш второго уровня

Оперативная память:
4 слота DIMM на каждый процессор, DDR-1 SDRAM (PC2100), 128-битная шина с проверкой ECC. От 4 ГБ до 16 ГБ.

Вот.

_________________
In a theory - theory and practice are same, but in a practice ...


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

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


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

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


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

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