tuning support for 1st and 2nd generation Intel Atom CPUs
cover tuning support for 1st and 2nd generation Intel Atom CPUs
Andre McCurdy (5):
tune-corei7.inc: fix PACKAGE_EXTRA_ARCHS_tune-corei7-32 typo tune-bonnell.inc: support for first generation Intel Atom CPUs tune-silvermont.inc: support for second generation Intel Atom CPUs tune-atom.inc: include tune-bonnell.inc instead of tune-core2.inc tune-corei7.inc: update comments regarding Silvermont support
meta/conf/machine/include/tune-atom.inc | 4 +-- meta/conf/machine/include/tune-bonnell.inc | 35 ++++++++++++++++++++++++++ meta/conf/machine/include/tune-corei7.inc | 6 ++--- meta/conf/machine/include/tune-silvermont.inc | 36 +++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 meta/conf/machine/include/tune-bonnell.inc create mode 100644 meta/conf/machine/include/tune-silvermont.inc
Signature · 1 line
1.9.1
PATCH 1/5 tune-corei7.inc: fix PACKAGE_EXTRA_ARCHS_tune-corei7-32 typo
--- meta/conf/machine/include/tune-corei7.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
meta/conf/machine/include/tune-corei7.inc +1 -1
@@ -20,7 +20,7 @@ AVAILTUNES += "corei7-32" TUNE_FEATURES_tune-corei7-32 = "${TUNE_FEATURES_tune-x86} corei7" BASE_LIB_tune-corei7-32 = "lib" TUNE_PKGARCH_tune-corei7-32 = "corei7-32" -PACKAGE_EXTRA_ARCHS_tune-corei7-32 = "${PACKAGE_EXTRA_ARCHS_tune-core2} corei7-32" +PACKAGE_EXTRA_ARCHS_tune-corei7-32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-32} corei7-32" AVAILTUNES += "corei7-64" TUNE_FEATURES_tune-corei7-64 = "${TUNE_FEATURES_tune-x86-64} corei7"
Signature · 1 line
1.9.1
PATCH 2/5 tune-bonnell.inc: support for first generation Intel Atom CPUs
In reply to Andre McCurdy--- meta/conf/machine/include/tune-bonnell.inc | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 meta/conf/machine/include/tune-bonnell.inc
meta/conf/machine/include/tune-bonnell.inc new file +35 -0
@@ -0,0 +1,35 @@ +# Settings for the GCC(1) cpu-type "bonnell": +# +# Intel Bonnell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3 +# and SSSE3 instruction set support. +# +# This tune is recommended for the processors based on the first generation +# Bonnell (45nm) and Saltwell (32nm) Intel Atom CPUs. +# +DEFAULTTUNE ?= "bonnell-32" + +# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS +require conf/machine/include/tune-core2.inc + +# Extra tune features +TUNEVALID[bonnell] = "Enable bonnell specific processor optimizations" +TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "bonnell", " -march=bonnell -mtune=bonnell -msse3 -mfpmath=sse", "", d)}" + +# Extra tune selections +AVAILTUNES += "bonnell-32" +TUNE_FEATURES_tune-bonnell-32 = "${TUNE_FEATURES_tune-x86} bonnell" +BASE_LIB_tune-bonnell-32 = "lib" +TUNE_PKGARCH_tune-bonnell-32 = "bonnell-32" +PACKAGE_EXTRA_ARCHS_tune-bonnell-32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-32} bonnell-32" + +AVAILTUNES += "bonnell-64" +TUNE_FEATURES_tune-bonnell-64 = "${TUNE_FEATURES_tune-x86-64} bonnell" +BASE_LIB_tune-bonnell-64 = "lib64" +TUNE_PKGARCH_tune-bonnell-64 = "bonnell-64" +PACKAGE_EXTRA_ARCHS_tune-bonnell-64 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64} bonnell-64" + +AVAILTUNES += "bonnell-64-x32" +TUNE_FEATURES_tune-bonnell-64-x32 = "${TUNE_FEATURES_tune-x86-64-x32} bonnell" +BASE_LIB_tune-bonnell-64-x32 = "libx32" +TUNE_PKGARCH_tune-bonnell-64-x32 = "bonnell-64-x32" +PACKAGE_EXTRA_ARCHS_tune-bonnell-64-x32 = "${PACKAGE_EXTRA_ARCHS_tune-core2-64-x32} bonnell-64-x32"
Signature · 1 line
1.9.1
PATCH 3/5 tune-silvermont.inc: support for second generation Intel Atom CPUs
In reply to Andre McCurdy--- meta/conf/machine/include/tune-silvermont.inc | 36 +++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 meta/conf/machine/include/tune-silvermont.inc
meta/conf/machine/include/tune-silvermont.inc new file +36 -0
@@ -0,0 +1,36 @@ +# Settings for the GCC(1) cpu-type "silvermont": +# +# Intel Silvermont CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, +# SSSE3, SSE4.1, SSE4.2, POPCNT, AES, PCLMUL and RDRND instruction set +# support. +# +# This tune is recommended for the processors based on the second generation +# Silvermont (22nm) Intel Atom CPUs. +# +DEFAULTTUNE ?= "silvermont-32" + +# Include the previous tune to pull in PACKAGE_EXTRA_ARCHS +require conf/machine/include/tune-bonnell.inc + +# Extra tune features +TUNEVALID[silvermont] = "Enable silvermont specific processor optimizations" +TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "silvermont", " -march=silvermont -mtune=silvermont -msse4.2 -mfpmath=sse", "", d)}" + +# Extra tune selections +AVAILTUNES += "silvermont-32" +TUNE_FEATURES_tune-silvermont-32 = "${TUNE_FEATURES_tune-x86} silvermont" +BASE_LIB_tune-silvermont-32 = "lib" +TUNE_PKGARCH_tune-silvermont-32 = "silvermont-32" +PACKAGE_EXTRA_ARCHS_tune-silvermont-32 = "${PACKAGE_EXTRA_ARCHS_tune-bonnell-32} silvermont-32" + +AVAILTUNES += "silvermont-64" +TUNE_FEATURES_tune-silvermont-64 = "${TUNE_FEATURES_tune-x86-64} silvermont" +BASE_LIB_tune-silvermont-64 = "lib64" +TUNE_PKGARCH_tune-silvermont-64 = "silvermont-64" +PACKAGE_EXTRA_ARCHS_tune-silvermont-64 = "${PACKAGE_EXTRA_ARCHS_tune-bonnell-64} silvermont-64" + +AVAILTUNES += "silvermont-64-x32" +TUNE_FEATURES_tune-silvermont-64-x32 = "${TUNE_FEATURES_tune-x86-64-x32} silvermont" +BASE_LIB_tune-silvermont-64-x32 = "libx32" +TUNE_PKGARCH_tune-silvermont-64-x32 = "silvermont-64-x32" +PACKAGE_EXTRA_ARCHS_tune-silvermont-64-x32 = "${PACKAGE_EXTRA_ARCHS_tune-bonnell-64-x32} silvermont-64-x32"
Signature · 1 line
1.9.1
PATCH 4/5 tune-atom.inc: include tune-bonnell.inc instead of tune-core2.inc
In reply to Andre McCurdyUse 'atom' as an alias for the first generation Intel Atom CPUs.
--- meta/conf/machine/include/tune-atom.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
meta/conf/machine/include/tune-atom.inc +2 -2
@@ -1,2 +1,2 @@ -# Atom tunings are the same as core2 for now... -require conf/machine/include/tune-core2.inc +# Alias for the first generation of Intel Atom CPUs. +require conf/machine/include/tune-bonnell.inc
Signature · 1 line
1.9.1
Re: [PATCH 4/5] tune-atom.inc: include tune-bonnell.inc instead of tune-core2.inc
What do we get with this change
Quoted 24 lines · Andre McCurdy
Use 'atom' as an alias for the first generation Intel Atom CPUs.
--- meta/conf/machine/include/tune-atom.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)meta/conf/machine/include/tune-atom.inc +2
-3@@ -1,2 +1,2 @@ -# Atom tunings are the same as core2 for now... -require conf/machine/include/tune-core2.inc +# Alias for the first generation of Intel Atom CPUs. +require conf/machine/include/tune-bonnell.inc --1.9.1
--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Re: [PATCH 4/5] tune-atom.inc: include tune-bonnell.inc instead of tune-core2.inc
Quoted 1 line · Khem Raj
What do we get with this change
It's mainly just a convenience for anyone with an existing machine config using "tune-atom.inc". They would get atom specific tuning without needing to update their machine configs.
Quoted 25 lines · Andre McCurdy
Quoted 24 lines
Use 'atom' as an alias for the first generation Intel Atom CPUs.
--- meta/conf/machine/include/tune-atom.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)meta/conf/machine/include/tune-atom.inc +2
-3@@ -1,2 +1,2 @@ -# Atom tunings are the same as core2 for now... -require conf/machine/include/tune-core2.inc +# Alias for the first generation of Intel Atom CPUs. +require conf/machine/include/tune-bonnell.inc --1.9.1
--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core
Re: [PATCH 4/5] tune-atom.inc: include tune-bonnell.inc instead of tune-core2.inc
In reply to Andre McCurdyQuoted 10 lines · Andre McCurdy
Use 'atom' as an alias for the first generation Intel Atom CPUs.
--- meta/conf/machine/include/tune-atom.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)meta/conf/machine/include/tune-atom.inc +0
-0
meta/conf/machine/include/tune-atom.inc line 2
Quoted 4 lines
meta/conf/machine/include/tune-atom.inc +2
-2@@ -1,2 +1,2 @@ -# Atom tunings are the same as core2 for now... -require conf/machine/include/tune-core2.inc +# Alias for the first generation of Intel Atom CPUs. +require conf/machine/include/tune-bonnell.inc
This is actually pretty nasty to anyone who uses package feeds or packages since all of a sudden, the system rebuilds with a completely different package architecture. Not sure we can take this change for that reason.
I'd also like to understand how much of a difference these specific tunes actually give. I know the Intel people have been trying to focus on a smaller number of tunes that work well on the majority of platforms rather than micro optimising the tunes.
Are there some benchmark numbers or other analysis which shows these tunes as being more effective?
Cheers,
Richard
Re: [PATCH 4/5] tune-atom.inc: include tune-bonnell.inc instead of tune-core2.inc
Quoted 6 lines · Richard Purdie
Quoted 5 lines · Andre McCurdy
Use 'atom' as an alias for the first generation Intel Atom CPUs.
--- meta/conf/machine/include/tune-atom.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Quoted 14 lines
meta/conf/machine/include/tune-atom.inc line 2
Quoted 9 lines
meta/conf/machine/include/tune-atom.inc +2
-2@@ -1,2 +1,2 @@ -# Atom tunings are the same as core2 for now... -require conf/machine/include/tune-core2.inc +# Alias for the first generation of Intel Atom CPUs. +require conf/machine/include/tune-bonnell.incThis is actually pretty nasty to anyone who uses package feeds or packages since all of a sudden, the system rebuilds with a completely different package architecture. Not sure we can take this change for that reason.
OK. I was thinking the comment in tune-atom.inc "Atom tunings are the same as core2 FOR NOW..." gave people fair warning that tune-atom.inc might not remain an alias for tune-core2.inc forever, but no problem to drop this patch.
Another approach might be to drop tune-atom.inc altogether. Atom is now ambiguous in terms of defining a CPU architecture and it hasn't been a documented gcc x86 tuning option since gcc 4.8
https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options
https://gcc.gnu.org/onlinedocs/gcc-4.9.3/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options
https://gcc.gnu.org/onlinedocs/gcc-5.2.0/gcc/x86-Options.html#x86-Options
Quoted 7 lines
I'd also like to understand how much of a difference these specific tunes actually give. I know the Intel people have been trying to focus on a smaller number of tunes that work well on the majority of platforms rather than micro optimising the tunes.
Are there some benchmark numbers or other analysis which shows these tunes as being more effective?
Not that I'm aware of. My own tests suggest that the benefits of bonnell -vs- core2 tuning on a first generation Atom are pretty unspectacular (maybe ~0 to 5 % performance increase and ~5% increase in code size). I don't have a Silvermont board. This patch set was more about enabling further experiments though, so if solid benchmark improvements are a prerequisite then this patch set isn't ready to merge.
Quoted 7 lines
Cheers,
Richard
PATCH 5/5 tune-corei7.inc: update comments regarding Silvermont support
In reply to Andre McCurdyAlthough still compatible, tune-corei7.inc is no longer the recommended way to tune for Silvermont (which now has its own dedicated .inc file).
--- meta/conf/machine/include/tune-corei7.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
meta/conf/machine/include/tune-corei7.inc +2 -2
@@ -3,8 +3,8 @@ # Intel Core i7 CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 # and SSE4.2 instruction set support. # -# This tune is recommended for Intel Nehalem and Silvermont (e.g. Bay Trail) CPUs -# (and beyond). +# This tune is recommended for Intel Nehalem CPUs and beyond. +# It is also compatible with second generation Silvermont Intel Atom CPUs. # DEFAULTTUNE ?= "corei7-64"
Signature · 1 line
1.9.1
Hi Andre,
Quoted 2 lines · Andre McCurdy
Andre McCurdy (5):
tune-corei7.inc: fix PACKAGE_EXTRA_ARCHS_tune-corei7-32 typo
This change makes sense and addresses an issue.
Quoted 5 lines
tune-bonnell.inc: support for first generation Intel Atom CPUs tune-silvermont.inc: support for second generation Intel Atom CPUs tune-atom.inc: include tune-bonnell.inc instead of tune-core2.inc tune-corei7.inc: update comments regarding Silvermont support
I am not sure these make sense, it adds additional complexity to an already complex testing matrix.
Both the bonnell and silvermont tunes are fully part of their respective core* tune settings, there is no real need to become more specific. We know that newer code is starting to use intrinsics that can determine the correct extensions based on the CPU type.
I know you replied partly to RP's query, but is there something specific your trying to accomplish with these additional .incs that we don't already do and if so what?
Sau!
meta-intel maintainer
Quoted 8 lines
meta/conf/machine/include/tune-atom.inc | 4 +-- meta/conf/machine/include/tune-bonnell.inc | 35 ++++++++++++++++++++++++++ meta/conf/machine/include/tune-corei7.inc | 6 ++--- meta/conf/machine/include/tune-silvermont.inc | 36 +++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 5 deletions(-)create mode 100644 meta/conf/machine/include/tune-bonnell.inc create mode 100644 meta/conf/machine/include/tune-silvermont.inc
Quoted 2 lines · Andre McCurdy
Andre McCurdy (5):
tune-corei7.inc: fix PACKAGE_EXTRA_ARCHS_tune-corei7-32 typo
This change makes sense
Quoted 5 lines
tune-bonnell.inc: support for first generation Intel Atom CPUs tune-silvermont.inc: support for second generation Intel Atom CPUs tune-atom.inc: include tune-bonnell.inc instead of tune-core2.inc tune-corei7.inc: update comments regarding Silvermont support
I am not sure these make sense, it adds additional complexity to an already complex testing matrix.
Both the bonnell and silvermont tunes are fully part of their respective core* tune settings, there is no real need to become more specific. We know that newer code is starting to use intrinsics that can determine the correct extensions based on the CPU type.
I know you replied partly to RP's query, but is there something specific your trying to accomplish with these additional .incs that we don't already do and if so what?
Sau!
meta-intel maintainer
Quoted 8 lines
meta/conf/machine/include/tune-atom.inc | 4 +-- meta/conf/machine/include/tune-bonnell.inc | 35 ++++++++++++++++++++++++++ meta/conf/machine/include/tune-corei7.inc | 6 ++--- meta/conf/machine/include/tune-silvermont.inc | 36 +++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 5 deletions(-)create mode 100644 meta/conf/machine/include/tune-bonnell.inc create mode 100644 meta/conf/machine/include/tune-silvermont.inc