Go 1.10 updates for Power

Go 1.10 updates for Power

The Go 1.10 source is frozen now and I have some updates on Power architecture support.

In addition to the updates I’ve already given here regarding performance and POWER9 support, I also added:

  • New implementations for bytes.IndexByte and string.IndexByte that use vector registers and instructions in commit be943df. The performance improvement can be up to 2.75x, depending on the slice size. I will probably look for more basic function loops that may be optimized using vector instructions for Go 1.11.
  • Fixed the implementation of Data Cache instructions in the Go assembler.
  • Updated the syscall package to use newselect.
  • Fixed a very bad performance regression in both bytes.Compare and runtime.cmpstring introduced in Go 1.8.

Also, Go should be almost fully functional on ppc64le / Alpine Linux in 1.10. There are some timeout (hanging) problems when C code is linked with Go code, but pure Go programs should work properly now.

by Carlos Eduardo Seo

Photos from Portugal

Photos from Portugal

Sorry for the lack of activity, but I was on vacation. I managed to get some nice photos in Portugal and they are all available on Flickr. Since it is not my first time there, this time I decided to explore locations apart from the big cities.

Here are the 10 locations I visited. Click on the images below for the full album. All photos were taken with a Fuji X-E1 and a Fuji 18-55mm f/2.8-4.0 lens.



My way in and out Portugal this time. I used the capital as a base to visit Mafra, Sintra and Óbidos.


Home of the impressive National Palace.


My second time here. This time I went to the Quinta da Regaleira / Monserrate circuit, with a stop for lunch at the Seteais Palace.


Home of Portugal’s most famous university.


Well-preserved Roman ruins near Coimbra.


Used the city as a base to visit Braga and Guimarães.


Nice city with a lot of churches to visit, including the impressive Bom Jesus do Monte.


Castle and palace visits.


Beautiful city with plenty of canals. “Portuguese Venice” is an overstatement, though.


Interesting medieval walled city.

by Carlos Eduardo Seo

Go updates for POWER9 / ISA 3.0

Go updates for POWER9 / ISA 3.0

I recently pushed two patches upstream related to the enablement of ISA 3.0 (POWER9) instructions. The first one, commit 526f342, enables instructions in the assembler. This includes new compares, loads, math operations, register moves, the new random number generator and the new copy/paste facility.

The second one, commit 6661cf6, enables the new internal/cpu package for Power. This package provides runtime CPU identification and capabilities detection and we will use it to write new runtime performance optimizations specific for POWER9 without breaking the code for POWER8.

Both will be available in go1.10. Or you can grab the current upstream code and build it yourself to use them.

by Carlos Eduardo Seo

Go 1.9 released

Go 1.9 released

Go 1.9 is released and has some new features, including:

For the Power architecture, the new minimum requirement for big endian is now POWER8. This unifies hardware requirements for both little endian and big endian and will make it easier to us to provide new features and optimizations for both.

In addition, we have many performance optimizations, including:

  • POWER8 performance optimizations for the math/big, strings and bytes packages
  • Compiler optimizations in the SSA backend for better instruction sequence generation
  • POWER8 performance optimization for AES

For more information, please check the release notes.

by Carlos Eduardo Seo