Go 1.27 introduced the experimental simd package, which provides portable, vector-width-independent SIMD types and operations for integers and floating-point numbers. To accelerate vector computations during model training and inference, Gorse has used GoAT to convert SIMD instructions compiled from C into Go assembly. The simd package makes it possible to run the same Go code across different instruction sets, but can its performance approach the assembly generated by GoAT with LLVM?
In 2025, we benchmarked the performance of text embedding models in similarity-based recommendations. Within six months of that benchmark's publication, Alibaba Cloud and Google launched a new generation of open-source text embedding models: qwen3-embedding by Alibaba Cloud and embeddinggemma by Google. Recently, the gorse-bench tool also added benchmark features for text embedding models. In this post, we use gorse-bench and the playground dataset to conduct a comprehensive evaluation of popular open-source text embedding models.
GitHub Actions provides various continuous integration environments for projects hosted on GitHub, including three operating systems (Linux, macOS, and Windows) and two architectures (AMD64 and ARM64). These environments are sufficient for most projects, but RISC-V developers may find it challenging to run RISC-V workflows on GitHub Actions. Commercial companies can use self-hosted runners (refer to Supporting runners on 64bit RISC-V) or service providers (RISC-V Runners and Cloud-V), but for individual developers, this represents a significant expense.
In the era of large language models, low-precision floating-point numbers are no strangers to developers, with BF16 being one of the most widely supported low-precision floating-point formats. This article will introduce how to use BF16 in the Go programming language.
Introduction to BF16
AVX512 is the latest generation of SIMD instructions released by Intel, which can process 512 bits of data in one instruction cycle, equivalent to 16 single-precision floating point numbers or 8 double-precision floating point numbers. The training and inference process of recommendation models in Gorse requires a lot of vector computation, and AVX512 can theoretically bring some acceleration effect. Unfortunately, the Go compiler does not automatically generate SIMD instructions.
The ability to compile into a single binary is a great feature of the Go programming language, avoiding dependency management at deployment time. However, if the project contains front-end code, we need to find a way to embed the front-end artifact into the Go binary at compile time. The compilation process is as follows.
