Tuesday, February 2, 2021

Technical paper review #1

Marvell ThunderX3: Next Generation Arm-based Server Processor


Authors describe implementation of ThunderX3 CPU. Here are the key points that stood out for me.

ThunderX2 was derived from an earlier MIPS based architecture (which I was privileged to work on for a short while). ARM instructions that did not directly map to MIPS were expanded into micro-ops. A 6% gain in SPECint was achieved by reducing micro-op expansion.

Details on arbitration policies for hardware threads inside the OOO pipeline are presented. Arbitration decisions are made, for example, based on number of micro-ops in flight further down the pipe or the most micro-ops to retire.

The paper described the rational for choosing a ring topology over mesh: memory bandwidth not increasing dramatically over next generation.

Monday, December 17, 2018

Goodbye Company

It with a fair amount of sadness to announce that, last month, I shut down my company: P&L Systems, Inc.

These past 16 months have been quite the experience.

I recognize the importance of acknowledging (and honoring) the feelings that came up throughout the adventure. To shut down any company is a loss, and with loss comes grief. I cannot precisely identify with all of the five stages of grief (denial, anger, bargaining, depression, acceptance).

Denial and anger do not resonate at the moment, but bargaining, however.  "What if I did ..." or "If only this happened ..." statements are at the forefront of my consciousness. Relating the loss of a company to the loss of a loved one is sobering, quoting: "We want life returned to what it was; we want our loved one restored. We want to go back in time, find the tumor sooner, recognize the illness more quickly, recognize the illness more quickly, stop the accident from happening... if only, if only." The author of the quote goes on to explain that the "if onlys" cause us to find fault in ourselves and what we "think" we could have done differently. Depression set in, somewhat unconsciously, during the final weeks of the company. It showed up as a more-relaxed and scattered attitude to my daily routine. Finally,  with acceptance, I accept that this company has been my greatest failure so far. I do not accept that this was my last.

I am so incredibly grateful for the individuals that helped make the company possible. Money was lost, and that is the painful truth. I do not regret the financial consequence. I could have purchased a Telsa; instead, I invested in myself. If continuing to drive a 10-year-old vehicle is the consequence of failure, so be it, I will retake that consequence over and over again.

I cannot imagine that it will be possible to list all the lessons learned. The two lessons that most resonate with me are (1) that I underestimated the effort required to adequately cover non-technical responsibilities (i.e., networking, sales, marketing, business development, etc.) and (2) that I underestimated the complexity of building a non-trivial machine learning system (i.e., choosing the correct features, massaging input data, effectively using the results of trained models, etc.). More specifically, I should have prototyped the core technology (hard) before building the supporting infrastructure (should have been easy).

Luck (or, Karma?). That's the only way I can describe what's next for me. I am starting a new role at Google beginning January 7th. I am so incredibly humbled and grateful. Much of the specifics of the position remain unknown, but I am confident that it is a fit (short- to medium-term, at least). I plan nothing short of making an impact at the company.

Thursday, November 15, 2018

Three small projects

I recently released three small projects on my personal github:

Kudos to Edaphic Studio

I have previously talked about my use of IntelliJ as my primary development environment for Scala, C++ (CLion), JavaScript (Webstorm), and Python (PyCharm). I cannot recommend it enough. As luck would have it, a company is developing an IntelliJ plugin for Verilog and SystemVerilog. The plugin is in beta phase but remains exceptionally usable. The author is responsive in addressing my bug reports. Most refreshing is the tools' transparent pricing structure. No EDA sales representatives to deal with!

In summary, I wholeheartedly recommend hardware developers check out: https://www.edaphic.studio/.

Thursday, September 6, 2018

Register a bundle in Chisel3

A quick update to a previous post that I made: http://blog.edmondcote.com/2017/03/register-bundle-in-chisel.html.  Here is how I now create a register (sequential storage element) of a bundle in Chisel3.  The benefit is the elimination of the previously-necessary wire declaration.

val pageReg: Page = RegInit({
  val page = Wire(new Page())