mboost-dp1

Advanced Micro Devices, Inc.

Microsoft og Intel investerer i udvikling af software til multikerneprocessorer

- Via InformationWeek - , redigeret af The-Lone-Gunman

Det er efterhånden længe siden, at den første dual-kerne-processor kom på markedet. I dag er vi oppe på 4 kerner, og inden længe er tallet steget til både 6 og 8 kerner. Udviklingen gør, at processorkraften i computere stiger og stiger, men det er alt sammen ligegyldigt, hvis softwaren ikke kan udnytte det.

Udviklingen af software, der kan udnytte flere kerner, har haltet efter hardwaren, men det vil Microsoft og Intel nu gøre noget ved. De har i den forbindelse valgt at investere $20 millioner, lige knap 95 millioner kroner, over de næste 5 år i afdelingerne for softwareudvikling på universiteterne i Californien og Illinois.

Universiteterne, der håber selv at kunne bidrage med yderligere $15 millioner, vil med investeringen kunne fokusere på at udvikle software, der bedre kan udnytte multikerne-processorer.





Gå til bund
Gravatar #1 - Staeren
19. mar. 2008 13:06
Det er bare surt at så mange programmer er takseret efter hvor mange kerne en licens er tilladt at bruge.

Et meget godt eksempel er det program, RealFlow, som vi på mit arbejde bruger til at udvikle simulationer:

Full license for 2 CPU 2.000 €
Full license for 4 CPU 2.500 €
Full license for 8 CPU 3.300 €
Full license for 16 CPU 4.800 €

For hvad? Det er det samme program der kører, eneste forskel er bare hvor vidt man kan udnytte 2,4,8 eller 16 kerner... Suk...
Gravatar #2 - lorric
19. mar. 2008 13:25
#1
En CPU er ikke det samme som en kerne.
Eller, det er jo et definitions spørgsmål for den enkelte applikations licensebetingelser. Men vær nu helt sikker på om du taler om CPU'er eller kerner.
Gravatar #3 - Mads
19. mar. 2008 13:34
Det kunne nu være fedt hvis CPU'en selv kunne uddelegere arbejdet mellem kernerne...
Gravatar #4 - arne_v
19. mar. 2008 13:39
#2

CPU er blevet et lidt uklart begreb. Det er mere tydeligt hvis man spørger om det er "per core" eller "per socket".
Gravatar #5 - webwarp
19. mar. 2008 13:41
100 mio over 5 år.. Øhm 1, det er jo ingen penge, 2) 5 år.. Så længe kan vi da ikke vente! ..

Godt de endelig er vågnet op, men tag nu lige arbejdstøjet på tak!
Gravatar #6 - arne_v
19. mar. 2008 13:50
#5

re 1) Det er jo ikke den eneste indsats på området. Det er et ydeligere initiativ.

re 2) Vente på hvad ? Man kan da sagtens udnytte flere kerner idag. Men man vil gerne gøre det nemmere og billigere.
Gravatar #7 - GurliGebis
19. mar. 2008 13:59
Det ser da allerede interessant ud fra en udviklers synspunkt, med deres parallel fx library til .NET .

Det gør det noget lettere at lave programmer som udnytter flere kerner/processorer.
Gravatar #8 - webwarp
19. mar. 2008 15:16
#6 hvorfor vente 5 år med at gøre det nemmere.. De har da haft så lang tid til at komme igang.. Og hvorfor går de ikke sammen med AMD, som varslede denne nyhed for et godt stykke tid siden, med at de ville gøre det nemmere for udviklerne at udnytte flere kerner..
Gravatar #9 - arne_v
19. mar. 2008 15:50
#8

Der er ikke nogen som venter 5 år. Der har været forsket i emnet ihvertfald siden 80'erne. Både kommercielt og på universiteterne. Nu har 2 specifikke firmaer MS og Intel så indgået en aftale om at sponsorere noget forskning på 2 specifikke universiteter de næste 5 år. De vil så forhåbentligt levere nogle gode ideer der kan bruges af firmaerne om 5-10 år. De ting som der kommer på gaden idag blev startet som forskning for 5-10 år siden.
Gravatar #10 - GOOOD
19. mar. 2008 15:50
Ja så er det slet ikke så dumt at have skrevet bachelor i flertrådede geometriske algoritmer ;)
Gravatar #11 - TullejR
19. mar. 2008 16:14
Jeg er ret sikker på, at der er nogle der undervurderer kompleksiteten af dette ret voldsomt.. Så lad nu være med at være så negative.
Gravatar #12 - Törleif Val Viking
19. mar. 2008 19:53
Nogen der er har nogle kvalificerede bud på hvad der bla. er problemerne?

Mit gæt (ukvalificeret)
Uddelegering af opgaver (via AI)
Adgang til data uden at forstyrre hinanden samt
intern kommunikation til videre bearbejdning.
Gravatar #13 - arne_v
19. mar. 2008 20:01
#12

Nu er jeg langt fra ekspert i parallelisering.

Men de to grundliggende problem stillinger må være:

1) Programmøren skriver multi threaded kode.

Kunsten er her at lave programmerings sprog, compilere og
libraries som gør det nemt at lave massivt multithreaded apps
uden fejl.

2) Automatisk kørsel af singlethreaded kode i multiple threads.

Compiler (AOT eller JIT) eller hardware som automatisk
analyserer koden og paralleliserer den. Dette er absolut ikke
nemt for helt generel kode.
Gravatar #14 - Saxov
19. mar. 2008 20:35
#13,
Multitrådet programmer kan du ikek nødvendigvis splitte ud over flere kerner, det kræver multi-process programmer.

En program kan bestå af en eller flere processer, og hver proces af en eller flere tråde.
Det der er vigtigt her, er at flere tråde i en process kan arbejde direkte med de samme variabler, og derfor skal have samme forståelse af hvilken værdi de givne variabler har. Mellem processer deles der ikke på samme måde adgang til variabler.

Problemet med at splitte en process op på flere kerner, er at de så skal sikre at alle tilgange til variabler sker under en mutex lock, så en cpu ikke tror der ligger værdi 'A' i variablen mens cpu 2 har skrevet 'B' i samme variable.
Man har ikke samme problem mellem multible processer, da kommunikationen imellem dem er mere i stil med netværks kommunikation.

Så arbejder man med flere kerner, skal man have en måde at skille et program af, så det kan spredes ud, eller man skal have en måde at få kernerne til at arbejde på de samme registorer og cashe.
Gravatar #15 - arne_v
19. mar. 2008 20:42
#14

Jo - multithreaded programmer kan bruge flere kerner. Forudsat at det er kernel threads - som alle nyere styre systemer understøtter.

Processer kan principielt også dele memory (shared memory eller global memory) og har så samme synkroniserings problemer som threads, men det er dog sjældent at det bruges.
Gravatar #16 - Saxov
19. mar. 2008 21:07
#15, fair nok... så sov jeg vist lidt for meget da vi havde forelæsninger om parallel programmering for nogle år siden...
Gravatar #17 - Saxov
19. mar. 2008 21:17
nåh, kiggede lige på wiki da det var hurtigere end at finde noget brugbart i min gamle bøger..

Det ser ud til at dine kernel threads, "bare" er seperate processor, og det er derfor de kan splittes ud. De er godt nok ikke fulde processer, men en light-weight process, og ud fra hvad jeg lige kan læse mig til, så skal et program designes til at bruge kernel threads/LW-processes.
Gravatar #18 - arne_v
19. mar. 2008 23:22
#17

Som det også fremgår af artiklen er der væsentligt forskel på processer og threads. Processer har forskellig addresse space - threads har samme address space.

En applikation skal designes til at anvende threads. Om det er kernel eller user threads bør være usynligt for applikationen. Faktisk skal man tænke sig mere om hvis man bruger user threads, fordi en blocking operation kan blocke alle tråde.
Gravatar #19 - sKIDROw
19. mar. 2008 23:29
#2

OS og software kan ikke kende forskel, på flere CPU'er eller en CPU med flere kerner. Så selv hvis de skelnede i licensen, blev det jævnt svært for dem at håndhæve teknisk.
Gravatar #20 - arne_v
19. mar. 2008 23:45
#19

Det er muligt at detecte antal sockets, antal cores og antal logical processors fra software.

For dem der har Win Vista eller Win 2008 er det WMI Win32_Processor NumberOfCores og NumberOfLogicalProcessors.

Jeg har ikke den fjerneste anelse om de bruger den info til noget.

I nogle tilfælde kunne det give god mening, hvis diverse Lx cache ikke er delt mellem alle logical processors.

Så OS kan have grund til at udnytte den information.

Jeg har ikke fantasi til at forestille mig at en normal applikation skulle kunne bruge informationen til noget.
Gravatar #21 - arne_v
19. mar. 2008 23:54
#20

Og er man til Linux kan informationen findes i /proc/cpuinfo.
Gravatar #22 - proximity
20. mar. 2008 20:39
#3 din måde at sige det på er øhh lidt !?!?!. men ja jeg har gået og tænkt det samme...

hvad nu hvis de lavede en chip på bundkortet der kunne mærke instruktioner og sende dem til div. kerner for derefter at samle det hele igen når det kommer ud af kernerne igen...

har faktisk ingen forstand på hvad jeg snakker om så ret mig endelig.

men er det ikke en ide at fjerne det med at have et program til at køre på flere kerner fra software siden helt.
Gravatar #23 - sKIDROw
21. mar. 2008 04:23
#20-21

I stand corrected.

Så kan jeg lære at læse *alle* detaljerne i /proc/cpuinfo :P

$ cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 75
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 3800+
stepping : 2
cpu MHz : 1000.000
cache size : 512 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2

fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
bogomips : 3621.50
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp tm stc

processor : 1
vendor_id : AuthenticAMD
cpu family : 15
model : 75
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 3800+
stepping : 2
cpu MHz : 1000.000
cache size : 512 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2

fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
bogomips : 3621.50
TLB size : 1024 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp tm stc
Gravatar #24 - arne_v
21. mar. 2008 13:57
#23

Det kræver vistnok en nyere kernel. Men det er der.

PS: Der er iøvrigt en lille fejl i enten koden eller CPU'en - en Athlon 64 X2 har ikke HyperThreading.
Gravatar #25 - Whoever
24. mar. 2008 19:05
Nogle af de største problemer er/var:

Adgang til hukommelsen. Hvis du har en værdi i den ene CPU's cache som ændres, så kan det være dette skal reflekteres og synkroniseres med de andre CPU'er. Det skaber ret meget synkronisering mellem CPU cacherne. Man kan selvfølgelig skrive direkte ned i hukommelsen, men det er ret langsomt i forhold til cache skrivninger.

Et andet problem er at ret få programmeringsprog IKKE understøtter rigtig multithreading. Java gør det fra version 1.5 (de lavede en matematisk baseret memory model), .NET mener jeg gør det fra version 2.0. C++ standarden kender IKKE til begrebet tråde. Derfor kan en standard compliant compiler uden videre optimere read og write operationer i din kode med det resultat af dine locks osv bliver ignoreret. Husk at win32 tråde eller posix tråde blot er libraries. De har intet med C++ sproget at gøre. En "løsning" er at man enten slår optimering fra (hvilket man nok ikke har lyst til) eller at man skriver noget assembler snask (hvilket man nok heller ikke har lyst til).
Og selvf. hvis man bruger en compiler der er skrevet specifikt til et dual-cpu system (som f.eks. Microsofts VC++ Itanium compiler) så har man ikke de problemer. Det er netop årsagen til at en Visual Studio VC installation fordobles hvis man tilvælger Itanium compileren...det er nemlig en helt ny, selvstændig compiler.
Gravatar #26 - Xill
25. mar. 2008 07:49
#25 ikke at jeg har så meget styr på C++, men er mange af de problemmer ikke noget som bliver løst med C++0x ?
Gravatar #27 - arne_v
31. mar. 2008 17:54
#25

Java har haft fuld multi threading support siden version 1.0.

Med en memory model. Men de ændrede memory modellen i 1.5 for at slippe af med nogle uhensigtsmæssigheder.

.NET har også en memory model og har altid haft det. .NET's memory model lider lidt under at .NET verdenen er meget x86 fokuseret. Der er eksempler på kode som ikke overholde .NET memory modellen men overholder x86 memory modellen.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login