Archives de catégorie : Uncategorized

Making Latex tables from output in Stata

There are already good packages to output regression results to latex tables (see outreg). There are also packages to make tables. But many tables do not fit the package. Hence, if you want to make custom tables you need to master a few Stata tricks. I added a simple example to my emetrics library on Github. As a bonus, I also give an example of how to use Natlib to reference articles. Zotero is a great reference manager and you can sync bibtex files with your Zotero account in the cloud.

GPU pendant les vacances

À chaque année, je prends des vacances quelque part en été…

Je me donne à chaque année un petit projet pour apprendre un truc nouveau. Cette année, le calcul par carte graphique. La puissance des cartes pour le calcul parallel dépasse maintenant celle des CPU. J’ai donc voulu tester ceci. J’utilise un portable Mac qui a justement une carte supplémentaire installée (AMD Radeon R9 M370X 2048 Mo). Cette carte a 640 coeurs fonctionnant à 0.8Ghz. Sinon, ce Mac a un processeur à 4 coeurs, ce qui permet de faire du OpenMP pour le calcul parallel. Mais je voulais essayer le calcul par GPU (Graphics Processing Unit).

Il y a deux fabriquants de cartes: NVIDIA et AMD. NVIDIA a inventé la première technologie, appelée CUDA, qui est très utilisée sur les cartes NVIDIA. NVIDIA et d’autres ont conçu récemment OpenACC qui ressemble à OpenMP.  C’est très prometteur, mais pour le moment il n’existe que des solutions commerciales pour une utilisation sans trop de problèmes (voir pgi fortran). Apple a plutôt proposé le standard OpenCL, qui n’est pas restreint aux cartes NVIDIA et qui va en plus utiliser le processeur Intel et d’autres ressources (si on en a). On peut appeler sous C. J’utilise plutôt Fortran pour faire du calcul. Afin d’utiliser OpenCL, je suis allé chercher l’excellent package CLFortran qui fait l’interface entre C et Fortran. J’ai fait les tests sans trop de problème avec le compilateur gfortran. Maintenant, une petite application pour voir les gains de vitesses possibles.

En OpenCL, il faut deux composantes: le code principal (fortran) et le code cl. Le code cl contient le « kernel », le code exécuté sur un coeur du GPU.  Ce code est en C. Puisque le coeur n’a pas une grande puissance, le calcul doit être simple. Le gain viendra du fait qu’il y a beaucoup de coeurs pour faire le travail…

Dans ma petite application, voici le kernel:

__kernel void sum(const int size, const __global float * vec1, __global float * vec2){
int ii = get_global_id(0);
for (int jj = 0; jj < 10000; jj++) {
vec2[ii] += 1.0;
}

J’ajoute de façon séquentielle 10000 fois 1.0 a un chiffre. Le code principal lui demande de faire ceci 1,000,000 de fois.

Si on roule avec un seul coeur du CPU sans GPU, ça prend 24 secondes. Avec 4 coeurs en OpenMP, environ 6 secondes. Avec le processeur graphique, ca prend 0.3 secondes. Il y a donc un gain de calcul énorme, même par rapport à OpenMP. Bien sur, il faut que la tâche qui soit faite en parallèle ne soit pas trop intense en calcul… Si on fait plutôt une somme sur 1000000 pour seulement 1000 points, alors OpenCL fait en 0.181 secondes et le code parallel OpenMP en 0.78 secondes. Le gain demeure appréciable.

Que faire avec un vieux Mac Pro?

À mon arrivée à l’UQAM en 2010, j’ai acheté avec des fonds de recherche un Mac Pro 4.1 (Early 2009) avec un processeur 4 coeurs Nehalem 2.66GhZ et 6GB de RAM. Une machine qui m’a beaucoup servie mais que j’ai dû délaissé pour des machines plus récentes. Le beau boitier a trainé dans un coin de mon bureau pendant des années, mais je ne pouvais concevoir m’en départir. Sur Geekbench 4, la machine faisait du 1900 (single core) et 8400 (multicore). J’avais mis a jour OSX (mac Sierra), ce qui l’avait rendu presque inutilisable.

Je suis tombé sur cet article de Paul Lefebvre . Il explique bien comment mettre à jour ces Mac Pro, surtout le processeur. Je n’ai aucune expérience hardware! Je me suis dit que même si je perdais quelques centaines de dollars, ca valait le coup d’essayer.

Mais avant de changer le processeur, j’ai d’abord mis à jour la RAM. J’ai acheté 32 GB de OtherWorld Computing pour 159$.

J’ai ensuite suivi le conseil de Paul Lefebvre et j’ai mis à jour le Firmware du mac pour passer de 4.1 a 5.1. En faisant ceci, on peut alors mettre des processeurs Intel plus puissants que ceux du 4.1. Il s’agit de suivre les étapes du post, assez simple.

Je me suis ensuite débarassé de Sierra pour passer à Ubuntu. OSX récent utilise beaucoup du processeur, de la RAM et surtout de la carte graphique. Sierra est lourd. Ce fut une étape très facile. J’ai suivi les instructions ici pour mettre sur une clé USB, re-booter avec la clé et ensuite choisir une nouvelle installation. J’ai du connecter avec un cable ethernet pour mettre a jour Ubuntu et trouver les drivers de la carte wireless. Après, plus aucun problème. Déjà avec ce changement, l’expérience est beaucoup mieux, combinaison de mettre Ubuntu et de la mise à jour RAM, même sur cette vieille machine.  Mais le gain de vitesse pour des applications intensives est presque nul.

Maintenant les choses sérieuses… J’ai acheté un processeur Intel Xeon 3670, 6 coeurs a 3.2GHZ, tel que suggéré dans le post de Paul. Je l’ai eu sur eBay pour 60$. J’aurais pu être plus aggressif mais étant donné mon objectif de ne pas trop dépenser… J’ai aussi acheté une canne d’air comprimé, du liquide pour nettoyer la plaque termique du Heat Sink, de la gomme thermal pour mettre sur le nouveau processeur et une clé Hex 3mm pour défaire le Heat Sink (voir le post de Paul). Cout total du matériel = 25$. J’ai suivi les étapes et changer le processeur. J’ai redémarré et voilà, en lancant cat /proc/cpuinfo, j’ai bel et bien vu le nouveau processeur. Mais la fan fonctionnait dans le tapis! Mes coeurs, en utilisant la commande sensors, ont atteint la température de 100 celsius. J’ai rouvert le boitier et vérifié que je n’avais pas assez reserré le Heat Sink. Une fois fait, l’ordinateur était silencieux et la température n’a pas dépassé 60 celcius! Il faut serré jusqu’à temps que ça bloque, mais pas plus!

J’ai relancé Geekbench. Gain appreciable en single core (gain de 14%) mais le gain multicore est impressionant (gain de 45%). En guise de comparaison, mon macbook pro 15 pouces 2015 4 coeurs donne 14000 en multicore (achat de 3000$ l’automne dernier) et mon iMac (Late 2015) 4 coeurs, 10765. Donc, c’est pratiquement ma machine la plus rapide!

Bien sur, il est possible d’acheter des machines plus rapides. Cependant, le gain de performance multicore de 45% a été atteint avec une grosse dépense de 244$ (sans trop chercher à faire des économies).  Ma conjointe a une autre de ces bêtes. Elle m’a déjà passé la commande…

 

 

 

 

 

Combien coûte l’hospitalisation en fin de vie?

Dans un article qui parait ce mois-ci dans la revue Fiscal Studies http://onlinelibrary.wiley.com/journal/10.1111/(ISSN)1475-5890 , nous avons calculé le coût cumulatif d’un séjour hospitalier en fin de vie en utilisant les données de la RAMQ et du Ministère de la santé du Québec. Comme on peut le voir dans le graphique suivant, tiré de l’étude, le coût moyen du dernier mois est de près de 12,000$ et le coût moyen cumulatif dans la dernière année avoisine les 24,000$. Au total 11.3% de toutes les dépenses hospitalières au Québec sont consacré à des patients qui en sont à leur dernière année de vie.

Y-a-t-il une limite à la vie humaine?

Dans les pays développés, l’espérance de vie à la naissance a augmenté de plus de 10 ans sur les 50 dernières années, au rythme d’environ 2 ans tous les dix ans. Ces gains ont été en partie réalisés par une amélioration des taux de mortalité après 50 ans. Afin de maintenir des gains dans le futur, il faudra être en mesure de vivre beaucoup plus vieux aux âges avancés, par exemple au-delà de 110 ans, et même 120 ans, avec une probabilité grandissante. Or, peu ont vécu plus de 120 ans au cours des 50 dernières années. Ce graphique montre l’âge au décès de la personne la plus vieille (source des données: wikipedia). Hormis Jeanne Calment, nous n’avons pu briser la limite des 120 ans. Le corp humain peut-il résister au-delà de 120 ans? À quand la prochaine innovation médicale permettant de le faire?

Welcome – Bienvenue

I am a Professor of Economics at HEC Montréal, the Business School Affiliated with the Université de Montréal (UdM). I co-lead a research chair on the economics of demographic change (CEDIA, cedia.ca) along with Guy Lacroix (U Laval) and Raquel Fonseca (UQAM).

Most of the work I do, in particular work relevant to public policy in Québec, appears on the Chair’s website (cedia.ca) or at CIRANO (cirano.qc.ca). Moreover, all working papers are indexed at IDEAS (ideas.repec.org). Google gives you a profile of my citations.

You will find code in various language as well as some replication material for some of the work I do. I have also posted slides and notes from classes I have thought. The collection of programs is thin right now but I intend on populating these pages in the future.