Permalänk
Medlem

Lära sig Assembly?

Ja, är trött på att fråga folk och hjälp såfort jag vill göra något i assembly, så har letat efter nån nice tutorial till kompilatorn NASM, hittar inget dock (som är "enkelt").

Visa signatur

C#/MonoGame Fanatiker.
Pixel Artist & Game Developer

Permalänk

Varför?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av hagbarddenstore
Varför?

Varför inte? Är bra att kunna, speciellt om man skriver prestandakrävande saker som kräver lågnivåoptimering med t.ex. SSE.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem

PC Assembly Language? Har bara hunnit med att läsa början, men den är relativt lång/djupgående för en gratis bok antar jag.

Sedan om den är bra eller dålig kan jag tyvärr inte uttala mig om eftersom att jag inte har läst någon annan bok om Assembly, har som sagt inte ens läst klart denna.

Permalänk
Medlem
Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Medlem

Tack för svar!
Hade inte läst någon av dom förrut, så nu har man något att läsa iaf ^^

Visa signatur

C#/MonoGame Fanatiker.
Pixel Artist & Game Developer

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av MagnusL
Varför inte? Är bra att kunna, speciellt om man skriver prestandakrävande saker som kräver lågnivåoptimering med t.ex. SSE.

Helt klart är det mycket bra och kunna assembler men att programmera i det bör man nog undvika. Och det är dessutom svårt och slå en kompilator och göra effektiv kod om man jämför med något annat kompilerande språk med bra kompilator.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av gosh
Helt klart är det mycket bra och kunna assembler men att programmera i det bör man nog undvika. Och det är dessutom svårt och slå en kompilator och göra effektiv kod om man jämför med något annat kompilerande språk med bra kompilator.

En kompilator slår de flesta programmerare när det kommer till vanlig kod. Men inte när man t.ex. använder SIMD instruktioner. En modern kompilator kan omöjligt parallellisera kod på samma sätt som en programmerare kan.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk

Vissa delar av processorn är inte tillgängliga från annat än assembler heller, tex när man håller på med interrupts och så.

Permalänk
Avstängd

Det är skillnad och skriva några enstaka instruktioner i assembler jämfört med och skriva hela program eller varför inte säga mindre moduler.

Bra länkar:
http://www.drpaulcarter.com/pcasm/
http://www.freeprogrammingresources.com/assembly.html

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av MagnusL
En kompilator slår de flesta programmerare när det kommer till vanlig kod. Men inte när man t.ex. använder SIMD instruktioner. En modern kompilator kan omöjligt parallellisera kod på samma sätt som en programmerare kan.

Visst, en kompetent programmerare kan slå en kompilator. Men generellt är det så att kompilatorer är tämligen bra nu för tiden och man ska inte tro att man automatiskt kan skriva bättre kod än kompilatorn bara för att man lärt sig grunderna för SSE el. dyl.

Orkar inte leta upp den just nu, men läste en diskussion på gamedev.net för nån månad sen om just det här. Nån kille hade just upptäckt SSE och då direkt skrivit ett vektorbibliotek som han stolt postade på forumet. Mer erfarna programmerare visade ganska snabbt att de kunde skriva snabbare versioner utan inline-assembler (sen kan en erfaren kodare säkert skriva en ännu snabbare version med assembler).

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Tzu
Visst, en kompetent programmerare kan slå en kompilator. Men generellt är det så att kompilatorer är tämligen bra nu för tiden och man ska inte tro att man automatiskt kan skriva bättre kod än kompilatorn bara för att man lärt sig grunderna för SSE el. dyl.

Orkar inte leta upp den just nu, men läste en diskussion på gamedev.net för nån månad sen om just det här. Nån kille hade just upptäckt SSE och då direkt skrivit ett vektorbibliotek som han stolt postade på forumet. Mer erfarna programmerare visade ganska snabbt att de kunde skriva snabbare versioner utan inline-assembler (sen kan en erfaren kodare säkert skriva en ännu snabbare version med assembler).

En kompilator är oftast bättre på små problem. När det kommer till specifika tillämpningar där man har möjlighet att parallellisera koden så slår man lätt kompilatorn. En kompilator kanske genererar bra kod för vanliga vektor operationer, men när man kommer till tillämpningar där man t.ex. kan arbeta på fyra vektorer samtidigt så slår man lätt kompilatorn. Kompilatorn kan inte parallellisera koden på samma sätt som en människa.

Känner till tråden som du menar, tror att det var min bror som skrev den snabbaste implementationen i den tråden. Det handlade ju som sagt om vanliga operationer. Hade man gjort samma jämförelse på en större parallelliserbar uppgift så hade SIMD versionen utklassat de andra.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av MagnusL
Kompilatorn kan inte parallellisera koden på samma sätt som en människa.

Är du säker på det?

Det var ett tag sedan jag läste om microsofts kompilator och hur den kunde optimera kod, inte uppdaterad på hur det är nu man gissar på att det blir bättre och bättre. Då jag läste om den blev jag grymt imponerad över hur de lyckas hantera koden. Flytta variabler mm för att inte onödiga operationer skall göras i lopar o.s.v.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av gosh
Är du säker på det?

Det var ett tag sedan jag läste om microsofts kompilator och hur den kunde optimera kod, inte uppdaterad på hur det är nu man gissar på att det blir bättre och bättre. Då jag läste om den blev jag grymt imponerad över hur de lyckas hantera koden. Flytta variabler mm för att inte onödiga operationer skall göras i lopar o.s.v.

Ja, är säker på det. Kräver ju att man skriver om algoritmerna, specialanpassar datastrukturerna m.m. Kompilatorn har helt enkel inte den problemspecifika kunskapen som krävs för att lösa problemet.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av MagnusL
Ja, är säker på det. Kräver ju att man skriver om algoritmerna, specialanpassar datastrukturerna m.m. Kompilatorn har helt enkel inte den problemspecifika kunskapen som krävs för att lösa problemet.

Läs här
http://www.linuxjournal.com/article/4885

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av gosh
Läs här
http://www.linuxjournal.com/article/4885

Vad ska jag läsa där?
Att kompilatorer använder SIMD vid enkla saker känner jag till, men snackar om mer avancerade uppgifter och inte enkla additioner av en array. Och att trådparallisera med OpenMP tjänar man bara på om man har flera processorer/kärnor. Och man tjänar mer om man paralliserar koden på varje kärna och kör med OpenMP. (Vilket jag förövrigt gör i ett av mina nuvarande projekt).

En modern processor kan inte se helheten på samma sätt som en programmerare kan. Möjligen kan man hjälpa kompilatorn genom att förparallisera koden i C/C++ .. men då måste man ju som sagt veta hur parallisering fungerar på arkitekturen, och då kan man ju lika bra skriva allt i assembler och ha total kontroll på vart alla cyklar går.

Finns som sagt en anledning till varför man kör med assembler när man vill ha ut all möjlig prestanda. Hade en kompilator genererat lika bra eller bättre kod så hade det inte varit lönt att skriva en rad assembler kod.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av MagnusL
Vad ska jag läsa där?
Att kompilatorer använder SIMD vid enkla saker känner jag till, men snackar om mer avancerade uppgifter och inte enkla additioner av en array. Och att trådparallisera med OpenMP tjänar man bara på om man har flera processorer/kärnor. Och man tjänar mer om man paralliserar koden på varje kärna och kör med OpenMP. (Vilket jag förövrigt gör i ett av mina nuvarande projekt).

Observera att den artikeln är skriven 2003 och gäller intels itanium. Den processorn var så speciell och de satsade hårt på att utveckla en kompilator som kunde fixa koden så den utnyttjade processorns möjligheter. Har för mig att intels kompilator används i linux rätt ordentligt idag, den skall också vara otroligt bra.

Avancerade uppgifter består oftast om massor av deluppgifter, processorn tar och optimerar alla små delar så det blir nog rätt optimerat ändå.

Vad är det för typ av uppgift som du inte tror en kompilator klarar av?

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av gosh
Vad är det för typ av uppgift som du inte tror en kompilator klarar av?

Finns några bra exempel i denna uppsats:

"Realtime Ray Tracing and Interactive Global Illumination"
http://www.mpi-inf.mpg.de/~wald/PhD/wald_phd.pdf

Är bara att jämföra optimerade C versionerna och optimerade SSE versionerna.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av MagnusL
Finns några bra exempel i denna uppsats:

"Realtime Ray Tracing and Interactive Global Illumination"
http://www.mpi-inf.mpg.de/~wald/PhD/wald_phd.pdf

Är bara att jämföra optimerade C versionerna och optimerade SSE versionerna.

den texten var skriven 2004 och förmodligen baseras texten på arbete gjort tidigare än 2004. Efter några snabba sökningar så skrev de att kompilatorer gjorde ett hyffsat bra jobb men att det gick och optimera mera. Undrar hur de nyaste kompilatorerna presterar?

En annan sak: Om man sitter och assembler kodar för någon processor så kommer det nya processorer med bättre instruktioner, lite jobbigt och koda om istället för att låta kompilatorn kompilera om för andra processorer.

Även att medan den som kodar assembler hunnit göra en enda funktion så kanske C++'aren hunnit med 20, med färre buggar och har betydligt lättare för att visa andra och låta dem ta över koden.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av gosh
den texten var skriven 2004 och förmodligen baseras texten på arbete gjort tidigare än 2004. Efter några snabba sökningar så skrev de att kompilatorer gjorde ett hyffsat bra jobb men att det gick och optimera mera. Undrar hur de nyaste kompilatorerna presterar?

En annan sak: Om man sitter och assembler kodar för någon processor så kommer det nya processorer med bättre instruktioner, lite jobbigt och koda om istället för att låta kompilatorn kompilera om för andra processorer.

Även att medan den som kodar assembler hunnit göra en enda funktion så kanske C++'aren hunnit med 20, med färre buggar och har betydligt lättare för att visa andra och låta dem ta över koden.

Så mycket bättre har inte moderna kompilatorer blivit. Optimeringsproblem är extremt svåra helt enkelt, speciellt för en kompilator med minimal bakgrundsinformation om problemet som ska lösas.

Varför byter du ämne helt plötsligt? Ja, assembler koden blir svårare att läsa och debugga, men i vissa fall så måste man använda det för att uppnå sina mål.

Med dina argument så skulle man ju lika bra kunna använda C# och skita i C++.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av MagnusL
Finns några bra exempel i denna uppsats:

"Realtime Ray Tracing and Interactive Global Illumination"
http://www.mpi-inf.mpg.de/~wald/PhD/wald_phd.pdf

Är bara att jämföra optimerade C versionerna och optimerade SSE versionerna.

Uppsatsen nämner en sak nämner en sak som inte tagits upp i tråden här, intrinsics. Dvs. makron för att explicit säga att man vill ha det paralleliserat (istället för att lita på kompilatorns kodanalys för att hitta paralleliserbar kod). Detta är ju ett mycket bra alternativ i de flesta fall, dels får man mer lättläst kod (slipper ren assembler), dels ger man kompilatorn bättre förutsättningar för övriga optimeringar. Skriver man ren assembler finns det ju inte mycket kompilatorn kan göra.

Man kan ju diskutera fram och tillbaka när och hur ofta handgjorda optimeringar slår kompilatorns, men den viktigaste slutsatsen är nog ändå: Lär dig om assembler och datorarkitektur i allmänhet, annars har du ingen chans att ens veta när optimeringar är möjliga. Hur mycket ren assembler du sen verkligen skriver i dina program är kanske mindre väsentligt.

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av MagnusL
Med dina argument så skulle man ju lika bra kunna använda C# och skita i C++.

Nej absolut inte!

C++ är en mycket bra mix av att skapa program och utnyttja processorns och datorns möjligheter maximalt. Lär man sig hur kompilatorer jobbar så går det även att skriva koden (i C++) så de har lättare att optimera den.

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Avstängd

När det gäller paralleliserad kod, så kan ingen kompilator slå en människa. Faktum att t.om. en människa har stora problem att skriva parallell kod. Hur ska då en kompilator klara av biffen? Hur många spel använder dubbla kärnor fullt ut? Parallell kod ÄR svårt. Den som gör en kompilator som paralleliserar kod, blir världsberömd och antagligen jätterik. Det är ämne för intensiv forskning sedan årtionden tillbaka och ingen har lyckats komma på ett bra sätt. Tänk att stoppa in DOOM 3 källkod och ut få paralleliserad källkod. Helt sjukt om en vanlig kompilator grejade det.

En del grejer går inte att parallelisera alls. Och en del går bra. De som går bra, tillhör komplexitetsklassen NC (efter Nick's Class) och de som inte går bra, tillhör klassen P. (Sen kan ju förstås det finnas större klasser än så).

Permalänk
Medlem

Nu kanske jag inte ska yttra mig, men borde inte en människa kunna anpassa saker likabra eller bättre än en kompilator, då en människa har skapat kompilatorn från början, dvs dom som har gjort kompilatorn vet ju hur det funkar, vilket leder till att dom borde kunna göra exakt samma saker, snabbare t.o.m? (Beroeende på språk).

Kanske har fel?
Ge länk till nåt som visar motsatsen såfall

EDIT:
Varför? var det nån som frågade, tänkte att jag kunde svara på anledningen varför jag vill lära mig.
Har stort intresse för OSDev (Operating System Developement).

Har gjort lite mindre saker och kollat runt lite, lånat lite kod av andra för att få vissa saker att funka, men har kommit till stadiet då det tar stopp.
Dvs, det räcker inte att sitta och ta kod från ena hållet och från det andra. Måste kunna göra eget nångång, inte sitta och se dum ut och vara lat

Visa signatur

C#/MonoGame Fanatiker.
Pixel Artist & Game Developer

Permalänk
Medlem

Om du nu är sugen på att lär dig lite hårdvarunära programmering för Intel x86 så ta dig en titt på böckerna här: http://www.intel.com/design/pentiumii/manuals/243190.htm

Har volumes 1-3 och optimeringsmanualen stående i min bokhylla. Bra informationskällor.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av snutte
Om du nu är sugen på att lär dig lite hårdvarunära programmering för Intel x86 så ta dig en titt på böckerna här: http://www.intel.com/design/pentiumii/manuals/243190.htm

Har volumes 1-3 och optimeringsmanualen stående i min bokhylla. Bra informationskällor.

har dom 3 på datorn ^^
men tack ändå

Visa signatur

C#/MonoGame Fanatiker.
Pixel Artist & Game Developer

Permalänk
Citat:

Ursprungligen inskrivet av snutte
Om du nu är sugen på att lär dig lite hårdvarunära programmering för Intel x86 så ta dig en titt på böckerna här: http://www.intel.com/design/pentiumii/manuals/243190.htm

Har volumes 1-3 och optimeringsmanualen stående i min bokhylla. Bra informationskällor.

Hur får man enklast tag på dem som riktiga exemplar?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av TheGoodOne
Hur får man enklast tag på dem som riktiga exemplar?

Kan beställa tryckta exemplar av Intel. Ingen aning om vad det kostar.

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av AJL
Nu kanske jag inte ska yttra mig, men borde inte en människa kunna anpassa saker likabra eller bättre än en kompilator, då en människa har skapat kompilatorn från början, dvs dom som har gjort kompilatorn vet ju hur det funkar, vilket leder till att dom borde kunna göra exakt samma saker, snabbare t.o.m? (Beroeende på språk).

Det är inget bra argument. Jag kan skriva ett schackprogram som slår mig lätt, men det var ändå jag som skapade det. Om man tänker som du: "men jag skapade schackprogrammet, alltså måste skaparen kunna vinna?". Jag kan skriva en miniräknare som räknar snabbare än jag, men borde itne skaparen vara bättre än sin skapelse?

Nej.

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av AJL
Nu kanske jag inte ska yttra mig, men borde inte en människa kunna anpassa saker likabra eller bättre än en kompilator, då en människa har skapat kompilatorn från början, dvs dom som har gjort kompilatorn vet ju hur det funkar, vilket leder till att dom borde kunna göra exakt samma saker, snabbare t.o.m? (Beroeende på språk).

Kanske har fel?
Ge länk till nåt som visar motsatsen såfall

Här kan du läsa om en skapelse som är mycket mer kompetent en en människa inom de områden den byggdes för.