Citat:
Ursprungligen inskrivet av klk
Weedblie: Det är mycket svårt och fatta vad du menar, tvivlar på att du själv riktigt vet vad du menar. Personligen så uppfattar jag dig som en teoretiker, du vet en sådan där som läser massa saker, tror han fattar men begriper inte riktigt hur allt man läst fungerar i praktiken. Då blir det ofta väldigt snygga utläggningar med vackra ord men det är ingen som fattar vad personen menar och det låter ofta väldigt komplicerat.
Eller så är det just för att diskussionen har rört sig in i områden som få vettiga personer någonsin ens har sett en skymt av.
Citat:
Ursprungligen inskrivet av klk
Alltså själva bytet. Inte intelligensen bakom för det innefattar så mycket mer samt att jag har svårt och förstå hur de mäter den tiden?
Och själva bytet i sig är dyrt. Intelligensen runt omkring kostar självklart cykler också men det absolut minsta som krävs för ett trådbyte, d.v.s. "interrupt + hopp till kernel-läge + (mappa om minne) + spara register + ladda register + hopp tillbaka till user-läge" är relativt dyrt.
För att mäta tiden det tar för ett trådbyte finns det två vanliga metoder (som inte involverar ändringar i kernel koden):
1. Ha en loop som hela tiden läser av en hög-precisions klocka (RDTSC t.ex.) i båda trådarna. Efter ett antal sekunder (och många trådbyten), dumpa tiderna till disk och jämför/räkna.
2. Ha en loop som hela tiden självmant avslutar sin egen tidskvanta och räknar hur många gånger per sekund som trådbytet skedde. Tiden då en tråd verkligen "körs" är då minimal. Resten är tiden för trådbytena. (metoden de använde sig av)
Citat:
Ursprungligen inskrivet av klk
Operativsystem skiljer sig från varandra, vissa har optimerat vissa områden medan andra har andra optimeringar.
Ja, och Linux 2.6.x har historiskt sett alltid varit en av de snabbaste när det gäller trådbyten på x86 (eller rättare sagt O(1) schemläggaren - dock så har den vissa andra väldokumenterade problem).
Citat:
Ursprungligen inskrivet av klk
Samt: I vilken "tråd" tror du intelligensen körs om vilken tråd som skall vara aktiv på en kärna ;).
Faktiskt är svaret "ingen". Den körs snarare "mellan" två trådar (d.v.s. extra overheaden för trådbyte).
Därav orsaken att schemläggarens "intelligens" oftast är minimal. Något i stil med "stoppa tillbaka den förra tråden längst bak i kön med dess prioritet och plocka fram tråden som befinner sig längst fram i kön med högst prioritet".
Citat:
Ursprungligen inskrivet av klk
Jag kan allt förklara det mesta men dels så tvivlar jag på att du har förmåga och läsa samt ta till dig faktan, du är för stolt och för inne i ditt eget tänk. Det tar dessutom på tok för lång tid för mig och undervisa.
Du har nog rätt i att det skulle vara mycket tveksamt för mig att lyssna på din fakta om den inte är uppbackad av någon neutral tredje-part eftersom jag inte tycker att du är tillräckligt kunnig inom just detta ämne för att lära ut (inget illa menat, jag själv kan endast tillräckligt för att inse vad som är felaktigt och inte tillräckligt för att lära någon annan).
Citat:
Ursprungligen inskrivet av klk
Vill du se lite exempel på kod som gör trådbyten så sök på "linux" och "switch_to" exempelvis. Du bör ha kunskaper i assembler
Den biten är nödvändig men inte tillräcklig för själva bytet då det måste finnas någonting som triggar själva anropet av den (eller egentligen funktioner längre upp, men för enkelhetens skull kan man anta optimala förhållanden med båda trådarna i samma process, utan behov av om-mappningar av minne eller annat).
Minimalt så finns det ett interrupt, ett hopp till kernel-läge och ett hopp till user-läge som inte nödvändigtvis syns i själva koden just där (interruptet och hoppet in och ut är någonting som är oerhört dyrt, se t.ex. bara på hur lång tid ett anrop till något trivialt som getpid() tar). Men om vi bortser från de delarna som tar många hundra cykler och endast betraktar switch_to: har du sett vad __switch_to som anropas gör?
Speciellt flyttals-registren tar lång tid (relativt sett) att dumpa. Lite google sa åt en att man kan förvänta sig 250 - 350 cykler för endast switch_to.
Citat:
Ursprungligen inskrivet av Fire_Ice
"Arguing on the internet is like running in the Paralympics. Even if you win, you’re still retarded."
Snacka om spydiga kommentarer, det är mer en skrytkamp, vem som låter smartast. Diskutera och acceptera att den andre parten kan ha rätt.
Jag förväntade mig att någon skulle säga det. Tänkte skriva det själv tidigare men kom aldrig på den exakta frasen...
Det finns en viss skillnad med att diskutera någonting som i grund och botten är baserad på spekulationer eller eget tycke (AMD vs Intel, SSD vs HDD, etc) och en diskussion om någonting är rätt eller fel enligt både teoretiska värden och empiriska sådana.
Citat:
Ursprungligen inskrivet av ZaXx
Jag tycker det är viktigt att moderkortet har stöd för framtida processor byte så man slipper köpa ny dator. Känns som att intels x55 moderkort kommer bli låst till corei5 medans am3 kommer förbi uppgraderingsbara?
Om "uppgraderingsbarhet" för processorn är det man är ute efter så tycker jag att man bör gå med AMD. AM3 är en relativt ny plattform och AMD har (de senaste åren) haft en lång historia av att man har kunnat stoppa in en ny processor även i dem äldre moderkorten.
Moderkorten med Intels kommande P55 (hm... finns det ens planer på X55?) chipset bör kunna hänga med fram tills nästa "tock" (Sandy Bridge) vilket gör en plattform för i5/Lynnfield (eller i7/Bloomfield för den delen) uppgraderingsbar i ungefär 2 år.
MEN... det finns som sagt inga riktiga garantier på att Bulldozer skulle fungera på AM3, utan all "info" är endast mer eller mindre baserat på "past experience".