# Développement C/C++ posix sous Mac OS pour un linuxien



## oferrand (9 Mars 2009)

Bonjour à tous,

j'ai développe un moteur de raytracing en C++ sous Linux. Le code est entièrement posix et utilise la librairie pthread (voir le site http://imagin.raytracer.free.fr).

J'envisage prochainement d'acheter un portable, et je suis très tenté par un Macbook (qui ne le serait pas...). Mais j'hésite fortement à me lancer dans l'aventure Mac OS, surtout à cause de ce que je lis ici où là sur la compatibilité posix de Mac OS. 

J'ai pu réaliser moi même des benchs comparatifs de mon moteur de calcul sur Mac OS Leopard et Linux Red Hat 64 bits, avec des cpu Intel Dual Core 2.0 Ghz. Les performances sous Mac OS sont de 20 à 30 % inférieures à celles obtenues sous Linux, notamment à cause d'un nombre de context switching beaucoup plus important. D'après ce que j'ai lu, la gestion des threads posix sous Mac OS est une surcouche de la gestion des threads BSD, et cela dégraderait beaucoup les performances.

Le développement étant mon activité principale, j'hésite à me lancer sous Mac OS. Le problème des performances de la lib pthread n'est pas rédhibitoire, mais J'aimerais connaître l'avis de développeur C/C++ posix qui ont développé sous Unix/Linux et qui sont passé sous Mac OS. Ont-ils rencontré des difficultés de compatibilité de leur code, de performances dégradées de leurs applications ? Ont-ils eu besoin d'installer une distribution Linux sur leur Mac pour continuer à développer et à utiliser leurs outils de dev ?

Merci.

Olivier


----------



## grumff (9 Mars 2009)

En ce qui me concerne, j'avais installé une partition linux au cour de mes années de fac pour m'assurer de pas avoir de problèmes de compatibilité... Et au final j'ai jamais eu besoin de m'en servir. Je dis pas que j'ai pas eu à faire quelques adaptations une fois où deux, mais ça a toujours été hyper mineur. Je code plus beaucoup de c ces derniers temps, mais ça a plutôt du aller en s'arrangeant avec le temps.  Je pense pas que t'ai de soucis à te faire, et pour les perfs, c'est rarement un soucis avec les machines actuelles...


----------



## tatouille (9 Mars 2009)

oferrand a dit:


> Bonjour à tous,
> 
> j'ai développe un moteur de raytracing en C++ sous Linux. Le code est entièrement posix et utilise la librairie pthread (voir le site http://imagin.raytracer.free.fr).
> 
> ...



c'est faux pthread est un wrapper pour mach_thread, et c'est une execution kernel side
c'est donc le noyeau qui manage, ce n'est pas tant la creation qui est lente mais le signal handling, de toute facon l'API thread sur osx est tres different de Linux qui considere un thread comme un processus avec un drapeau, mach considere un thread comme un task
donc quand tu recuperes le total du temps tu as: task + thread creation qui est retourne donc ca fausse ton estimation car ca n'arrivera pas a chaque fois il y a tout un systeme de cache, 

donc attention a comment tu envisages tes benchmarks sur OSX si tu fais exactement le meme prog de test que sous linux et le tourne sous OSX tes resultats sont faux car ils ne prennent pas en compte le mechanisme


----------



## oferrand (10 Mars 2009)

tatouille a dit:


> c'est faux pthread est un wrapper pour mach_thread, et c'est une execution kernel side
> c'est donc le noyeau qui manage, ce n'est pas tant la creation qui est lente mais le signal handling, de toute facon l'API thread sur osx est tres different de Linux qui considere un thread comme un processus avec un drapeau, mach considere un thread comme un task
> donc quand tu recuperes le total du temps tu as: task + thread creation qui est retourne donc ca fausse ton estimation car ca n'arrivera pas a chaque fois il y a tout un systeme de cache,
> 
> donc attention a comment tu envisages tes benchmarks sur OSX si tu fais exactement le meme prog de test que sous linux et le tourne sous OSX tes resultats sont faux car ils ne prennent pas en compte le mechanisme


Bonjour et merci pour ta réponse.
Pour tester les performances globales d'un raytracer, il n'y a pas 50 façons de faire des benchs : on mesure le temps de rendu d'une scène. 
Il se trouve que mon raytracer, compilé avec la même version de gcc et les mêmes options de compilation, sur le même CPU, génère avec 2 threads de rendu une scène avec 20-30% plus de temps sous OSX que sous Linux.
Je ne m'intéresse pas pour ces tests au temps de création des threads. Il s'agit de tests globaux sur des rendus prenant plusieurs minutes.
Tout cela n'est pas pénalisant pour moi et ne diminue en rien l'intérêt que je porte à Mac OS. Je veux juste avoir l'avis qu'autres développeurs sur le sujet.

Salutations,

Olivier


----------



## tatouille (10 Mars 2009)

oferrand a dit:


> Bonjour et merci pour ta réponse.
> Pour tester les performances globales d'un raytracer, il n'y a pas 50 façons de faire des benchs : on mesure le temps de rendu d'une scène.
> Il se trouve que mon raytracer, compilé avec la même version de gcc et les mêmes options de compilation, sur le même CPU, génère avec 2 threads de rendu une scène avec 20-30% plus de temps sous OSX que sous Linux.
> Je ne m'intéresse pas pour ces tests au temps de création des threads. Il s'agit de tests globaux sur des rendus prenant plusieurs minutes.
> ...



ok donc il y a des optimisations a faire pour la platforme, tu peux avoir quelque chose de plus lent, car osx pour certaines choses sera plus lent, mais pas de l'ordre de 20-30% temps reel ce qui est enorme, je n'ai pas vu ton code mais il y a certainement quelques trucs a faire, car pour l'instant je fais pas mal d'openGL et j'ai du changer des trucs pour linux pour avoir un resultat approchant, donc tu vois ce n'est pas redibitoire


----------

