Technology Experience

Contenuti gestiti da Igor Damiani
posts - 949, comments - 2741, trackbacks - 15120

My Links

News

  • Questo blog si propone di raccogliere riflessioni, teoriche e pratiche, su tutto quello che riguarda il world-computing che mi sta attorno: programmazione in .NET, software attuale e futuro, notizie provenienti dal web, tecnologia in generale, open-source.

    L'idea è quella di lasciare una sorta di patrimonio personale, una raccolta di idee che un giorno potrebbe farmi sorridere, al pensiero di dov'ero e cosa stavo facendo.

    10/05/2005,
    Milano

Archives

Post Categories

Generale

Quando un byte in più o in meno significa la morte o la vita

Il soldato nazista si nascose in mezzo agli alberi, un filare di grandi betulle che costeggiavano il fossato qualche metro più in là. Si accucciò in silenzio e cercò di prendere fiato. Era sudato, sporco ed impaurito ma la cosa peggiore era che doveva sfuggire ai suoi nemici che lo braccavano. Alzò lo sguardo ed i suoi occhi digitali scrutarono con attenzione la strada di terra battuta da cui era arrivato, cercando ansioso qualsiasi traccia dei suoi inseguitori. Sperava di vedere qualche nemico ucciso, ma una voce dentro di lui gli diceva che era una cosa impossibile: l'algoritmo ripuliva le aree di memoria man mano che non servivano più. Impugnò meglio l'arma, un Garand M1 preso ad un americano che aveva fatto fuori nel caricamento precedente, riempì il caricatore per essere sicuro di avere il contatore dei proiettili pieno se ne avesse avuto bisogno. Si alzò e, sempre rimanendo abbassato, cominciò a correre. Il frame-rate scese un attimo a 11fps, il soldato vide la propria immagine rallentare perdere di fluidità, ma non se ne preoccupò molto. Continuò la propria corsa guardingo.

Nell'immensità di dati presenti nella memoria RAM, byte[0] fra tutti rivestiva una maggiore importanza. Come al solito, lui non era a conoscenza di questa sua importanza, ed eseguiva il suo lavoro come se fosse una giornata fra tante. La CPU era particolarmente impegnata a gestire un processo cod2sp.exe. Occupava parecchia RAM e soprattutto richiedeva un certo dispendio di forze per mantenere costante il flusso verso la GPU che, per fortuna, faceva il suo lavoro a dovere renderizzando inesorabile verso il dispositivo di output primario. Il byte[0] si aggirava fra i banchi di memoria in attesa della propria missione. Non poteva però sapere che nello stesso istante di clock anche byte[1] si trovava a soli 0x20 bytes di distanza, minaccioso come non non mai.

Dopo 200 metri di corsa, il soldato nazista cominciò ad avere il fiatone. Fisicamente non provava nulla, non poteva provare nulla, ma l'algoritmo che lo governava gli imponeva di vedere il proprio fiato uscire dalla bocca e condensarsi in un piccola nuvola di vapori di zeri e di uno  davanti a lui. Irrigidì i muscoli del proprio corpo virtuale quando vide che si stava avvicinando ad un edificio che, da lontano, sembra un tipico fienile, una fra i tanti che aveva già visto in Normandia. Cercando di tenersi al di fuori dalla linea di tiro delle finestre, il soldato si avvicinò all'ingresso principale ed attese di poter sentire qualcuno. In alcune occasioni poteva intuire la presenza di nemici al di là delle pareti: gli era capitato, ma non aveva capito come aveva fatto, perciò non poteva riprodurlo. Pensò che poteva essere stato merito di qualche cheat, o di qualche algoritmo diverso da quello attuale, o magari da un'arma differente dal Garand che portava adesso. Fece per girare l'angolo e fare il suo ingresso nel fienile, quando lo vide, proprio nascosto dietro una balla di fieno. Lo notò per via della baionetta che spuntava dal suo nascondiglio. Era un nemico, senza dubbio. Il soldato nazista strinse più forte l'arma, trattenne il fiato e si preparò ad aprire il fuoco.

byte[0] e byte[1] vennero chiamati contemporaneamente dalla CPU. Videro il proprio indirizzo di memoria correre veloce sul bus a 32bit del sistema. Saltarono sul bus e si fecero sospingere dal flusso dati alla stessa velocità imposta dal clock a 2,21Ghz. Un algoritmo di sorting, più ad alto livello rispetto al context attuale, aveva richiesto la loro presenza per portare a compimento un task appartenente al processo cod2sp.exe. byte[0] e byte[1] si affiancarono, si guardarono e sorrisero, felici di lavorare assieme in quel momento. Salirono verso memorie ad alte velocità, verso era una cache L2, o chissà cos'altro. Si preparono a subìre l'operazione binaria associata, ma qualcosa accadde. Qualcosa che non ebbero previsto e che al momento li spaventò molto. La CPU effettuò un masking sui due bytes: byte[0] seguì un flusso da una parte, mentre byte[1] finì dalla parte opposta. I due bytes si guardarono allontanarsi veloci, chiedendosi perplessi quale destino li aspettasse.

Il nazista alzò la mira con l'arma, la puntò contro il nemico che aveva intravisto e premette il grilletto. Una raffica di colpi partì verso il bersaglio, colpendo un po' a casaccio il fieno e le pareti di legno del fienile al di là. Schegge di legno volarono dappertutto, mentre uno stream di bytes[] sonori fluirono verso la scheda sonora con devastante potenza. Ancora una volta, i dettagli troppo elevati del rendering causarono un calo improvviso degli fps, e la traiettoria dei proiettili digitali ne risentì. Sul volto del soldato comparve un debole sorriso, quando vide particelle di sangue renderizzate imbrattare il pavimento, proprio dove aveva intuito la presenza del suo nemico. Lasciò il grilletto, e nel fienile tornò il silenzio. Soddisfatto, si avvicinò spavaldo al punto in cui aveva colpito. Quando lo raggiunse, vide che il suo nemico non era nient'altro che un clone di se stesso. Aveva lo stesso volto, l'aspetto era implementato attraverso le stesse texture, il comportamento era il medesimo. Allo stesso tempo, si accorse che molte delle properties associate al clone avevano valori minimi, ma sufficienti affinchè il suo algoritmo girasse ancora.
Il nazista si affrettò a puntare il Garand per chiudere questa maledetta storia.
Il nazista sparò nuovamente verso il suo clone, consumando l'intero caricatore.

byte[0] e byte[1] sfrecciarono su corsie adiacenti, ma in direzioni opposte, perchè così voleva la CPU. Viaggiando uno contro l'altro scanditi dal clock, i due bytes si scontrarono provocando un impatto binario ad alta frequenza. Sarebbero sopravvissuti entrambi, questo è chiaro, ma solo uno dei due avrebbero avuto la meglio e avrebbe continuato a far parte del processo corrente.

Il nazista vide il proprio corpo grondante di sangue, colpito a morte dagli stessi proiettili e negli stessi punti del suo clone, che stava disteso davanti a lui. Non capì come fosse successo, perchè credeva che il suo algoritmo fosse stato più veloce di quello del suo nemico.
Non capì il motivo di nulla. Non capì il perchè della sua morte.
Il nazista non poteva sapere che uccidendo il suo nemico, in realtà avrebbe ucciso anche se stesso.

powered by IMHO 1.2

Print | posted on Friday, February 10, 2006 2:44 PM | Filed Under [ 010 .bytes. 010 ]

Feedback

Gravatar

# re: Quando un byte in più o in meno significa la morte o la vita

E' ufficiale: sei un cazzutissimo genio!
2/10/2006 2:56 PM | Jazzer
Gravatar

# re: Quando un byte in più o in meno significa la morte o la vita

ehm...spero sia una cosa bella!
2/10/2006 3:06 PM | Igor Damiani
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET