# 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
{"slideOptions":{"theme":"sky"}}