Gå til innhold

Anbefalte innlegg

Jeg fikk ikke koden til Paull til å gjøre roteringa raskere på min prosessor, men benyttet meg av hans idé om å bruke en 16-bits lookup-table med følgende kode:

 

void stringRotation2(unsigned char *text, int len) {
 int align_offset = (unsigned long)text % UL_SIZE;
 int i = 0;
 if (align_offset &--#62; 0) {
for (; i &--#60; UL_SIZE - align_offset; i++) {
  int tmp = text[i];
  text[i] = lookup[tmp];
}
 }
 if (UL_SIZE == 8) {
for (; i &--#60;= len - UL_SIZE; i += UL_SIZE) {
  unsigned long *bytesPtr = (unsigned long *)&text[i];
  unsigned long oldval = *bytesPtr;
  unsigned long newval = lookups[oldval & 0xffff]; oldval &--#62;&--#62;= 16;
  newval |= (unsigned long)(lookups[oldval & 0xffff]) &--#60;&--#60; 16; oldval &--#62;&--#62;= 16;
  newval |= (unsigned long)(lookups[oldval & 0xffff]) &--#60;&--#60; 32; oldval &--#62;&--#62;= 16;
  newval |= (unsigned long)(lookups[oldval & 0xffff]) &--#60;&--#60; 48;
  *bytesPtr = newval;
}
 } else if (UL_SIZE == 4) {
for (; i &--#60;= len - UL_SIZE; i += UL_SIZE) {
  unsigned long *bytesPtr = (unsigned long *)&text[i];
  unsigned long oldval = *bytesPtr;
  unsigned long newval = lookups[oldval & 0xffff]; oldval &--#62;&--#62;= 16;
  newval |= (unsigned long)(lookups[oldval & 0xffff]) &--#60;&--#60; 16;
  *bytesPtr = newval;
}
 }
 for (; i &--#60; len; i++) {
int tmp = text[i];
text[i] = lookup[tmp];
 }
}

Denne funksjonen blir ferdig ila. 60 ms på min prosessor (lookups er 16-bit-lookup-tabellen).

 

Jeg hadde lyst til å prøve å lage en versjon av stringRotation-metoden der jeg bruker inline assembler, og fikk det til etter en del knoting (jeg kan absolutt ikke assembly, noe som sikkert kommer tydelig frem av koden nedenfor). Hadde vært artig med noen tilbakemeldinger om de groveste feilene/dumhetene.

 

static void stringRotationASM(unsigned char *text, const int len) {
 asm("\tmovq  $0,%%rbx\n"
  "\tmovq  %0,%%rdx\n"
  "1:\n"
  "\tcmp   $0,%1\n"
  "\tjz	2f\n"
  "\tmovq  (%0),%%rax\n"
  "\tmovq  %%rax,%%rbx\n"
  "\tand   $0xff,%%rbx\n"
  "\tmovb  (%2,%%rbx,1),%%al\n"
  "\trol   $8,%%rax\n"
  "\tmovq  %%rax,%%rbx\n"
  "\tand   $0xff,%%rbx\n"
  "\tmovb  (%2,%%rbx,1),%%al\n"
  "\trol   $8,%%rax\n"
  "\tmovq  %%rax,%%rbx\n"
  "\tand   $0xff,%%rbx\n"
  "\tmovb  (%2,%%rbx,1),%%al\n"
  "\trol   $8,%%rax\n"
  "\tmovq  %%rax,%%rbx\n"
  "\tand   $0xff,%%rbx\n"
  "\tmovb  (%2,%%rbx,1),%%al\n"
  "\trol   $8,%%rax\n"
  "\tmovq  %%rax,%%rbx\n"
  "\tand   $0xff,%%rbx\n"
  "\tmovb  (%2,%%rbx,1),%%al\n"
  "\trol   $8,%%rax\n"
  "\tmovq  %%rax,%%rbx\n"
  "\tand   $0xff,%%rbx\n"
  "\tmovb  (%2,%%rbx,1),%%al\n"
  "\trol   $8,%%rax\n"
  "\tmovq  %%rax,%%rbx\n"
  "\tand   $0xff,%%rbx\n"
  "\tmovb  (%2,%%rbx,1),%%al\n"
  "\trol   $8,%%rax\n"
  "\tmovq  %%rax,%%rbx\n"
  "\tand   $0xff,%%rbx\n"
  "\tmovb  (%2,%%rbx,1),%%al\n"
  "\trol   $8,%%rax\n"
  "\tmovq  %%rax,(%0)\n"
  "\tsub   $8,%1\n"
  "\tadd   $8,%0\n"
  "\tjmp   1b\n"
  "2:\n"
  "\tmovq  %%rdx,%0\n"
  :									 /* output registers */
  : "r" (text), "r" (len), "r" (lookup) /* input registers */
  : "%rax","%rbx", "%rdx"			   /* clobbered registers */);
}

 

Hastigheten er slik:

randomStrGen		   	  69.40 megabytes/s	(used 1440.88 ms)
array copy				  1.23 gigabytes/s	(used   81.39 ms)
stringRotationASM			   482.39 megabytes/s	(used  207.30 ms)
stringRotation2			 	 1.62 gigabytes/s   (used   61.75 ms)

 

Og, litt OT: Er det noe som helst logikk i hvordan mellomrom i CODE-blokker blir seende ut etter man har trykket "Lagre endringer" i redigeringsmodus? Utrolig irriterende...

Endret av jonny
Lenke til kommentar
Videoannonse
Annonse

Det er litt vanskelig å lese koden din her da det er så mange ekstra tegn innimellom og notasjonen er motsatt enn hva jeg er vant med. Men jeg kan gi deg noen tips.

 

1. Eliminer branches så ofte som mulig. branches er ekstremt kostbar for prosessoren. Fjern så mange jump instruksjoner som overhodet mulig, eventuelt erstatt de med cmov hvis det er mulig.

 

2. Pre-kalkuler konstanter som du gjenbruker flere plasser i en loop. Pre-kalkuler dem før du går inn i en loop og ha dem lagret i et register. Om du henter de inn fra minnet så vil du sannsynligvis få de fra l1 cache som tar 3 sykluser. Om du har de i et register så tar det 0.33 sykluser altså 9 ganger større throughput.

 

4. Unngå register stalling. Nå har de nyeste prosessorene register renaming men det hjelper ikke alltid. Register stalling kan gjøre at loopen kjører ekstremt mye tregere enn den kunne gjort. f.eks:

 

mov rax,10

mov rcx,rax

 

Her er et problem på register stalling. her vil rcx måtte vente til rax inneholder verdien 10 før programmet kan fortsette å kjøre. I prosessoren så er det ikke oppkoder eller mnemonics som gjelder, der er det mikrooperasjoner som gjelder. Hver instruksjon består av en eller flere mikrooperasjoner. Dvs, du kan kjøre flere instruksjoner samtidig i prosessoren i de forskjellige pipelinene. For å unngå register stalling i eksemplet over så kan du omorganisere instruksjonene slik at prosessoren kan konsumere begge instruksjonene samtidig istedet for å vente til den første er ferdig.

 

Om du gjør slik, så kan begge kjøre samtidig i prosessoren:

 

mov rax,10

mov rcx,10

 

I det første eksemplet over så må rcx vente på at rax er ferdig. Det handler om å organisere instruksjonene slik at de kan deles opp i pipelinene. Resultatet er at programmet kan konsumere instruksjonene og kjøre de raskere. Det fins to typer paralell kjøring, den ene handler om å splitte kode over flere kjerner på prosessoren, den andre typen paralell kjøring handler om å organisere instruksjonene slik at de kjøres i par i prosessoren, 2 og 2 eller 4 og 4.

Lenke til kommentar
Gjest Slettet+9871234

@LonelyMan - Meget bra post LonelyMan

 

Hva med assembly på iPhone? Er det en mulighet?

 

Hadde vært kult, ja ... :) Tviler litt, dog, da Apple trolig ikke vil slippe folk inn på for nært. Er det ikke slik at man ikke engang vet specs på den nyeste prosessoren de bruker?

 

Det kan være riktig og Apple er svært strenge, men flere og flere plattformer kan tvinge frem mer åpenhet. Du og jeg har som forbrukere sterk makt. Ikke som enkeltpersoner, men som summen av alle forbrukere. Våre penger og kjøp snakker.

 

Jeg blir liit overrasket om de ulike selskapene ikke publiserer manualer for prosessorens assembler instruksjoner. Intel gjorde alltid det den gangen jeg drev med assembly.

 

Jeg har vurdert å se litt på assembly igjen. Jeg er spesielt interessert i 64 bits assembly, men assembly på en smart telefon hadde selvsagt også vært interessant. En time i uken kan være nok til å følge med på kode og etter hvert beherske assembly for 64 bist prosessoren.

 

Er det noen som kjenner en god assemly bok / kild på Intel 64 bits prosessorer? Andre moderne prosessorer som litteratur om assembly på mobile plattformer er selvsagt også interessant.

 

Følgende Amazon bok søk: assembly

 

gir jo en god del treff på eldre literatur. Den nyeste

 

The Art of Assembly Language er fra 2010.

 

Jeg har nå tenkt litt mer på dette og om det er mulig å finne en mobil plattform hvor det følger med assembly manualer. Som økonom må man gjøre noen forutsetninger:

  1. At det er mulig.
  2. Hvis det er mulig, om det er verdt den tiden det tar å lære seg det ASM instruksjons settet og programmere i det.

Derfor skrev jeg en kort artikkel og et innlegg på WebProWorld om det. (Innleggget på WPW ser ut til å ha fått stor oppmerksomhet på grunn av mangedoblet trafikk til det subrorumet jeg postet innlegget i). Her er lenkene:

Endret av Slettet+9871234
Lenke til kommentar

Kult. De 8-9 første brettene er hentet fra snake-spillet som fulgte med MS-DOS, ser jeg :-)

 

Ser også at CPU-forbruket er redusert (kun én kjerne brukes 100% nå). Men ormen beveger seg fortsatt litt i rykk og napp (by-the-way, jukset ved å rename maps-filene, har ikke tålmodighet til å spille gjennom alle brettene).

Lenke til kommentar

Jeg jukset på samme måten da jeg laget de for å få testet de :)

Jeg har prøvd å kopiere mappene til dos-nibbles så godt som mulig, for de mappene der er jævli gode for å si det rett ut. Men jeg fant ikke alle.

 

En gang så spilte jeg gjennom alle de, men da begynte jeg å gå lavt på liv, så jeg brukte en minneeditor for å cheate på mitt eget spill he-he.

 

Vurderte om jeg skulle gjøre sånn at når man når 1000 poeng kan man "kjøpe" en speed-slower ved å trykke space, så halverer hastigheten gjennom resten av mappet, men det koster 1000 poeng. Eventuelt implementere et maskingevær som koster 1500 poeng, så kan du skyte vekk biter av en vegg.

 

Lagt ved map konvertereren. def.bmp er malen og 1.bmp er en demonstrasjon av et map. Jeg har ikke lagt inn muligheten for å name mappene enda, så de lagres foreløpig bare som 1.map når man konverterer. Kan bare bruke ms paint for å lage maps.

 

Lagt ved en moderert nibbles om 100% cpu aktivitet er et problem.

MapConverter.rar

Nibbles.rar

Endret av LonelyMan
Lenke til kommentar

Jeg har tidligere laget et klassisk spill i assembler og direct3d9, missile command. Det klassiske atari spillet hvor du skyter ned raketter. Du har sikkert sett den gutten i terminator 2 filmen hvor han spilte missile command. Jeg laget det prikk likt, selv den blinkende cursoren var lik, men jeg fullførte det ikke fordi jeg orket ikke. Så har jeg også laget atari spillet breakout, ganske likt det originale, der laget jeg scanline effekt slik at det så ut som du spilte på tv skjermen, men det kodet jeg i delphi. Så har jeg også laget snake i direct3d i delphi. Jeg har laget noen klassiske spill opp over tiden, selv om de er små så er det en del kompleksitet i det. Jeg har lyst til å lage noe mer avansert men jeg vet at det ikke lar seg gjøre når man bare er en person så jeg orker rett og slett ikke. Jeg har erfaring med direct3d og directsound i assembler og har skrevet biblioteker for de, men å lage komplekse spill krever mye mer enn det, der skal man implementere mulighet for å scripte unitene, man må ha en map editor, man skal ha AI, pathfinding (pathfinding har jeg studert endel og kan endel om det), og så skal man ha 3d modeller av unitene, teksturer osv.

 

Det blir rett og slett for mye for en enkelt person. Men tidsmessig så tror jeg ikke assembler er noen hindring der, bare planen er der så vil ikke det bli noe tidsmessig problem, programmeringsmessig.

Lenke til kommentar

Ja

 

Det som er fint med fasm er at det er laget for stort sett alle OS, inkludert Menuet. Det er skrevet i fasm som du ser. Der er mange flere OS som er skrevete i assembler.

 

Fasm er så sinnsykt fleksibelt, det er ingenting man ikke kan gjøre i det. Du kan bygge ditt eget høynivåspråk i det om du så ønsker, og det er faktisk blitt gjort også. Du kan strekke det til det uendelige.

 

F.eks om du vil ha ansi programmet ditt til å bli unicode, så bytter du bare om include filen win32a med win32w (eventuelt win64a og win64w) og dermed er det gjort, ingenting mer behøves. Makroene er bygd for å svitsje mellom ansi og unicode.

Endret av LonelyMan
Lenke til kommentar

Jeg har tidligere laget 4 irc klienter, 3 av dem skrevet i høynivåspråk og sistnevnte i assembler, det var mye arbeid. Nå har jeg laget en peer to peer chat klient i assembler som er endel simplere enn irc klienter. Om noen vil teste så kan de sende meg en pm så utveksler vi ip adresser og tester ut. Om det er behov for å kompilere programmet selv så kan jeg godt sende kildekoden så kan du kompilere programmet selv om du vil. Programmet er vedlagt.

 

Endret litt på programmet. Nye ting:

 

F11 = Fullskjerm/Normalt vindu

ESC=Avslutt programmet (advarselspopup hvis chattingen pågår)

Chattingen blir ciphret med rot13 (implementere RSA senere med primtall og sertifikater)

Chat.rar

Endret av LonelyMan
Lenke til kommentar
  • 1 måned senere...

Et lite cube eksempel jeg har laget i assembler og Direct3D. Bare et raskt og spesifikt eksempel, jeg har ikke kodet inn noe dx-feilsjekking enda og jeg antar støtte for 75 Hz på 1024x768. Jeg har ikke lagt inn mip mapping og anti aliasing enda, eller jeg hadde det men fjernet det siden jeg ikke har feilsjekking enda så kan jeg ikke anta at alle som laster dette ned har det. :)

3DKube.zip

Endret av LonelyMan
Lenke til kommentar

hehe, takk for komplimentet. Man behøver ikke være et geni for å få til litt Direct3D :) Det er ganske simpelt egentlig.

 

Jeg har nå lagt inn feilsjekking i kube eksemplet jeg laget, nå auto gjenkjenner programmet oppløsningen på maskina som har best refreshrate og høyest oppløsning med den refreshraten.

3DKube.zip

Endret av LonelyMan
Lenke til kommentar
Gjest Slettet+9871234

Men man trenger heller ikke være geni for å skrive en bok. Utlendinger skriver IT bøker over en lav sko. Jeg finner mer kunnskap i bøker enn å snakke med folk. Jeg vet ikke om dette ordet finnes (i forkorting).

 

DIKT = Data(logistikk) Informasjons(logistikk) Kommunikasjons(logistikk) Teknologi(logistikk)

 

De fleste snakker om IKT men ikke om Data i den ene eller andre for. I en viss forstand er det som skrives i denne tråden data, sosialt digitale data. :omg:

 

 

Før jeg leste denne posten, kan jeg opplyse deg om at jeg akkurat handler bøker for over 3000 kroner om IT og Økonomi på Amazon. Her

 

Her er listen:

 

Delivery estimate: Dec. 24, 2012

1 "The Return of Depression Economics and the Crisis of 2008"

Krugman, Paul; Paperback; $11.53

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Automate This: How Algorithms Came to Rule Our World"

Steiner, Christopher; Hardcover; $14.91

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Bureaucracy"

Von Mises, Ludwig; Paperback; $13.20

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

2 "Thinking Statistically"

Bram, Uri; Paperback; $4.99

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Natural Capitalism: Creating the Next Industrial Revolution"

Lovins, L. Hunter; Paperback; $7.60

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Unleashing the Power of IT: Bringing People, Business, and Technology Together (Wiley CIO)"

Roberts, Dan; Hardcover; $29.85

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Taming The Big Data Tidal Wave: Finding Opportunities in Huge Data Streams with Advanced Analytics (Wiley and SAS Business Series)"

Franks, Bill; Hardcover; $29.47

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Making Games with Python & Pygame"

Sweigart, Al; Paperback; $22.50

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Simple Numbers, Straight Talk, Big Profits!: 4 Keys to Unlock Your Business Potential"

Greg Crabtree; Hardcover; $14.71

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Big Data Analytics: Turning Big Data into Big Money (Wiley and SAS Business Series)"

Ohlhorst, Frank J.; Hardcover; $30.38

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Irrational Exuberance: (Second Edition)"

Shiller, Robert J.; Hardcover; $25.97

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Race Against the Machine: How the Digital Revolution is Accelerating Innovation, Driving Productivity, and Irreversibly Transforming Employment and th"

Erik Brynjolfsson; Paperback; $14.99

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "End This Depression Now!"

Krugman, Paul; Hardcover; $14.71

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "How to Lie with Statistics"

Huff, Darrell; Paperback; $6.49

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Ownership Thinking: How to End Entitlement and Create a Culture of Accountability, Purpose, and Profit"

Hams, Brad; Hardcover; $16.39

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Trillions: Thriving in the Emerging Information Ecology"

Lucas, Peter; Hardcover; $20.29

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "Cloudonomics, + Website: The Business Value of Cloud Computing"

Weinman, Joe; Hardcover; $37.80

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

 

Delivery estimate: Jan. 11, 2013 - Feb. 1, 2013

1 "Python for Kids: A Playful Introduction to Programming"

Briggs, Jason R.; Paperback; $18.43

Available for Pre-order

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

Because of Pre-order Price Guarantee, you might pay less. Why?

 

Delivery estimate: Jan. 25, 2013 - Feb. 11, 2013

1 "Regenesis: How Synthetic Biology Will Reinvent Nature and Ourselves"

Church, George M.; Hardcover; $18.48

Usually ships in 1 to 3 weeks

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

1 "The Third Industrial Revolution: How Lateral Power Is Transforming Energy, the Economy, and the World"

Rifkin, Jeremy; Hardcover; $15.88

In Stock

Sold by: Amazon.com LLC

Gift wrap: yes

Gift note:

Order #2 : betterworldbooks_

 

Please note: Pre-order Price Guarantee covers one or more item(s) in this order. If the Amazon.com price decreases between your order time and the release date, you'll receive the lowest price. See details.

 

Order #: 109-2405254-6080266

Shipping Method: Standard Shipping

Items: NOK 29,00

Shipping & Handling: NOK 73,62

------

Total before tax: NOK 102,62

Estimated tax to be collected:* USD 0.00

------

Order Total: NOK 102,62

 

Delivery estimate: Jan. 3, 2013 - Feb. 4, 2013

1 "Map: A Market Anti-Inflation Plan"

Lerner, Abba Ptachya; Paperback; $4.92

In Stock

Sold by: betterworldbooks_

Lenke til kommentar
Gjest Slettet+9871234

Kartotek er fine greier, men de er dessverre utgått på dato :green:

 

:hmm:

 

Jeg hadde en lengre diskusjon med sønnen min i går om papir bøkene ovenfor som jeg hadde kjøpt. Han mente at jeg kunne ha kjøpt et nettbrett for pengene og lastet dem ned til det. Om jeg kjøper et nettbrett blir antagelig ikke det før Windows8 128 Gb nettbrett er tilgjengelige. Les mer her:

 

http://www.dinitside...re-seg-til-fant

 

Som regel lønner det seg også å vente noen år før slike nettbrett kommer. Jeg kjøpte nettopp en iPad mini til mitt barnebarn, så jeg holder meg oppdatert på det.

 

Jeg glor nok i skjermer på Tv, og mine tre datamaskiner. Amazon kindle har jeg heller ikke investert i av lignende grunner.

 

Papir kartoteker er muligens historie, men det er ikke papir bøker. Ihvertfall ikke for meg. Det er mye mer behagelig å sitte ute i solen å lese en bok uansett hvor mye min sønn babler om matte skjermer som nesten er som en bok. Bøker er de beste rådgivere og konsulenter.

 

Ett avsnitt i en bok kan fort være verdt tusener. Det kan selvsakt også en video eller artikkel på nettet, men kjøper jeg en bok av en kjent forfatter borger det for en kvalitetssikring man ikke er sikker på er til sted på nettet.

 

Mitt 2 øres råd.

Endret av Slettet+9871234
Lenke til kommentar

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

Laster...
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...