[Delphi] 2 procesory w systemie

0

Mam taki oto problemik:
Mam maszynę dwuprockową. Piszę program (implementacja pewnego algorytmu). Chodzi mi o to aby utworzyć współbieżne wątki dedykowane do konkretnego procesora. Krótko mówiąc czy istnieje coś takiego jak CreateThread (numerProcesora)? Być może w Win API istnieje jakaś funckja. Wiem, że w systemie operacyjnym (Win XP) można ustawić, który(które) z procesorów ma być wykorzystany do wykonania aplikacji. Jak rozumiem to ustawienie dotyczy PROCESU. Czy w ogóle istnienie możliwość ustawienia takiej właściwości dla WĄTKÓW? Help me!

0

Wystarczy, że napiszesz 2 wątki. System wieloprocesorowy sam zadba już o to jak przydzielić zadania procesorom. Nie zawsze podział jeden wątek jednemu, drugi drugiemu procesorowi jest najlepszy. Często szybciej można osiągnąć wyniki, jeżeli jeden zajmuje się jedym programem a drugi innymi.

0

Nie ma to jak dobrze poszukać:

Funkcja SetThreadIdealProcessor załatwia sprawę.
Nie mniej dzięki za odpowiedzi. Poniżej opis funkcji.

The SetThreadIdealProcessor function is used to specify a preferred processor for a thread. The system schedules threads on their preferred processors whenever possible.

DWORD SetThreadIdealProcessor(

HANDLE hThread,	// handle to the thread
DWORD dwIdealProcessor	// ideal processor number

);

Parameters

hThread

Handle to the thread whose preferred processor is to be set. The handle must have the THREAD_SET_INFORMATION access right associated with it. For more information, see Thread Objects.

dwIdealProcessor

Specifies the number of the preferred processor for the thread. A value of MAXIMUM_PROCESSORS tells the system that the thread has no preferred processor.

Return Values

If the function succeeds, the return value is the previous preferred processor or MAXIMUM_PROCESSORS if the thread does not have a preferred processor.
If the function fails, the return value is - 1. To get extended error information, call GetLastError.

Remarks

You can use the GetSystemInfo function to determine the number of processors on the computer. You can also use the GetProcessAffinityMask function to check the processors on which the thread is allowed to run. Note that GetProcessAffinityMask returns a bit mask whereas SetThreadIdealProcessor uses an integer value to represent the processor.

0

W poprzednim postku zapomniałem dodać, że funkcja działa dla systemów wspierających więcej niż 1 procesor (Win NT/2000/XP).

Dziś sprawdzę, to wam powiem, czy na 100% działa. :-)

0

W poprzednim postku zapomniałem dodać, że funkcja działa dla systemów wspierających więcej niż 1 procesor (Win NT/2000/XP).

Dziś sprawdzę, to wam powiem, czy na 100% działa. :-)

A co z Linuksem?

0

A co z Linuksem?

Dla linux'a masz lepsze rozwiazania :: MPI (obliczenia rownolegle) temu mozna zycie poswiecic, na stronkach w necie mozesz nawet znalezc zajebiste kody dla MPI (np. w C++ , C lub Fortranie)
ja np. znalazlem kod do programu wykonującego kompresję MPEG (tu mp3) muzyki na N komputerach (ilość komputerów wskazywales w pliku config). Wykonywalem test na 6 komputerach PIII 866 po 512 MB Ram i wiesz ile sie konwertowal wav do mp3 (~50MB) ... 19sec :-)

pozdrawiam wojta$

0

I dlatego Linux rulez! Szkoda, że mam tylko jeden procesor.

1 użytkowników online, w tym zalogowanych: 0, gości: 1