summaryrefslogtreecommitdiffstats
path: root/conf/machine/include/tune-skylake.inc
Commit message (Collapse)AuthorAgeFilesLines
* intel-skylake-64: use tune-x86-64-v3.incNaveen Saini2023-01-041-24/+0
| | | | | | | | tune-x86-64-v3.inc uses x86-64 v3 level of instruction set. x86-64-v3: (close to Haswell) AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, MOVBE, XSAVE Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
* tune-skylake.inc: remove qemu-usermode checkNaveen Saini2022-12-291-25/+1
| | | | | | | | | | QEMU 7.2.0 has now support for avx2 with followign change: x86: TCG support for AVX, AVX2, F16C, FMA3 and VAES instructions Ref https://git.yoctoproject.org/poky/commit/?id=9caff14abbb742e5083056b899ee6fc0a5fba8f3 Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
* conf: remove usage of X86_TUNE_DIR varAnuj Mittal2022-04-051-1/+1
| | | | | | | The main branch only supports building with kirkstone now so we no longer need this to tweak paths for older branches. Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
* layer.conf: update machine confs with new tune locationsNaveen Saini2021-08-231-1/+1
| | | | | | | Added logic to make sure, it does not break with old releases. Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
* Convert to new override syntaxAnuj Mittal2021-07-311-5/+5
| | | | | | | Use the convert-overrides.py to convert to new syntax and manually fix some additional changes. Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
* tune-skylake.inc: Improve handling the newly introduced skylake tune.Alejandro Enedino Hernandez Samaniego2019-08-291-3/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The skylake tune introduced on 04510bfa Currently disables qemu-usermode by default, due to the lack of support from QEMU to several of the Intel instruction set extensions introduced within the few latest generations of CPU architectures (e.g. QEMU does not support avx2) While there is a good reason to perform the removal of qemu-usermode from MACHINE_FEATURES, there are several components within the build system that rely on it for proper compilation and behavior, for example anything that uses gobject data introspection or even the components like the chromium web browser require to run a QEMU for the target architecture to build successfully. There is no reason why we can't have those components built without sacrificing the cpu (most) optimizations. The process I followed on meta-chromebook to enable an optimized build and whats being upstreamed by this patch is that by doing some reverse engineering, I was able to figure out which instruction set extensions are not compatible with QEMU Skylake-Client, by performing a bit gcc magic from inside QEMU (target) to get the available optimizations for the native architecture (which is actually our target in this case). These are all (not surprisingly) the avx2 extensions, listed as follows: -mno-avx -mno-avx2 -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni -mno-avx512bitalg Specifically disabling these manually (for now), allows us to build an optimized system for the skylake/skylake based architectures (e.g. KabyLake) while keeping the capability of using qemu-usermode, as a side note GCC does show more unavailable optimization tunes, (hence why there might be some warnings), but getting rid of these specifically seems enough to make it run happily in qemu-usermode. Basically the MACHINE_FEATURES variable is able to dictate how we will tune the build for our device, if qemu-usermode is present, TUNE_CCARGS will expand as follows: TUNE_CCARGS=" -m64 -march=skylake -mtune=skylake -mno-avx -mno-avx2 -mno-avx512f -mno-avx512er -mno-avx512cd -mno-avx512pf -mno-avx512dq -mno-avx512bw -mno-avx512vl -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni -mno-avx512bitalg -mfpmath=sse" Whats this means is that the build will be tuned for skylake architectures, enabling all possible extensions, (MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC and XSAVES) minus the ones QEMU is unable to run, which will result in an illegal instruction error, notice the tune is kept as skylake. Whilst, if qemu-usermode is not found on MACHINE_FEATURES, TUNE_CCARGS will expand to: TUNE_CCARGS=" -m64 -march=skylake -mtune=generic -mavx2 -mfpmath=sse" Which is exactly what its set to with the current tune, so this patch should be harmless, and only extend current functionality, we will still keep qemu-usermode disabled by default (hence enabling avx2) but the user would have the capability to decide how the skylake tune will be handled. As the GCC manual states, we should really try to avoid using mtune=generic when possible, and this patch allows us to do so [1]. This patch also addresses a problem on which the current skylake tune includes tune-core2.inc instead of tune-corei7.inc to get the list of AVAILTUNES and PACKAGE_EXTRA_ARCHS. Right now, AVAILTUNES are set as follows: AVAILTUNES=" x86 x86-64 x86-64-x32 i586 i686 core2-32 core2-64 core2-64-x32 skylake-64" Where the proper set should be (after this patch): AVAILTUNES=" x86 x86-64 x86-64-x32 i586 i686 core2-32 core2-64 core2-64-x32 corei7-32 corei7-64 corei7-64-x32 skylake-64" When (if), QEMU gains support for the AVX2 instruction set extensions these can be easily removed to provide full support for qemu-usermode. [1] https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/x86-Options.html Signed-off-by: Alejandro Enedino Hernandez Samaniego <aehs29@gmail.com> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
* conf: add new machine intel-skylake-64Naveen Saini2019-08-211-0/+28
Add 64-bit new machine (intel-skylake-64) with -march=skylake and avx2 instruction-set set up. We do see a qemu-usermode failure at build time, on setup of avx2 instruction-set as QEMU does not support AVX instruction set. Check this: https://bugs.launchpad.net/qemu/+bug/1818075 So to bypass this issue disabling qemu-usermode for intel-skylake-64 machine. Due to above limitation and in order to not affecting existing machines, this new machine is being proposed to add. A quick performance comparision between intel-corei7-64 vs intel-skylake-64 machines Measurements are in time, taken by the benchmark tests. Less is better. Test/Benchmark intel-corei7-64 intel-skylake-64 (1) CppPerformanceBenchmarks (Test: Math Library) (1st) 5m 15.70s 4m 36.39s (2nd) 5m 16.37s 4m 36.51s (3rd) 5m 15.54s 4m 37.80s CppPerformanceBenchmarks is a set of C++ compiler performance benchmarks. (2) AOBench (1st) 0m 35.07s 0m 28.74s (2nd) 0m 34.90s 0m 28.72s (3rd) 0m 34.85s 0m 28.89s AOBench is a lightweight ambient occlusion renderer, written in C. The test profile is using a size of 2048 x 2048. (3) C-Ray (1st) 320 seconds 232 seconds (2nd) 320 seconds 232 seconds (3rd) 321 seconds 232 seconds C-Ray, a simple raytracer designed to test the floating-point CPU performance. For this patch, 'bitbake world' gets successfully built with latest poky master. Signed-off-by: Naveen Saini <naveen.kumar.saini@intel.com> Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>