Wednesday 23 September 2015

Setting kernel constants using CUDA driver API

CUDA uses special qualifiers (namely, __constant__) to tell to the compiler that some variables should be placed direcly in a cached memory banks. The content of such variables (e.g., numeric values, constant arrays) can be set by the host before a kernel is executed. This is achieved, with CUDA runtime API, by using the following statement:

cudaMemcpyToSymbol(symbol, &variable, sizeof(variable));

Piace of cake. But how does it work with the CUDA driver API? Well, it is not clearly explained in the programming guide (at least, I couldn't find any examples). It turns out that the process requires two steps:
  1. get a reference to the __constant__ variable in the device;
  2. initialize it using a memcpy "Host to Device".
In practice, it works as follows:

CUdeviceptr constDevPtr;
cuModuleGetGlobal(&constDevPtr, NULL, module, "symbol");

cuMemcpyHtoD(constDevPtr, &variable, sizeof(variable));

I tested the code above and it works seemlessly. I hope this will save some headaches to CUDA developers.

Thursday 24 July 2014

On Golden Rules

Western society is permeated, on some extent, by a latent christian mentality. Even though a small part of western population is really christian, in a strict sense, "we" all agree on a passage of Matthew's gospel:
Whatever you want men to do to you, do also to them.
- Matthew, 7:12
This fundamental principle is generally referred to as Jesus Christ's golden rule, and it is considered the basis of christian god's will. Interestingly, this idea is way older than the New Testament. A symmetric version of this sentence was indeed pronounced by Confucius more than 4 centuries before Jesus Christ:
What you do not want done to yourself, do not do to others.
- The Analects of Confucius, XVː24
It is worth noting that similar concepts were proposed hundreds of years before. For instance, an egyptian papyrus of the late period reads:
That which you hate to be done to you, do not do to another.
Thus, it seems that christianity is just a statement of a "common-sense" on which everybody was already agreeing since centuries.  Nevertheless, I think that Christ did mess up with the proposition, leading to a deformed meaning of the principle which lead to proselytism and abuses.

Christianity assumes that something that is good to me is NECESSARILY good for everyone else, but this is far from true. We are all different, hence the assumption that we all want the same things from others is both naïve and a bit arrogant. The christian god wants us to overcome the personal space of the people surrounding us, in order to force the delivery of our "good" intentions. Naturally, there is here a second implicit assumption that what is "good" for christians must be good in any other culture or society, in any time and situation. Naturally, it is wrong.

On the contrary, the rest of golden rules (e.g., confucianism) respects the coexistence and promotes diversity (behavioral and cultural) by not doing anything that may cause frictions or arguments and, in particular, by avoiding any action that may cause suffering to me in the first place, because it is likely that it will make the others suffer too.

The paradigm shift is clear and consequences are straightforward: when a christian person feels that something is good for him, he will try to make the others feel the same. This misplaced urge, which completely ignores individual needs, generates absurd debates about mutual respect and morality. Moreover, christians have weird expectations from humanity, which is supposed to behave with a strict christian perspective (e.g., doing christian good actions) because of a wrong (or malicious) re-statement of a millenary concept produced by their fundamental prophet.

Monday 18 March 2013

Semplici ipocriti o autentici fessi allo sbaraglio?

I grillini, aka movimentisti a cinque stelle, sono riusciti a diventare il primo secondo partito alla Camera* sulla base di un atteggiamento intransigente di rottura con la "vecchia" politica, intesa quantomeno come nomi e sigle. Grazie all'approccio "non faremo alleanze", hanno drenato voti di protesta e sono esplosi come partito.

Al di là del successo elettorale, trovo demenziale questo approccio per un partito sedicente rivoluzionario, perché a meno di non portare a casa il 50%+1 dei voti ("facile" alla Camera, impossibile al Senato) significa puntare a non voler mai governare, dove mai si intende in eterno. Altro che rivoluzione, si passa solo per gli scassapalle che assistono al gioco di altri senza proporre nulla di proprio, atteggiamento tipico di una nazione con 50milioni di commissarî tecnici ma  diametralmente opposto a quello che occorre in Italia oggi.

Questo è l'atteggiamento di Grillo. Rispecchia effettivamente quello che i suoi deputati stanno mantenendo? Alla prima verifica concreta - l'elezione del Presidente del Senato - alcuni grillini dissidenti hanno mancato di seguire  la linea oltranzista del non-capo e hanno deciso che, pur di evitare l'elezione dell'impresentabile Schifani, era meglio regalare voti al candidato di csx.

Atteggiamento saggio, rispettabile, intelligente. Purtuttavia ipocrita, perché si è  sempre professato il contrario che, puntualmente, avrebbe conseguenze nefaste, vedasi Schifani. Ci siete già arrivati?

Ora, tutto potrebbe risolversi in maniera serena, se non fosse per alcune  giustificazioni arrivate in queste ore. Partirei dal preambolo, ovvero dalle infelici (eufemismo) dichiarazioni della capogruppo 5 stelle alla Camera, Roberta Lombardi:

"Le elezioni dei rappresentanti sono troppo lente, sono uno spreco di denaro pubblico. Non si può perdere così una giornata".

Molto bene, ci sta. Le procedure sono troppo farraginose, arcaiche; meglio procedere più spediti, tanto si hanno le idee chiare e non c'è bisogno di ragionare, ci insegna la Lombardi.

Il Senatore Vito Crimi
Tutto vero? Forse no, visto che dopo il voto che ha portato all'elezione di Grasso, Grillo ha tuonato contro i "ribelli" che hanno appoggiato un candidato esterno, portando Vito Crimi (capogruppo al Senato) a ribattere così:

"Ci siamo subito riuniti, ci siamo fatti portare panini e acqua nella stanza, e confrontati a lungo
(dalle 14.00 alle 16.30, NdMe) senza il tempo per poter approntare uno streaming ne poter interpellare in modo attendibile la rete… Alla fine si è deciso di votare per alzata di mano tre opzioni: 1) Votare Grasso 2) Lasciare libertà di voto 3) Non votare ne Grasso ne Schifani (scheda bianca, nulla, con scritto Orellana, non votare erano tutte opzioni equivalenti ai fini della terza opzione). Su ogni opzione si è votato liberamente, senza il vincolo che chi votava per una non potesse votare per l’altra, e per ciascuna si è cercata una maggioranza, e la maggioranza assoluta ha votato per la terza opzione".

Ecco alcune mie osservazioni:
  • evidentemente, tutti i buoni propositi iniziali (nessuna alleanza, niente compromessi) erano pura demagogia, dato che quando si passa alla politica vera e propria l'intransigenza programmatica viene agilmente buttata alle ortiche. Buono a sapersi, ma faccio notare a Crimi e ai 5 Stelle che non c'era niente da dover discutere;
  • è interessante anche il fatto che senza una connessione ad internet, i 5 Stelle non sappiano che pesci pigliare. Si deduce che un sotto-campionamento dell'intelligenza collettiva non ne conserva le caratteristiche. In altre parole, non è scale-free. Forse (forse?) serve più rappresentanza in Parlamento, piuttosto che invocare demagogicamente il taglio dei parlamentari;
  • trovo stupendo il fatto che, a dispetto di una assemblea in cui si è deliberato di non votare nè Grasso, nè Schifani (cosa ovvia, ripeto, per i 5 stelle), poi grazie al voto segreto ognuno faccia il cazzo che gli pare;
  • trovo infine magnifico accostare le parole di Climi a quelle della Lombardi: anziché bofonchiare stupidate riguardo sprechi e tempo eccessivo, perché non lo si impiega per RAGIONARE e DISCUTERE? 
Cari grillini, fate il vostro lavoro, fatelo bene, fatelo con intelligenza, piantatela di dar retta a Grillo che vi manda solo in confusione e vi obbliga ad una linea demenziale. Accendete il cervello individuale, solo questo serve all'Italia.

EDIT: niente, la realtà supera sempre la fantasia e spazza via ogni barlume di logica. Beppe Grillo ha unilateralmente deciso di introdurre due "coordinatori della comunicazione", uno per ogni ramo del Parlamento, affinché "si interfaccino con i capi-gruppo". Insomma, che fondamentalmente gli dicano che cosa dire. Naturalmente, controllati da Grillo e pagati con soldi pubblici, perché la democrazia dal basso funziona così.

EDIT: la domanda retorica è stata parzialmente fugata dalla Lombardi stessa.

* La mia amica Lara mi fa presente che, contando i voti degli italiani all'estero, il M5S è il secondo partito alla Camera.

Thursday 30 August 2012

Ubuntu, launch problem with Nvidia GeForce (GTX 590?)

I experienced serious difficulties in launching my Ubuntu live distribution. In particular, both the 11.10 and the 12.04 versions did not recognize any keyboard (PS/2 or USB, it was the same), and halted during the startup phase.

The interesting part is that on a completely identical computer, except the video card, everything worked correctly.

Googling around, I realized that it could be due to my dual-GPU Nvidia GTX 590, that may be not correctly supported by the open source driver, Noveau. The workaround is to use the "nomodeset" flag under the "other options" menu.


Once installed, you can set Nvidia's proprietary driver, which works in a seemless way.