# Platform id for modern architectures
---
## `BINARY_TAG`
- Today:
- `x86_64-centos7-gcc8-opt`
- `x86_64+avx2+fma-centos7-gcc8-opt`
- <!-- .element: class="fragment" --> Tomorrow:
- `x86_64+avx512f+avx512cd+avx512vl+`...
---
## Why so many flags?
![](https://codimd.web.cern.ch/uploads/upload_67947736fa7a7e7498a23e00958cf954.png)
May be Intel wants to experiment a bit.
---
## Idea :bulb:
We can use aliases!
| Name | `BINARY_TAG` | Flags |
| -------- | ------------------ | ----------------------------------- |
| SkyX | `x86_64+SkyX-`... | avx512f, avx512cd, avx512vl ... |
| Cannon | `x86_64+Cannon`... | SkyX + ... |
---
## Let's have a look to [GCC doc](https://gcc.gnu.org/onlinedocs/gcc-8.2.0/gcc/x86-Options.html#x86-Options)
![](https://codimd.web.cern.ch/uploads/upload_300337082fdecff94879c0dff5d1f268.png)
---
## And further down the page...
![](https://codimd.web.cern.ch/uploads/upload_4ecd8ecbeb39712803a109af128be3bb.png)
---
## One step back
`BINARY_TAG`: <arch>-<os>-<comp>-<opt>
We can make better use of the <arch> field!
---
## Proposal
Use GCC architecture names, replacing `-` with `_`<br>(instead of a list of `+<instr>`)
- `x86_64-centos7-gcc8-opt`
- `skylake_avx512-centos7-gcc8-opt`
---
## Compatibility?
- Simple
- *skylake-avx512* can run *haswell* (x86_64+avx2)
- *haswell* can run *nehalem* (x86_64+sse4_2)
- *nehalem* can run *x86-64*
- Compatibility matrix based on GCC documentation
- detect host arch and flags
- check if flags match those required
---
## Transition?
- Use new convention only for new architectures
- Map old convention to new for compatibility check
| Old | New/Internal |
| --- | ------------ |
| x86_64 | x86_64 |
| x86_64 with gcc>=6<br> (i.e. sse4_2) | nehalem |
| x86_64+avx2+fma | haswell |
---
## Summary
- Easy backward compatibility
- To be integrated in `LbPlatformUtils`
- used by LHCbDirac and LbEnv
- Integration in Gaudi trivial (mostly)
- to be presented at Gaudi Devs Meeting