OVH Cloud OVH Cloud

[HUMEUR] Macintel...

35 réponses
Avatar
sanji
Salut

Comme beaucoup ici, je l'ai un peu mauvaise...

Ca fait des années que tous les sites techniques (non Mac) démontrent la
supériorité d'un RISC IBM à tout point de vue. Alors j'espère
sérieusement que si ça se fait, c'est qu'Intel a un truc dans les
tiroir. Qu'ils ne nous refilent pas ces saloperies de centrino...

Mais c'est vrai que l'essentiel, c'est l'OS. Et tant qu'Apple continuera
à assurer, je resterai fidèle.

Ce qui me travaille, c'est que je ne suis pas certain que la raison
avancé par Steve soit vraie (pb avec IBM et tout ça).

Si ma mémoire est bonne (n'hésitez pas à corriger), lors de la
présentation du Mac mini, il avait dit qu'ils avaient une stratégie de
reconquête du marché en 3 phases :
- 1 - Le couple iPod + iTunes sur PC, afin de montrer à ceux qui n'ont
pas de Mac à quel point Apple est cool et sexy (pour reprendre les
termes à la mode)
- 2 - Le Mac mini, afin que plus personne ne puisse parler de prix, et
qu'un utilisateur Wintel puisse switcher pour pas grand chose
- 3 - La 3ème étape, il a juste dit qu'on la découvrirait plus tard, et
qu'elle serait révolutionnaire.

Alors, avait-il l'intention de passer Intel depuis longtemps ? Auquel
cas les raisons avancées, même si elles ont un fond de vérité, ne l'ont
été que pour faire avaler la pilule aux macounets.
Pour être "pire", est-ce que ça n'aurait pas été fait en accord avec
IBM, qui finalement n'a peut-être pas l'intention de s'investir pour "si
peu" ?

A vos claviers ;-)

--
Sanji
iChat : jdseyres

5 réponses

1 2 3 4
Avatar
Grrrr
On Mon, 13 Jun 2005 00:52:06 +0200, Schmurtz wrote:

Grrrr wrote:

On Fri, 10 Jun 2005 12:09:19 +0200, Patrick Stadelmann wrote:

Même avec du bête code algorithmique, le passage de PC à Mac n'est pas
toujours évident. Compiler le soft c'est une chose, encore faut-il qu'il
fonctionne correctement, ça n'est pas immédiat.


Il n'est pas si difficile de faire du code portable et utilisable pour
toutes les architectures communes (x86, PPC, ARM, MIPS, sh, par ex).
Les problèmes se situent généralement dans le noyau et la libc.
Pour le reste, si on code pas trop crade, il suffit généralement de
recompiler.


Tu oublies deux choses :


Je n'oublie pas, je travaille sur du code portable tous les jours.
J'ai travaillé au portage de notre environnement du 486 au PowerPC 405 et
à d'autres CPU.

- les programmes évolués faisant beaucoup de traitement de signal (son
ou image) utilisent les instructions Altivec / SSE spécifiquent aux
processeurs PPC / x86. Aucun langage à ma connaissance ne propose de
système générique pour utiliser ces instructions, il est donc nécessaire
d'utiliser des extensions pour se servir des ces instructions. Et bien
sûr ses extensions sont différentes pour altivec et sse et sont non
facilement convertibles de l'un dans l'autre.


Les principes de base du SSE et de l'altivec sont les mêmes. Il est
trivial de faire une librairie fournissant toutes les fonctions de bases
en C. Au final, ça donne un fichier pour SSE, un pour Altivec, de
quelques centaines de lignes chacun: grosso modo, 4 lignes par
instruction de base + 1 commentaire. Avec 2 à 300 instructions de bases,
ça donne un fichier d'environ 1000 lignes, aisément portable en quelques
heures, y compris sur un CPU qui n'a pas d'instruction SIMD:
l'implémentation en C sera plus grosse et plus lente, mais pas plus dur
à écrire.
Tout le reste du code doit être en C et n'a pas besoin d'être porté,
juste recompilé.

- les PPC sont des processeurs big endian et les x86 sont little endian.
Ça veux dire en gros que si un programme compilé pour PPC écrit
0x12345678 dans un fichier, le même programme compilé pour x86 lisant le
fichier créer par sa version PPC lira 0x78563412. C'est trivial à
résoudre en théorie, mais dans la pratique c'est beaucoup plus compliqué
(il y a des milliers de lignes de code à modifier).


Sur du code écrit correctement, le plus dur c'est de mettre les bons
#define dans le code pour compiler dans la bonne endianness.
Ensuite, il peut y avoir des bugs, mais les problèmes d'endianness sont
des problèmes ultra connus et facilement repérables. C'est le genre de
bug qui est dans la catégorie "facile à résoudre", pour moi.
Quand, à coté, tu as des bugs hardware, des bugs dus aux effets de bords
de la compilation (genre bug d'aliasing en mémoire), un bug d'endianness
à régler, c'est un moment de détente au milieu du travail sérieux.
Bien sur, si tu as des centaines de milliers de lignes de code écrit
comme un cochon et complètement dépendant de l'endianness, tu as plus
vite fait de tout jeter et tout ré-écrire. Mais depuis le temps que ces
problèmes se posent (déjà au début des années 80 !), il faut espérer
qu'aucun programme sérieux n'est dans ce cas.



Avatar
Schmurtz
Grrrr wrote:

On Mon, 13 Jun 2005 00:52:06 +0200, Schmurtz wrote:

- les programmes évolués faisant beaucoup de traitement de signal (son
ou image) utilisent les instructions Altivec / SSE spécifiquent aux
processeurs PPC / x86. Aucun langage à ma connaissance ne propose de
système générique pour utiliser ces instructions, il est donc nécessaire
d'utiliser des extensions pour se servir des ces instructions. Et bien
sûr ses extensions sont différentes pour altivec et sse et sont non
facilement convertibles de l'un dans l'autre.


Les principes de base du SSE et de l'altivec sont les mêmes. Il est
trivial de faire une librairie fournissant toutes les fonctions de bases
en C. Au final, ça donne un fichier pour SSE, un pour Altivec, de
quelques centaines de lignes chacun: grosso modo, 4 lignes par
instruction de base + 1 commentaire. Avec 2 à 300 instructions de bases,
ça donne un fichier d'environ 1000 lignes, aisément portable en quelques
heures, y compris sur un CPU qui n'a pas d'instruction SIMD:
l'implémentation en C sera plus grosse et plus lente, mais pas plus dur
à écrire.
Tout le reste du code doit être en C et n'a pas besoin d'être porté,
juste recompilé.


Ce que tu dis est vrai, mais je pense qu'il existe des programmes
utilisant altivec dont il faudra réécrire toutes ces fonctions pour
utiliser sse à la place. Ce que tu dis est vrai, mais suppose d'avoir
conçu la chose proprement au début, ce qui n'est malheureusement pas
toujours le cas.

- les PPC sont des processeurs big endian et les x86 sont little endian.
Ça veux dire en gros que si un programme compilé pour PPC écrit
0x12345678 dans un fichier, le même programme compilé pour x86 lisant le
fichier créer par sa version PPC lira 0x78563412. C'est trivial à
résoudre en théorie, mais dans la pratique c'est beaucoup plus compliqué
(il y a des milliers de lignes de code à modifier).


Sur du code écrit correctement, le plus dur c'est de mettre les bons
#define dans le code pour compiler dans la bonne endianness.


Sur un programme de 100000 lignes ça prend du temps...

Bien sur, si tu as des centaines de milliers de lignes de code écrit
comme un cochon et complètement dépendant de l'endianness, tu as plus
vite fait de tout jeter et tout ré-écrire. Mais depuis le temps que ces
problèmes se posent (déjà au début des années 80 !), il faut espérer
qu'aucun programme sérieux n'est dans ce cas.


... et ça existe encore.

--
Schmurtz


Avatar
Saïd
Schmurtz :
Saïd wrote:

C'est que le programme est mal ecrit. Ca rentre dans la categorie du code
crade. En C++ il suffit de faire v >> file; pour ecrire proprement et
portablement. En tout cas c'est un zélote de C++ qui m'a explique ca.
Perso, je reste au C (dans l'espoir d'etre immortel->signature ;-) ).


T'an connais beaucoup des gens qui utilisent les libs standards c++ à
chaque fois qu'ils ont besoin de sérialiser des données ?



Deja des gens qui utilisent C++, j'en connais un. Alors on va dire que 100%
des programmeurs C++ que je connais font le-truc-complique-qui-me-depasse.
:)

--
Saïd.
C programmers never die - they're just cast into void.


Avatar
pdorange
Schmurtz wrote:

- les programmes évolués faisant beaucoup de traitement de signal (son
ou image) utilisent les instructions Altivec / SSE spécifiquent aux
processeurs PPC / x86. Aucun langage à ma connaissance ne propose de
système générique pour utiliser ces instructions,


Si Apple, depuis MacOS X 10.3 encourage les développeurs a utiliser un
Framework nommé "Accelerated" qui comprend des instructions pour les
vecteurs/matrices, les images et d'autres petites choses.
Ce "Accelerated Framework" est en cours de portage pour Intel et sera
pleinement opérationnel (selon le planning Apple) lors de la sortie du
premier Mac/Intel.
Dans son "Universal Binary Guideline" Apple indique que l'utilisation de
ce Framework permettra de porter le code scalaire sans rien faire.

il est donc nécessaire
d'utiliser des extensions pour se servir des ces instructions. Et bien
sûr ses extensions sont différentes pour altivec et sse et sont non
facilement convertibles de l'un dans l'autre.

- les PPC sont des processeurs big endian et les x86 sont little endian.
Ça veux dire en gros que si un programme compilé pour PPC écrit
0x12345678 dans un fichier, le même programme compilé pour x86 lisant le
fichier créer par sa version PPC lira 0x78563412. C'est trivial à
résoudre en théorie, mais dans la pratique c'est beaucoup plus compliqué
(il y a des milliers de lignes de code à modifier).


Il faut encapsuler les entrées/sortiees.

--
Pierre-Alain Dorange

Vidéo, DV et QuickTime <http://alcazar.xbecom.com/videogarage/>
Clarus, the DogCow <http://clarus.chez.tiscali.fr/>

Avatar
Grrrr
On Mon, 13 Jun 2005 01:57:45 +0200, Schmurtz wrote:

Grrrr wrote:

On Mon, 13 Jun 2005 00:52:06 +0200, Schmurtz wrote:

- les programmes évolués faisant beaucoup de traitement de signal (son
ou image) utilisent les instructions Altivec / SSE spécifiquent aux
processeurs PPC / x86. Aucun langage à ma connaissance ne propose de
système générique pour utiliser ces instructions, il est donc nécessaire
d'utiliser des extensions pour se servir des ces instructions. Et bien
sûr ses extensions sont différentes pour altivec et sse et sont non
facilement convertibles de l'un dans l'autre.


Les principes de base du SSE et de l'altivec sont les mêmes. Il est
trivial de faire une librairie fournissant toutes les fonctions de bases
en C. Au final, ça donne un fichier pour SSE, un pour Altivec, de
quelques centaines de lignes chacun: grosso modo, 4 lignes par
instruction de base + 1 commentaire. Avec 2 à 300 instructions de bases,
ça donne un fichier d'environ 1000 lignes, aisément portable en quelques
heures, y compris sur un CPU qui n'a pas d'instruction SIMD:
l'implémentation en C sera plus grosse et plus lente, mais pas plus dur
à écrire.
Tout le reste du code doit être en C et n'a pas besoin d'être porté,
juste recompilé.


Ce que tu dis est vrai, mais je pense qu'il existe des programmes
utilisant altivec dont il faudra réécrire toutes ces fonctions pour
utiliser sse à la place. Ce que tu dis est vrai, mais suppose d'avoir
conçu la chose proprement au début, ce qui n'est malheureusement pas
toujours le cas.


C'est sur qu'un programme mal fait est plus dur à maintenir.
Qu'il y ait ou non un portage à faire n'y change rien, c'est juste un cas
qui met en évidence certains problèmes.

- les PPC sont des processeurs big endian et les x86 sont little endian.
Ça veux dire en gros que si un programme compilé pour PPC écrit
0x12345678 dans un fichier, le même programme compilé pour x86 lisant le
fichier créer par sa version PPC lira 0x78563412. C'est trivial à
résoudre en théorie, mais dans la pratique c'est beaucoup plus compliqué
(il y a des milliers de lignes de code à modifier).


Sur du code écrit correctement, le plus dur c'est de mettre les bons
#define dans le code pour compiler dans la bonne endianness.


Sur un programme de 100000 lignes ça prend du temps...


Tu me donnes l'impression d'être un génie ;-).
Mais ce n'est pas le cas (malheureusement).
J'ai, en une semaine, effectué un portage d'un environnement complet sur
une architecture de test. Avec une quelques difficultés supplémentaires:
- c'est sur un prototype (y compris le CPU). Donc, on debugge le hard en
même temps que le soft.
- Ce prototype utilise des technologies que nous ne maitrisons pas encore
bien: nouveau CPU, nouveaux bus, .... D'ou des bugs hardware et des
pièges liés aux nouvelles technos que nous implémentons pour la
première fois qui nous ralentissent bien.

Malgré tout celà, en 1 semaine, j'ai un environnement complet débuggé
qui tourne sur cette nouvelle architecture. Et la partie que j'ai
débuggé (et validée) fait ~1 millions de lignes de codes (je viens de
faire le compte). Et encore, je n'ai pas compté les Makefile (alors que
l'essentiel du boulot est là). Et c'est du code "accumulé" sur 10 ans,
qui vient d'un autre OS que celui sur lequel je fais le portage, pour te
donner une idée de la propreté de celui-ci.

Donc, ma conclusion est que ce genre de portage n'est pas bien difficile,
surtout si il se fait sur du hardware validé...

[...]



1 2 3 4