Aussie AI

Assembler

  • Last Updated 20 September, 2024
  • by David Spuler, Ph.D.

Assembly language, or "assembler", is the low-level language for CPU machine instructions. Like C++, it is still a symbolic human-readable language, but unlike C++, it translates mostly one-to-one to machine code instructions. The syntax for assembler is much simpler than C++, and more obscure, but it's also very, very fast.

Most C++ compilers support features allowing you to specify assembly language sequences in the middle of a C++ program. You don't need to put assembler into a separate code file, because you can use assembly language directives inside C++ sequences. The directive to use to introduce an assembly language statement into C++ is somewhat compiler-dependent, (such as whether to use ASM or MASM or __ASM), but the whole concept of assembly language is platform-dependent anyway.

The first question to ask yourself before writing assembler in C++ is whether you need to. The use of assembler should only be considered for the most bottlenecking parts of the code, like deep inside the inner loops of a GEMM kernel. Otherwise, you're probably micro-optimizing something that's not that critical.

Another question is whether to use "intrinsics" instead of assembler. Each compiler has literally hundreds of builtin low-level functions called "intrinsics" that are very fast, probably because the compiler-writers have written them in assembler. There are also lots of intrinsics to use for GPU operations and CPU SIMD extensions such as AVX-512. Look through the long list of C++ intrinsics for your platform to see if there's one that does what you need.

Research on Assembler

Research on optimization using assembly language includes:

More AI Research

Read more about: