LINUX.ORG.RU

smp вычисления


0

0

Есть такой код:
for (i=0;i<100000000;++i) {
       a = calc();
       sum += a;
}

В функции calc() проводятся вычисления. Как сказать, чтобы calc() выполнялись отдельно на какждом процессоре в smp системе, а результаты потом просумировались (Без всяких тредов и форков). 

Т.е. вопрос
Как можно управлять тем, что будет делать тот или иной процессор?
anonymous

Ответ на: комментарий от cvv

делаеш форк после чего есть надежда что дочерний процесс будет делать вычисления на другом процессоре

cvv ★★★★★
()

> Без всяких тредов и форков

Через астрал?

tailgunner ★★★★★
()
Ответ на: комментарий от cvv

for (i=0;i<50000000;++i) { a = calc(); sum += a; } for (i=50000000;i<100000000;++i) { a = calc(); sum += a; }

Вот так по идее должно крутится на 2-х процах.

anonymous
()
Ответ на: комментарий от anonymous

возродим диагональное программирование?

gr_buza ★★★★
()

используй MPI и не тра**й людям мозги
можешь ещё openMP

anonymous
()

Без потоков и процессов...это интересно...
Если с потоками, то смотреть в сторону pthread_attr_setaffinity.

BigBiker
()
Ответ на: комментарий от anonymous

Тебе это не поможет. В твоём простом случае лучше всего воспользоваться OpenMP. Соответсвенно, изучай OpenMP. gcc-4.2 его поддерживает. Вижуляк 2005 тоже, и icc...

В более сложных случаях для SMP может потребоваться непосредственное использование потоковых функций, соответсnвенно учи библиотеку pthreads.

OpenMP сама по себе не панацея. Если твоя функция calc() не способна работать в параллельном режиме, то тебе вообще ничего не поможет.

yz
()
Ответ на: комментарий от cvv

то что ты хочещ умели делать первые пни. но потом интел уразумела что она страдала ерундой после чего исправилась и больше ерунды не делает...

cvv ★★★★★
()
Ответ на: комментарий от cvv

просьба - не рекомендуйте парню pthreads. он ещё не успел осилить паралельное программирование а ему сразу предлагают хождение по граблям.

cvv ★★★★★
()
Ответ на: комментарий от yz

> OpenMP сама по себе не панацея

не говоря о том, что он как раз использует нити

tailgunner ★★★★★
()
Ответ на: комментарий от cvv

мужик, вот ты насрал 5 постов в этом треде, а полезного ничего не сказал. Про нити и форки я сказал в самом начале, они не подходят. Код не мой, сильно модифицировать не хочу. За openMP спасибо, возможно подойдет.

anonymous
()
Ответ на: комментарий от anonymous

> За openMP спасибо, возможно подойдет.

Ну так бы и скзал, что нужны параллельные расширения языка... еще есть UPC.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

не знаю...

я всё ещё придерживаюсь мнения что санитары рулят...

cvv ★★★★★
()

> Есть такой код:
for (i=0;i<100000000;++i) {
a = calc();
sum += a;
}


Этот код не требует SMP, бо после оптимизации должно остаться следующее:

sum=100000000*calc();

anonymous
()
Ответ на: комментарий от anonymous

> Этот код не требует SMP, бо после оптимизации должно остаться следующее:

Это же не хаскель, calc вообще может быть алиасом рандома

swizard
()
Ответ на: комментарий от swizard

Если calc каждый раз возвращает разный результат, то никак в принципе. Почему, догадайся сам. Если же calc не меняет окружение, то можно оптимизировать.

krum
()
Ответ на: комментарий от krum

А вообще, читать sicp:) Там это вопрос обсуждается тоже.

krum
()

Если у тебя язык без side-effect и достаточно умный компилятор/интерпретатор то разнесет он сам.

Хотя чувствую я, что у тебя Си.

Если это действительно так, то у тебя на выбор:

pthreads(господи помилуй), mpi, mp, fork'и

Другие способы параллельного программирования в случаях изменяемой памяти мне не известны.

catap ★★★★★
()
Ответ на: комментарий от swizard

> calc вообще может быть алиасом рандома

Единственная разница заключается в том, что в этом случае можно не домножать её результат на сто миллионов ;-)

anonymous
()
Ответ на: комментарий от anonymous

> Единственная разница заключается в том, что в этом случае можно не домножать её результат на сто миллионов ;-)

гонишь:) там распределение другое будет:)

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

по предельной теореме сумма случайных величин стремится к величине с нормальным распределением

поэтому, один фиг, распараллеливать не надо

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.