LINUX.ORG.RU

Мультипроцессорные программы на однопрцессорной системе


0

0

Собственно, subj. Как можно эмулировать многопроцессорность на однопроцессорном компе? Надо писать программы (часть - под Matlab) для многопроцессорных систем, но дома стоит обычный PIII-500MHz. Как быть, подскажите.

Спасибо за помощь!

anonymous

Re: Мультипроцессорные программы на однопрцессорной системе

Простите за нескромный вопрос, но чем, собственно, с точки зрения приложения однопроцессорная система отличается от многопроцессорной?

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

Купи процессор с HyperThreading.

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

Есть тулкит для этого, вот только ЗАБЫЛ как называется!!! :(( MPC? MPI?

SnakePAN ()

Re: Мультипроцессорные программы на однопрцессорной системе

VMWARE поставь.

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

anonymous (*) (2003-08-05 22:02:06.740356) Это смотря какая... Слова SMP,MPP,CC-NUMA,Кластер вам что-нибудь говорят?

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

Никак, так как в один момент времени процессор всегда будет исполнять одну инструкцию. Распараллеливание по конвейерам не в счет ;)

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

1) посмотри OpenMP (www.openmp.org) 2) процессор с HyperPipelined технологией это не совсем SMP, так как распараллеливание там логическое. Присуще она только процессорам P-IV и не всем (это надо уточнять приобретая) Пути решения твоей проблемы все же я думаю в получении доступа хотя-бы на двухпроцессорную платформу. Где собственно и можно развернуться с OpenMP

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

Повторяю вопрос: кому и для чего может быть нужно "эмулировать" многопроцессорность? Если не считать бессмысленного вопроса одного из предыдущих anomymous'ов, который постарался перечислить все аббревиатуры, которые он слышал по данному поводу никто, очевидно, не задумывался, что с точки зрения разработчика ПОЛЬЗОВАТЕЛЬСКОГО приложения (а не какого-нибудь драйвера) разницы между этими компьютерами нет. Если планируешь использовать его на SMP системе - пишешь обычное многопоточное приложение. Я на таких компьютерах много лет работаю. Дома у меня тоже такой стоит. race condition (с точки зрения приложения) абсолютно одинаковые. Что две нити могут одновременно на разных процессорах исполняться, что диспетчер может нити в непредсказуемый момент переключить. То же про кластеры (и про массовый параллелизм) только пишешь код, который запускает определенное число процессов, скажем по числу физических процессоров в системе (на однопроцессорной машине временно ставишь константу-заглушку) и организуешь межпроцессорное взаимодействие. (Код портируемым вообще говоря не будет, но тут же речь идет, как я понимаю только о Linux).

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

BOCHS

Murr ★★ ()

Re: Re: Мультипроцессорные программы на однопрцессорной системе

>Простите за нескромный вопрос, но чем, собственно, с точки зрения приложения однопроцессорная система отличается от многопроцессорной?

Требованием к наличию тонкой многопоточной синхронизации.

Murr ★★ ()

Re: Re: Мультипроцессорные программы на однопрцессорной системе

>Что две нити могут одновременно на разных процессорах исполняться, что диспетчер может нити в непредсказуемый момент переключить.

Банальный пример: планировщик может создать смещение в инструкцию, SMP может создать смещение в такт. Отсюда всплывает такая фундаментальная концепция как атомарные операции.

Murr ★★ ()

Re: Мультипроцессорные программы на однопрцессорной системе

Хотя не уверен делает ли BOCHS при эмуляции SMP правильную растактовку ...

Murr ★★ ()

Re: Мультипроцессорные программы на однопрцессорной системе

Murr, предложите, пожалуйста, ситуацию когда результат работы многопоточного ПОЛЬЗОВАТЕЛЬСКОГО приложения может быть отличаться на многопроцессорной системе.

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

Уточнаяю: ситуация, которая может быть реализована на любом языке отличном от ассемблера. На ассемблере я и сам могу. А все системные функции использующие семафоры давно уже адаптированы к SMP.

anonymous ()

Re: Re: Мультипроцессорные программы на однопрцессорной системе

>Murr, предложите, пожалуйста, ситуацию когда результат работы многопоточного ПОЛЬЗОВАТЕЛЬСКОГО приложения может быть отличаться на многопроцессорной системе.

Я же написал:

Пример кода:

int a;
...
a++;

Он будет всегда нормально работать на UP, а на SMP он без синхронизации возможно смещение частей операции a++ по конвееру, за счет чего возможен сбой при одновременном выполнении a++.

Murr ★★ ()

Re: Мультипроцессорные программы на однопрцессорной системе

Нет. Невозможно. Несмотря на то, что inc на x86 будет выполнять два цикла шины (операнд в памяти, потому что если операнд в регистре то и вопроса-то нет) фактическая запись будет производиться в кэш.Вероятно на старых процессорах это бы и прошло, но уже начиная с Pentium Pro разницы между inc и lock inc с точки знения ОЗУ нет. Хотя ради интереса попробую и сообщу результаты.

anonymous ()

Re: Re: Мультипроцессорные программы на однопрцессорной системе

Ну, во-первых, incl будет гораздо больше трех тактов (как минимум 3 - чтение из памяти, увеличение на 1, запись в память; на самом деле тактов 10-30). Во-вторых, какая разница запись будет вестись в кэш или мимо кэша?

Это просто неатомарная операция ... процессор не блокирует шину на время её выполнения.

Murr ★★ ()

Re: Мультипроцессорные программы на однопрцессорной системе

вот пример программы. результаты с #define ATOMIC_INCR : proc two started(7567) proc one started(7566) proc two stopped proc one stopped a=562314785

без:

proc two started(7580) proc one started(7579) proc two stopped proc one stopped a=1000000000

-------------------------------------------------------------------- #include <stdio.h> #include <sched.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/unistd.h> #include <asm/atomic.h>

#define ATOMIC_INCR

volatile unsigned long a;

int proc(void * ids) { int i; printf("proc %s started(%d)\n", ids, getpid()); for (i=0; i<500000000; i++) #ifdef ATOMIC_INCR atomic_inc((atomic_t*)&a); #else a++; #endif printf("proc %s stopped\n", ids); return 0; }

int main() { int pid, status, res; char stack[8000];

pid = clone(proc, stack+sizeof(stack)-4, CLONE_VM|CLONE_FILES, "two"); proc("one"); res = waitpid(pid, &status, __WCLONE); printf("a=%lu\n", a); return 0; }

Z ()

Re: Мультипроцессорные программы на однопрцессорной системе

вот пример программы.
результаты с #define ATOMIC_INCR :
proc two started(7567)
proc one started(7566)
proc two stopped
proc one stopped
a=562314785

без:

proc two started(7580)
proc one started(7579)
proc two stopped
proc one stopped
a=1000000000

--------------------------------------------------------------------
#include <stdio.h>
#include <sched.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/unistd.h>
#include <asm/atomic.h>

#define ATOMIC_INCR

volatile unsigned long a;

int proc(void * ids)
{
int i;
printf("proc %s started(%d)\n", ids, getpid());
for (i=0; i<500000000; i++)
#ifdef ATOMIC_INCR
atomic_inc((atomic_t*)&a);
#else
a++;
#endif
printf("proc %s stopped\n", ids);
return 0;
}

int main()
{
int pid, status, res;
char stack[8000];

pid = clone(proc, stack+sizeof(stack)-4, CLONE_VM|CLONE_FILES, "two");
proc("one");
res = waitpid(pid, &status, __WCLONE);
printf("a=%lu\n", a);
return 0;
}

Z ()

Re: Мультипроцессорные программы на однопрцессорной системе

уже сам проверил. признаю свою ошибку.

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

anonymous (*) (2003-08-06 10:37:53.60717) Як у вас все просто получается. Типа программировать UMA так же как и NUMA ???.

anonymous ()

Re: Мультипроцессорные программы на однопрцессорной системе

C NUMA никогда дела не имел. Но, думаю, исходный вопрос был про SMP. А теоретически - да, я считаю, что любые smp-aware программы будут идти на компьютере с numa архитектурой. Как учит нас великий HOWTO:

It is possible, however, to connect many shared memory machines to create a "hybrid" shared memory machine. These hybrid machines "look" like a single large SMP machine to the user and are often called NUMA (non uniform memory access) machines because the global memory seen by the programmer and shared by all the CPUs can have different latencies. At some level, however, a NUMA machine must "pass messages" between local shared memory pools.

anonymous ()

отличия SMP и UP

Всё просто: криво написанное многопоточное приложение (a-la приведённые примеры), может правильно работать на UP и неправильно на SMP. Вопрос: зачем придумали объекты синхронизации? Ответ: затем, чтобы таких проблем не возникало. А для особо скоростных вещей (типа счетчиков) есть всякие полезные функции типа atomic_xxx в QNX, InterlockedXXX в Win32.

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