Oppure

Loading
29/09/15 15:03
Postato originariamente da TheDarkJuster:

Dovrebbe essere il SO a prendersi la briga di deceidere se parallelizzare i thread su più core o meno


Ni ... si può fare la richiesta al sistema operativo di allocare thread/processi su core diversi esplicitamente. Il sistema operativo, ovviamente, poi decide in autonomia su cosa fare ...

in quando in C il concetto "core" non esiste.


Infatti ti ho detto che la faccenda è gestibile da API del sistema operativo, non dal C.

La soluzione proposta da nessuno non va bene, perchè quelle sono api di windows e su linux NON sono disponibili.


Su Linux userai

sched_setaffinity()

specifica per Linux.

Ti ritroveresti a scrivere una versione del programma per ogni SO


Quando si parla di queste caratteristiche, si imposta il codice in modo da utilizzare la compilazione condizionale ...

#if defined(WIN32) ....

Inoltre: con pthread_setaffinity_np() fai ciò che vuoi.


Sai cosa vuol dire np alla fine del nome di questa funzione?
29/09/15 15:09
TheDarkJuster
con la compilazione condizionale stai comunque scrivendo, due programmi differenti. Certo, hanno molte parti uguali fra loro, ma sono due programmi differenti.

No, io ho solo letto man7.org/linux/man-pages/man3/…
aaa
29/09/15 15:10
Postato originariamente da TheDarkJuster:

con la compilazione condizionale stai comunque scrivendo, due programmi differenti.


Solo nelle parti OS dependent ... ma è inevitabile ...


No, io ho solo letto man7.org/linux/man-pages/man3/…


non portable ...
29/09/15 15:20
TheDarkJuster
Oh..... non lo sapevo proprio. Chiedo scusa. In pratica ho dato un'alternativa sched_setaffinity() ......

Si nessuno, a quanto pare, se il SO non parallelizza su più core i diversi thread in automatico, fare richiesta perchè ciò accada è inevitabile. Sono comunque due programmi che si comportano in maniera differente per avere gli stessi risultati.....
aaa
29/09/15 15:27
Postato originariamente da TheDarkJuster:
Sono comunque due programmi che si comportano in maniera differente per avere gli stessi risultati.....


In che senso "si comportano in maniera differente" ?
29/09/15 15:32
TheDarkJuster
Chiamano due funzioni diverse fra loro. Il risultato è (o comunque dovrebbe essere) lo stesso. Ma non si può dire che chiamare sched_setaffinity() o SetThreadAffinityMask() sia proprio la sessa identica cosa, concordi? Per lo meno per come sono strutturati internamente i kernel e per come i SO mettono a disposizione quelle API.
aaa
29/09/15 21:06
Non puoi pensare che le chiamate al sistema siano uguali in sistemi operativi diversi.

E' il principio che è lo stesso. Ovvero fare allocare ad un core diverso un diverso thread/processo. E questo principio è il medesimo nei due casi.

Devi pensare un maniera un po' più "astratta", non legandoti alla modalità dipendente dall'os ...
30/09/15 8:53
osharko
sched_setaffinity();
pthread_setaffinity_np();

queste due funzioni quindi mi fanno assegnare i thread ad un determinato core?
io ho usato solo thread e fork finore (solo su linux), non pensavo si potesse fare una cosa simile
aaa