Intels compilere leverer handicappet kode til AMD- og VIA-CPU'er
Intels compilere er kendt for at være i stand til at lave noget af den hurtigste programkode. Men det kan afhænge kraftigt af, om koden skal køre på en processor fra Intel eller én af chipgigantens konkurrenter.
Intels compilere sørger nemlig for, at et program kun udnytter de nyeste instruktionssæt på Intels egne processorer, mens konkurrenterne AMD og Vias bliver sidestillet med ældre Intel-processorer.
»Intel behandler "med vilje" andre mikroprocessorer på en måde, som nedsætter effektiviteten,« siger Agner Fog, som forsker i processorer og compilere og underviser i datalogi på Ingeniørhøjskolen i Ballerup.
Han og flere andre har tidligere rapporteret problemet som en fejl til Intel, men uden at få svar fra chipgiganten.
Problemet ligger i, at Intels compiler laver to versioner af programkoden. Den ene er optimeret til at udnytte de nyeste instruktionssæt i nye processorer, mens den anden er beregnet til processorer, som ikke understøtter de nye instruktionssæt.
»I og for sig er det ganske legitimt, men koden tjekker også for, om processoren er fra Intel. Hvis den ikke er en Intel-processor, så vælger den versionen til ældre processorer,« forklarer Agner Fog.
Dermed vil et program køre forskelligt på en AMD-processor, selvom processorer understøtter de samme instruktionssæt som den tilsvarende Intel-processor. Det gælder blandt andet instruktionssæt som SSE2 og SSE3.
Det betyder, at eksempelvis benchmarks, som er lavet med Intels compiler, risikerer at give AMD og Vias processorer et dårligere resultat, end processorerne reelt ville være i stand til at levere, hvis instruktionssættene blev udnyttet.
»Hvis Intel havde sagt direkte, at dets compilere kun var til Intel-processorer, så havde det ikke været et problem. Men der er mange, som bruger Intels compilere uden at vide, at compileren putter noget ind i koden, som får den til at køre langsommere på AMD og Via,« siger Agner Fog.
Problemet har ganske vist været diskuteret blandt forskere, som arbejder med compilere, men hverken AMD eller Intel har villet kommentere sagen på grund af den retssag, som de to firmaer indgik forlig om i november 2009.
Af forliget fremgår det, at Intel lover ikke at sætte kunstige begrænsninger over for AMD. Men forliget har ikke været nok til at tilfredsstille de amerikanske myndigheder, som efter forliget har valgt at rejse en ny sag mod Intel.
Intel er tidligere blevet dømt af EU til at betale en bøde på syv milliarder kroner for at have misbrugt dets markedsposition til at holde konkurrenterne ude.
Forligsteksten mellem Intel og AMD indeholder blandt andet en formulering, som skelner mellem, om Intel skader AMD ved en bevidst handling eller ved ikke at handle.
»Det springende punkt er, hvorfor Intels compiler ikke udnytter de nye instruktioner på AMD's processorer. Hvis det er for at få AMD's processorer til at virke inferiøre, er det klart ulovligt, men hvis Intel kan argumentere for, at de ikke har undersøgt, hvilken kode der virker bedst på AMD's processorer, og derfor har valgt arbitrært, så er det ikke. Det vil dog være en noget tynd undskyldning, da det er ret oplagt, at det er bedre at udnytte de nye instruktioner stort set uanset, hvordan de er implementeret,« siger lektor i datalogi Torben Mogensen fra Datalogisk Institut ved Københavns Universitet.
Agner Fog har på sin blog beskrevet, hvordan man kan tilpasse sin programkode, så man kan få den færdige kode til at bruge de nye instruktionssæt på AMD og Vias processorer, selvom koden oversættes med Intels compiler.
Der findes flere alternativer til Intels compilere, men især til Windows findes der ifølge Agner Fog ingen af de nuværende compilere, der fremstiller lige så hurtig kode som Intels.
Kommentarer (5)
Før har det før været lidt uklart hvordan Intel kunne 'snyde rigtigt' (især hvis der var brug af samme instruktioner), men det er så ikke tilfældet
(så situationen er egentligt også som jeg forventede, da det ikke kunne gå op på andre måder ... )
Desværre ses det ofte at store firmaer bruger deres størrelse til at konkurrere med markedforvridende metoder. Det er ikke spor sundt for konkurrencen. Intel er vidst langt fra de eneste ...
Blogen lader i øvrigt til at være god.
Der må være belæg for en bøde til i millardklassen. At kategorisere en CPU som "gammel" baseret udelukkende på producenten må siges at være en aktiv underminering af konkurrenterne. På den anden side kan man vel sige, at når det er Intel, der laver compileren så er det vel heller ikke et krav, at de kun er optimeret til egne CPU'er. Det bør bare fremgå klart og tydeligt :-)
"er Intel, der laver compileren så er det vel heller ikke et krav, at de kun er optimeret til egne CPU'er. Det bør bare fremgå klart og tydeligt :-)"
Nu er der jo forskel på at undlade at optimere og så direkte at forhindre support af den teknologi der allerede er implementeret i hardwaren.
Som flere er inde på (via Agners blog og deraf links), så kører den Intel-optimerede kode problemfrit på en AMD-CPU, hvis man hacker programmet til at tro at der er tale om en Intel-CPU. Intel bruger bevidst tid og penge på at få AMD's CPU'er til at se markant dårligere ud end Intels. Intel bruger netop resultaterne af deres C-compiler i bla. marketingssammenhæng.
Tja. Når man tilføjer nye instruktioner er det vel typisk fordi man mener, at de kan løse nogle opgaver signifikant hurtigere ...
Som jeg skrev før var bloggen faktisk god. Ved at læse lidt på blogen og følge links er der et eksempel hvor noget kunne laves ca. 4x hurtigere ...
http://yro.slashdot.org/comments.pl?sid=155593&cid=13042922
Og et eksemel fra den virkelige verden (med ikke helt så stor forskel...)
http://arstechnica.com/hardware/reviews/2008/07/atom-nano-review.ars/6

