772.marian_r
Neural machine translation for written language
Marian has had many contributors from both academia and industry, notably including Adam Mickiewicz University in Poznań, the University of Edinburgh, and Microsoft. Authors include Marcin Junczys-Dowmunt, Roman Grundkiewicz, Frank Seide, Hieu Hoang, Ulrich Germann, Tomasz Dwojak, Alham Fikri Aji, and Young Jin Kim.
Marian is an efficient, free Neural Machine Translation framework written in pure C++ with minimal dependencies. It has been developed by the Microsoft Translator team, the University of Edinburgh, the Adam Mickiewicz University in Poznań and many other commercial and academic contributors. It is currently the engine behind the Microsoft Translator Neural Machine Translation services and has been deployed by many companies, organizations, and research projects. Most notably it is being used in Microsoft Teams' live caption translation feature.
The SPEC CPU benchmark uses the Marian NMT framework to translate source sentences in English to German. The model to translate is based on a distilled transformer architecture with optimizations to achieve real-time latencies across platforms.
Marian was named in honor of the Polish crypotologist Marian Rejewski who reconstructed the German military Enigma cipher machine in 1932.
The benchmark is started with a series of arguments that can be found in the control file of each input size. Here is a sample command line:
./marian-decoder -m model.alphas.npz -v vocab.spm vocab.spm --beam-size 1 \
--mini-batch 32 --maxi-batch 100 --maxi-batch-sort src -w 512 --skip-cost \
--gemm-type intgemm8 --intgemm-options precomputed-alpha standard-only \
--quiet --quiet-translation -i newstestwmt21_500ln.en \
-o newstestwmt21_500ln.out --log newstestwmt21_500ln.log --cpu-threads 1
| Option | Description |
| -m | Specifies the file which contains the quantization parameters for the weights in the model to be represented in int8. The model is taken from the efficicency task in Sixth Conference on Machine Translation (WMT21) |
| -v | In neural machine translation, a vocabulary file contains all the unique tokens (like words or subwords) that the model knows and can generate or understand. This file, vocab.spm is generated from sentencepiece and is provided to the framework for inference. |
| --beam-size | Beam search is a greedy algorithm to explore a tree. This specifies a beam size used during search with validating translator. |
| --mini-batch | The number of sentences translated at once. |
| --maxi-batch | The number of sentences loaded before creating a mini-batch, this parameter is a multiple of minibatch size. A maxi batch size of 100 indicates loading 100*mini-batch sentences to then sort and create optimal minibatches with similar sentence lengths. |
| -i | Specifies the input text file in English to be translated. |
| -o | Specifies the output file, containing the translation into the target language. |
| --cpu-threads | This flag is set by the runcpu program. For refrate it is always one. For refspeed, it set to match the user requested thread count, but capped to 24 due to lack of thread level parallelism past that point. |
The benchmark has two inputs that come from commonly used translation corpora.
Additionally, the train input is Ivan Sutherland's lecture Technology and Courage. It was included because the SPEC engineers who adapted Marian admire the paper and find inspiration from it. For example, Dr. Sutherland discusses the courage required to start something new. In that light, we honor the courage of our SPEC predecessors who, despite being competitors, came together to pursue a vision of benchmarks that are fair, comparable, and representative. The majority of the users will never see what is being run under the hood, but for those curious and enterprising computer scientists who seek deeper understanding of the workload by reading its inputs, they will discover something wonderful and uplifting. Our hope is to continue to inspire the next generation of inquisitive CPU engineers.
The output consists of translations of text files being given to Marian decoder. The vocabulary model supports English to German translation.
C++, C
The SPECrate version is single-threaded; although std::thread is used to create multiple threads, only one has context at any given time through the benchmark run.
The SPECspeed version uses std::thread for parallelism.
GNU/Linux systems implement C++ std::thread using POSIX Threads. Although some systems automatically include the needed support, this is not universal. Surprises have been seen when changing OS versions, or libraries, or compilers; or when FDO is added; or when combining C and C++ modules. Typically, it is safest to add -pthread to all compile and link lines for all SPEC CPU benchmarks that use std::thread. Please see the $SPEC/config directory for Example config files that demonstrate how to conveniently do so.
Users of GCC may encounter slow builds when compiling 772.marian_r with -fprofile-generate due to atomic profile updates for a relatively small inner loop. As noted in the GCC documentation of -fprofile-update=method "The GCC driver automatically selects prefer-atomic when -pthread is present".
The benchmark is based on Marian NMT source code v1.12, available from the upstream github repository at github.com/marian-nmt/marian-dev. Marian is distributed under the MIT license.
The Text similarity program is based on github.com/ra397/Text-Similarity, which is distributed under the BSD-2 license.
The input data comes from the Tilde MODEL Corpus distributed under the CC-BY, and the EuroPat parallel corpora of patents distributed under the CC0 license.
The train input data comes from Ivan Sutherland's lecture entitled "Technology and Courage". Dr.Sutherland has granted SPEC with Permission to Use this text.
SentencePiece is an unsupervised text tokenizer for Neural Network-based text generation. It is based on github.com/google/sentencepiece and is available under the Apache-2.0 license.
Marian comes bundeled with following source directories with their own licenses.| Software components | Description | License |
| Pathie-CPP | Small C++ library for crossplatform Unicode path management. | BSD-2 license |
| CLI11 | C++ based command line parser. | CLI license |
| cnpy | Library to read and write .npy / .npz files. | MIT license |
| yaml-cpp | C++ based YAML parser. | MIT license |
| spdlog | C++ based logging library. | MIT license |
| mio | C++ based library for memory-mapped IO. | MIT license |
| phf | C++ based library that implements CHD perfect hash algorithm. | MIT license |
| half_float | C++ implementation of a 16 bit floating-point type mimicking most of the IEEE 754 behaviour. | BSD license |
Copyright © 2026 Standard Performance Evaluation Corporation (SPEC®)