I’ve done a bit of everything: low-level C software, C++ libraries, compilers and graphical interfaces, C++ debuggers in Java, Perl and PHP web systems, worked with (and written new) database systems, network services, games and distributed computing in a plethora of environments.
Unix is my window to this world for almost 3 decades, giving a special emphasis (and return) to the open source community. My current focus is on technology and development on restricted environments, from small memory to highly distributed systems.
My main interests are algorithms, neuroscience, distributed computing, dynamic systems, complexity and chaos, game theory, drums, photography, archery, flying.
- Technical Leadership
- Mission-critical, high-availability and high-performance development
- Toolchains: Compilers and debuggers
- Distributed and scientific computing
- Development in C, C++, Python, Java, Perl…
- Unix development (Linux, BSD)
- Relational databases (MySQL, Oracle)
Open Source Responsibilities:
- HPCC‘s Core Developer (2011~2012)
- LLVM‘s Code Owner (since 2014)
- OpenHPC‘s Testing Coordinator (2017~2019)
Senior Research Development Engineer – Microsoft Research
Since March 2019
Working on Verona, a research programming language for concurrent ownership.
- Language design and implementation
- High level optimisation passes using MLIR
- Compiler construction using LLVM infrastructure
- C++ interoperability with Clang libraries, sandboxing, RPC
- Feasibility of image (ResNet) and language (BERT) models on the IPU, training and inference, with model-parallelism distribution.
- Automatic pipelining model-parallel deployments into multiple devices to increase throughput.
- Heuristic search of optimisations on XLA/Hlo graphs.
- MLIR translation of a reinforcement learning language for optimising machine learning algorithms.
HPC-SIG Tech Lead – Linaro
Aug 2017 ~ Feb 2019
Technical leadership on the team consolidating the ARM story on achieving exascale performance.
- Deploying HPC clusters using OpenHPC on a variety of Arm hardware, from experimental to production, enabling open source technologies along the way (Warewulf, iPXE, OpenHPC, etc.)
- Compiler HPC-specific optimisation: benchmarking, analysis, performance tuning and upstream support.
- Scalable Vector Extension enablement in open source compilers and libraries
- HPC libraries (OpenBLAS, OpenMP, etc.) validation, optimisation, integration
- Helping define ARM’s server architecture from an HPC point of view
LLVM Team Lead – Linaro
Jan 2013 ~ Jul 2017
Technical leadership for a small team of developers focusing on ARM and AArch64 development for the LLVM compilation infrastructure.
- Performance and correctness analysis of generated code
- Completing ARM support (asm, exception handling, MCJIT, sanitizers, tools)
- Auto-vectorization and transformation cost model analysis
- Improving support in the toolchain (integrated assembler, libraries, linker, debugger)
- Validating and consolidating a reference toolchain for ARM and AArch64
- Refactoring and improving generic code
- Providing support for system builds: Android, FreeBSD, Mandriva, Chromium, Linux
- Benchmarking and validating upstream releases
- Providing infrastructure and development of continuous integration
Senior Software Engineer – HPCC Systems
Sep 2011 ~ Dec 2012
- Development of code generation and optimisations for the ECL compiler
- Refactoring of the distributed file system, implementing transactions and validation mechanisms
- Presented a talk about building open source communities on the HPCC Engineering Summit
Senior Software Engineer – ARM
Dec 2008 ~ Sep 2011
Member of System Design Division, on compiler R&D.
- LLVM Tech Lead, guiding internal development for OSS LLVM, interacting with the community.
- Supporting the LLVM front- and back-end for the ARM platform.
- Researched LLVM technology by connecting the EDG front-end to LLVM ARM back-end, producing a working compiler which ultimately convinced ARM to switch to an LLVM based toolchain.
- Working with C/C++ standard, ARM ABI, generic codegen and linkage problems, exception handling, debug information, NEON and auto-vectorised code generation.
- Presented a talk and chaired a parallel session at the LLVM Developer’s Meeting 2010 (San Jose, CA).
- Organised the first European LLVM User Group Meeting in 2011 (London, UK), which became the official EuroLLVM Developers’ Meeting every year since.
Member of System Design Division, on debugger development.
- Development Studio 5, an Eclipse-based C/C++ debugger written in Java 1.6 working on the debugger engine (middle-end).
- Bare-metal debugging: memory management, semi-hosting, run control, ABI support, stack unwinding, etc.
- Linux application debugging: gdbserver, shared libraries, threads.
- Working alongside the front-end (Eclipse) and the back-end (JNI interface to the boards, models and gdbserver) teams.
- Using Scrum methodology, unit tests, coverage check, regression tests and working in parallel with a validation team.
Software Engineer – EBI/EMBL
Dec 2005 ~ Nov 2008
Member of UniProt Production team delivering the protein database to the public. Maintain and optimize procedures on a multi-cluster Unix environment.
- Maintenance of the UniProt C++ library and associated production tools.
- Reorganization of procedures and rewriting internal tools to optimize speed and network usage and to
reduce failure rate and staff dependency, reducing running time 10-fold.
- Coding data access and indexing algorithms in C++ for speed and efficiency.
- Parallelization to hundreds of nodes running Alpha/Tru64 and AMD/Linux64.
Software Engineer – Yahoo!
Jul 2003 ~ Nov 2005
Member of Americas Platform Team delivering solutions for Brazil, Argentina, Mexico, Miami (espanol.yahoo.com), Canada and South Asia.
- Deployed mobile services for Latin America countries including SMS Mail, SMS Messenger, WEP Messenger and WAP pages.
- Responsible for Americas’ front page infrastructure as a developer, maintaining the publishing software infrastructure and as a Unix admin keeping the cluster up-to-date and running.
- Responsible for Americas’ Sponsored Matches infrastructure developing the marketing tool (C++/PHP), exporting the technology to South Asia.
- Member of the MySQL Geeks group acting as local and global support for Yahoo! developers.
- Former member of Latam Search Team where we were the first international team to deliver the new Yahoo! Search Technology.
Java Consultant – Omnidata Networking
Feb 2003 ~ Jul 2003
Plan and develop transportation insurance software using Java.
- Led a small team to deploy a desktop application using Java Swing and WebService Servlets.
- Developed C drivers for serial hardware communication using the Java Native Interface.
C++ Consultant – Fortis IT Consulting
Jul 2002 ~ Jan 2003
Develop C++ desktop tools, Java Servlets and Oracle PL/SQL procedures
- Maintained a Customer Manager System (C++/GUI) for Sulamerica Seguros.
- Developed mileage system for Transamerica Flats (C++/GUI).
- Develop Oracle PL/SQL packages of data import/export and Java/Servlet support packages.
Developer – Insite Soluções Internet
Apr 1999 ~ Jun 2002
Web Developer, Product Manager and MySQL and Oracle DBA.
- Full-featured web calendar for ZAZ (www.zaz.com.br).
- Full-featured e-commerce book shop (www.temporeal.com.br).
- Complete e-commerce’o’matic solution where clients can build their shops online with online payment and stock control (InShop).
- Improved the calendar as a complete web organizer merging with other products (mail, addressbook, etc) for iG (www.ig.com.br).
- Implemented KDE componentes to build a POS Browser for Casas Bahia (500+ stores) together with IBM.
- Other web-based and server-side development projects.
- Planed, installed and managed MySQL and Oracle databases with replication and multi-master setups.
Assorted Teenager Projects
1990 ~ 1998
- Hardware assembly and maintenance. Fixing and shipping multi-media kits (CD drives, sound cards, etc).
- Showcasing the kits on Comdex and Fenasoft (tech fairs of the 90s).
- Network installation (PCs, coaxial network, Windows 3.11, sharing printers!).
- Office computer disaster recovery (I have a funny story about lightning on an ice cream fridge factory).
- Translating binary-only software to PT-BR with hex editors.
- Building a cluster with discarded 486 machines from various companies.
- Updating ATMs (the 386 PCs inside) with dozens of floppy disks across town on a scooter, wearing a tie.
- Worked on a copy shop for a month when that was thing that people needed…
- Wrote office suite (billing, inventory, customer db) in VBAccess for a phone company.
- Wrote programs for friends and family, like a movie (text-based) database for my mother, in C++.
C++: How To Program [10th ed. Pearson]
Technical review of this introductory text book for first year classes on C++, with increasingly complex subjects, all the way to templates, design patterns and the standard library containers and algorithms. This edition focus on the new C++14 features.
LLVM Essentials [1st ed. Packt]
Technical Review of this introductory book on using LLVM as a compilation infrastructure for readers somewhat familiar with compilers.
Enabling the Arm HPC Ecosystem using Open Source Software [HPC Asia 2019]
The move from mobile to server markets present a unique challenge to Arm vendors, which were used to custom solutions, now need to create aconsolidated ecosystem. Unlike other architectures, Arm has a diverse hardware ecosystem. In collaboration with many Arm based companies, Linaro builds software for a robust and open source ecosystem, in which all vendors can participate, improve and profit from. In this talk, we will introduce the Linaro company, culture and collaborative work to enable Arm based platforms for a new era of computing.
OpenHPC Automation with Ansible [ISC 2018]
In order to test OpenHPC packages and components and to use it as a platform to benchmark HPC applications, Linaro is developing an automated deployment strategy, using Ansible, Mr-Provisioner and Jenkins, to install the OS, OpenHPC and prepare the environment on varied architectures (Arm, x86). This work is meant to replace the existing ageing Bash-based recipes upstream while still keeping the documents intact. Our aim is to make it easier to vary hardware configuration, allow for different provisioning techniques and mix internal infrastructure logic to
different labs, while still using the same recipes. We hope this will help more people use OpenHPC with a better out-of-the-box experience and with more robust results.
LLVM ARM Toolchain [Linux Plumbers 2014]
Bringing a full LLVM toolchain together, from core support tools (like integrated assembler and exception handling) to libraries and tools.
GCC and LLVM Collaboration [GNU Cauldron 2014]
With LLVM mature enough to feature as the default toolchain in some Unix distributions, and with the inherent (and profitable) share of solutions, ideas and code between the two, we need to start talking at a more profound level. There will always be problems that can’t be included in any standard (language, extension, or machine-specific) and are intrinsic to the compilation infrastructure. For those, and other common problems, we need common solutions to at least both LLVM and GCC, but ideally any open source (and even closed source) toolchain. In this talk, we shall discuss to what extent this collaboration can take us, how we should start and what are the next steps to make this happen.
Auto-Vectorization in LLVM [FOSDEM 2014]
Auto-Vectorization has come a long way since the early vector-processing CPUs, and compilers generally take a long time to implement it, prioritizing other more generic features instead. But with all recent highend chips containing some form of SIMD operations, auto-vectorization became a necessary feature on any modern compiler. LLVM was perhaps the latest of the big compilers to have a decent vectorization engine, but it has grown considerably for the last year, and the investment on SIMD code generation will not
diminish. This presentation outlines the past implementations, what we currently have available and peeks into the engineering pipeline to see what else we are working on.
Connecting the EDG front-end to LLVM [LLVM 2010]
Talk on compiler front-end, IR semantics and back-end support for the ARM platform. This project was the technical preview to understand the quality of the LLVM middle and back ends to cope with ARM code generation as well as the kind of C/C++ that ARM customers had, making sure that LLVM was ready for prime time on ARM. Ultimately, ARM took a decision to replace their ageing compiler for LLVM, based on the success of this project.
MySQL Security [SQL Day 2005]
How to harden MySQL’s security and how to fend off from the most common types of attack.
MySQL on Linux [Tempo Real Training 2004]
Lecture to 500+ people about running MySQL on Linux. Second time, same event.
MySQL on Linux [Tempo Real Training 2003]
Lecture to 500+ people about running MySQL on Linux.
MySQL Cluster [SQL Magazine 2006]
How to setup a MySQL cluster, what it’s good for and what it’s not.
MySQL 5.0 [SQL Magazine 2005]
New features of MySQL 5.0.
US LLVM Developers’ Meeting (Bay Area – 2016, 2021)
CGO – LLVM Performance Workshop (Europe / US – 2018 ~ 2019)
Arm HPC Workshop (Japan, US, China – 2017 ~ 2019)
FOSDEM – LLVM DevRoom (Brussels – 2014 ~ 2019)
EuroLLVM (Europe – 2011 ~ 2018)
Linux Plumbers – LLVM Room (Europe / US – 2014 ~ 2015)
Working towards bachelor’s degree on biology and physics.
Undergrad work on biology, chemistry and physics.
- Numerical modelling of social insects, Dick Koedan, IB, USP.
- Numerical modelling of RNA evolution, Airton Deppman, IF, USP.
- Protein physical chemistry, Shaker Chuck Farah IQ, USP.
- Pigment cell physiology, Ana Maria Castrucci, IB, USP.
- Mammals’ CNS pharmacology, Regina Markus, ICB, USP.
- 90 credits on Mathematics and Computing.
Artur C. Clarke Laws of Life
When a scientist states that something is possible, he is almost certainly right.
When he states that something is impossible, he is very probably wrong.
The only way of discovering the limits of the possible is to venture a little way past them into the impossible.
Any sufficiently advanced technology is indistinguishable from Magic.
Star Trek update: Any sufficiently advanced alien technology is indistinguishable from God.