Vanilla in Software Engineering
Vanilla in Software Engineering is a term that is used as a prefix to software and hardware systems to denote it as a baseline without any extra components. Vanilla version is the minimal version (relatively lightweight) that you will have to use in case you want to use the software.
Table of contents:
- How is Vanilla version used?
- Why Software have multiple versions?
- Vanilla Software examples
- Vanilla TensorFlow
- Vanilla Linux distribution
How is Vanilla version used?
Vanilla versions are commonly used as a baseline in benchmarking to compare if any changes bring any improvement.
Some common uses of Vanilla Software:
- Acts as a stable and throughly tested software version
- Acts as a baseline for performance benchmarks
- Acts as a core or minimal component of a software that needs to be used
- Acts as a starting point to optimize the software using different approaches
Why Software have multiple versions?
You need to understand that there are multiple versions of the same software which is due to:
- different building approaches (like enabling AVX2 or AVX512 on building; using O3 or O2 optimizations in GCC)
- Linking external libraries to the baseline for performance improvement or support additional hardware (like GPU) better
Vanilla Software examples
There are several widely used software stacks where the Vanilla version is popular. Some of them are:
- Vanilla TensorFlow
- Vanilla Linux distribution
- Vanilla BLIS
Vanilla TensorFlow
TensorFlow is one of the most popular Machine Learning framework today. There are a wide range of versions that are maintained by different teams for targeting different programming environments. For example, a specific TensorFlow build runs faster on a particular Linux distribution like Solaris but slow on others.
TensorFlow is a complex software in itself and you can add several other softwares as an add-on. Just for CPU based system, we can add the following:
- A BLAS or BLIS library with Eigen (custom build). TensorFlow use Eigen.
- Linking an acceleration library like MKLDNN (or DNNL)
- Linking a custom OpenMP build (like Intel OpenMP)
- Compile source code to support instruction set like AVX2, AVX512, SSE and others.
Vanilla TensorFlow is the TensorFlow build that is without any specific optimizations. Even the pip version of TensorFlow is the Vanilla version of it. So, if you build TensorFlow locally and add in some optimization options during the build process, it will be faster than the common TensorFlow build.
To get the pip version of TensorFlow, you can use the command:
pip install tensorflow==1.15.0
To build a optimized version of TensorFlow using MKLDNN and AVX enabled, follow this detailed guide. With this, you will see significant performance improvement.
Vanilla Linux distribution
As you know there are several different distributions of Linux kernel such as Ubuntu, OpenSUSE, RedHat distributions, Kali Linux and much more. Each have different performance on different systems and is best for a specific set of applications.
To understand the difference or to develop a new kernel, one need to start with the Vanilla Linux kernel. It is available at GitHub.
You will notice that this is the original Linux while other variants like Ubuntu are just modifications keeping specific things in focus.
With this article at OpenGenus, you must have the complete idea of Vanilla in Software Engineering.