Tuesday, March 31st 2026

Intel Binary Optimization Tool Changes Code Execution with Heavy Vectorization

The Intel Binary Optimization Tool (BOT) has been launched alongside the "Arrow Lake Refresh" series of processors, which includes the Core Ultra 5 250K Plus and Core Ultra 7 270K Plus models. While the tool is beneficial for gamers looking to extract a few extra frames from their setups, it may be a nightmare for makers of benchmarking tools like Geekbench by Primate Labs. Recently, Primate Labs testing found that BOT changes the way .exe applications run and concluded that Geekbench runs will now flag these BOT-enhanced runs. However, in deeper testing, Primate Labs discovered that Intel's BOT may deliver significant boosts in some applications like Object Remover and HDR, increasing performance by up to 30%. This is thanks to the deep vectorization that the BOT performs behind the scenes to optimize performance.

For example, Primate Labs used Intel's own Software Development Emulator (SDE) to measure how many instructions were executed and which types of instructions the program executed. Without BOT, Geekbench 6 required a total of 1.26 trillion instructions to finish, while a BOT-enhanced run completed with 1.08 trillion instructions. This is an impressive 14% reduction. However, when examining the execution by type, we see that BOT makes heavy use of vector instructions like SSE2 and AVX2. The number of scalar instructions needed to execute a program fell from 220 billion to 84.6 billion, while the number of vector instructions increased from 1.25 billion to 18.3 billion, a 13.7x increase. This means that Intel BOT finds a way to turn inefficient scalar code into vectorized instructions that are processed much more efficiently inside Intel CPUs. These techniques indicate a very complex behind-the-scenes process than was originally believed. The Geekbench v6.7 update will include a flag for BOT, allowing future Geekbench results to be easily distinguished as BOT-enhanced or not.
We only have a high-level understanding of how the Binary Optimization Tool actually works, but here's the essence as covered in our review of "Arrow Lake Refresh." It builds on Intel's APO technology and profiles a workload at the microarchitectural level to identify where compiled code is not fully utilizing IPC. This process occurs in Intel's labs, not on your machine. If a binary isn't achieving peak efficiency, Intel applies post-link optimization to produce restructured machine code with better instruction density, without altering the source code, decompiling, or involving developers. The original binary on disk remains untouched. Instead, when you enable a profile and reboot, a user-mode service monitors the relevant binaries and silently redirects execution to the optimized paths, similar to how GPU drivers swap in optimized shaders for supported games at runtime. To be clear, the workload still performs all the same tasks, and nothing is skipped or approximated. It's simply reorganized to make better use of the hardware's available execution units.
Source: Geekbench Blog
Add your own comment

29 Comments on Intel Binary Optimization Tool Changes Code Execution with Heavy Vectorization

#1
LastDudeALive
Damn. Now imagine how much it's going to improve performance with Nova Lake and AVX 10.2. Really hope they expand the number of programs this can optimize. AMD needs to respond or Zen 6 becomes a much less attractive offering.
Posted on Reply
#2
Squared
Since AMD has SSE2 and AVX2 instructions, wouldn't the optimized binaries work on AMD chips and also older Intel chips? Amd if it works on many processors shouldn't the compilers be updated to make similar optimizations?
Posted on Reply
#3
evernessince
LastDudeALiveDamn. Now imagine how much it's going to improve performance with Nova Lake and AVX 10.2. Really hope they expand the number of programs this can optimize. AMD needs to respond or Zen 6 becomes a much less attractive offering.
I'll pass on the software industry having to rely on the vendor for optimizations thank you, no thank you. That just leads to the bigger player dumping money and blocking competition like the GPU market.

The better approach is to just make a good CPU architecture that work and provide tools so that devs can optimize their games for your CPU should they want to go the extra step.
Posted on Reply
#4
LastDudeALive
evernessinceI'll pass on the software industry having to rely on the vendor for optimizations thank you, no thank you. That just leads to the bigger player dumping money and blocking competition like the GPU market.

The better approach is to just make a good CPU architecture that work and provide tools so that devs can optimize their games for your CPU should they want to go the extra step.
The problem is modern CPU's are so complex and there are so many different architectures in common use, it's impossible for even the largest software vendors to "optimize." Maximizing the potential of a CPU requires specialized knowledge that's protected by patents and trade secrets. Modern CPUs are essentially a black box. Even when writing in low-level languages like Assembly, you're still at the whim of microcode and the quirks of the specific architecture's out-of-order execution and branch prediction units that can make or break fast code.

In order to get Intel's help on optimizing your own code, you essentially have to be on the scale of AWS or Cloudflare for it to be worth it to optimize. If you're a game or app developer, there's absolutely no reason to have a team of hundreds of software engineers pouring over Intel's documentation to try and make your app run 15% faster on one specific architecture that probably represents ~5% of your install base.

Since Intel is the only one with the knowledge to do this, it's good that they're doing this. It's much better to have hundreds of Intel engineers making a program that can optimize most software for a specific platform, instead of every software company having to pay hundreds of engineers to optimize their own software for a specific Intel platform.
Posted on Reply
#6
Shihab
AleksandarKThis means that Intel BOT finds a way to turn inefficient scalar code into vectorized instructions that are processed much more efficiently inside Intel CPUs. These techniques indicate a very complex behind-the-scenes process than was originally believed.
Not really...
Vectorisation is relatively simple in principle. All modern compilers can even do it automatically.
Going through the instructions to manually do it is probably time consuming tho.
Posted on Reply
#7
JohH
sudothelinuxwizardWhy can't they bring this to Linux?
Because on linux YOU can compile most things and turn on autovectorization yourself.
Posted on Reply
#8
Rubinhood
If this kind of optimization takes off, what if it turns into a new chapter in chips, software development and virtualization :-O
- Intel just optimized x86.A binary code for x86.B hardware
-> then with extra effort, one could also go beyond mere virtualization, and optimize Arm.X binary code for the same x86.B
-=> thinking that even further: if this optimization matches or outweighs the benefit of sticking with the same CPU architecture - why have any architecture-specific code in the first place, instead of generic Intermediate representations like LLVM or JVM.
Posted on Reply
#9
user556
SquaredSince AMD has SSE2 and AVX2 instructions, wouldn't the optimized binaries work on AMD chips and also older Intel chips? Amd if it works on many processors shouldn't the compilers be updated to make similar optimizations?
Yeah, should work just fine on both older Intel parts and AMD parts too. That is, of course, when the blocking checks are removed.
Posted on Reply
#10
R-T-B
evernessinceI'll pass on the software industry having to rely on the vendor for optimizations thank you, no thank you.
Dude that's been the case for decades now.

EDIT: Do you mean the CPU vendor, or software vendor? It changes the meaning a bit.
Posted on Reply
#11
evernessince
LastDudeALiveThe problem is modern CPU's are so complex and there are so many different architectures in common use, it's impossible for even the largest software vendors to "optimize." Maximizing the potential of a CPU requires specialized knowledge that's protected by patents and trade secrets. Modern CPUs are essentially a black box. Even when writing in low-level languages like Assembly, you're still at the whim of microcode and the quirks of the specific architecture's out-of-order execution and branch prediction units that can make or break fast code.

In order to get Intel's help on optimizing your own code, you essentially have to be on the scale of AWS or Cloudflare for it to be worth it to optimize. If you're a game or app developer, there's absolutely no reason to have a team of hundreds of software engineers pouring over Intel's documentation to try and make your app run 15% faster on one specific architecture that probably represents ~5% of your install base.

Since Intel is the only one with the knowledge to do this, it's good that they're doing this. It's much better to have hundreds of Intel engineers making a program that can optimize most software for a specific platform, instead of every software company having to pay hundreds of engineers to optimize their own software for a specific Intel platform.
CPUs are inherently designed to tackle a wide variety of tasks. When devs optimize for CPUs, they are typically optimizing the code itself to be more efficient in general or addressing the compiler. This is unlike GPUs where you optimize for specific architectures as much much less is applicable across all GPUs. This is due to the nature of CPUs handling everything while GPUs handle specialized parallel workloads. GPUs are much more specialized and thus benefit more from architecture specific optimizations. CPUs are not so specialized but the upside is that they can do a ton of different things and optimizations generally benefit most architectures unless you are straight up missing an instruction set that is needed. If you want to optimize everything for maximum performance, you'd put it on GPU compute. Not everything can be parallelized though, so it isn't feasible.

Devs don't need to know how the CPU works on a low level in order to optimize for it, x86 has well established best coding practices.
R-T-BDude that's been the case for decades now.

EDIT: Do you mean the CPU vendor, or software vendor? It changes the meaning a bit.
Poorly worded, I meant per CPU architecture optimizations from the CPU vendor specifically like the GPU market.
Posted on Reply
#12
Visible Noise
evernessinceWhen devs optimize for CPUs, they are typically optimizing the code itself to be more efficient in general or addressing the compiler. This is unlike GPUs where you optimize for specific architectures as much much less is applicable across all GPUs.
Take a look at all the vendor specific code in LLVM and you’ll see why your assumptions are not true.
Posted on Reply
#13
Steevo
Ahh yes, the are trying again 20 years later.

web.archive.org/web/20120105060810/http://developer.amd.com/documentation/articles/pages/4292005119.aspx

"
Your Processor, Your Compiler, and You: The Case of the Secret CPUID String
Home > Docs > Articles & Whitepapers
Tags:Processors, Processor Architecture, Compilers

[td]
The range of features and functions in an "industry standard" x86 processor can be bewildering. So, how do optimizing compilers know what to optimize for, and how do binaries understand their processor's capabilities? Steve Westfield investigates this curious mystery. And no, the butler didn't do it.



Steve Westfield


[RIGHT][td]
4/29/2005 [/RIGHT]


The x86 instruction set is an industry standard, and is found in chips like Intel's Pentium, Celeron and Xeon processors, as well as in AMD's Opteron, Athlon, Sempron, and Turion processors, and even in chips from other manufacturers, like VIA Technology's C3 processor family.
While the hardware specifications and interfaces of those x86-compatible chips vary, along with power consumption and performance characteristics, they all conform to the core x86 instruction-set standards. Many also offer extensions to that x86 architecture, and many of those extensions have been implemented by several vendors. This means binary portability. Compilers written for one x86 processor should create object code and binaries that run on any contemporary x86 processors with those same extensions. The use of standards provides economy of scale, gives customers choices, and fosters innovation on implementation of those standards.
There are many extensions to the x86 architecture, such as the original MMX multimedia extensions, which were then enhanced by SSE (Streaming SIMD Extensions), then SSE2 and, more recently, SSE3. Those are all found on processors made by Intel and by other companies, including AMD.
Another popular extension adds 64-bit capabilities to the 32-bit x86 processor. These extensions, which contain both new instructions and new registers, were initially developed by AMD as part of its AMD64 architecture, but were also implemented in Intel's newest Xeon processors with Extended Memory 64-bit Technology (Intel EM64T).
It's good that AMD and Intel, the two microprocessor giants, as well as smaller companies like VIA, use the same core instruction-set standard. This allows the companies to innovate and compete on implementation, while we developers and end users can be assured that compiled code will run on any x86-based system with the right instruction-set extensions.
As you probably know, there are many excellent native compilers available for x86 processors, and most of these compilers can handle most (or all) extension-set extensions targeting Linux, Unix, and Windows. Developers can choose a wide range of compilers to use, including the open-source GNU compiler collection, and outstanding offerings from PathScale, Portland Group, Intel, Sun and Microsoft.
Unfortunately, there are sometimes a few glitches. Intel's compilers, for example, don't always compile to run on non-Intel chips. But for the most part, all of those compilers target the x86 instructions, perform extension-set optimizations, and generate binaries that generally work fine on all x86 chips.
Of course, when you write an application, there's no way for your toolchain to know what type of runtime system you're targeting. So, by default, the compiler targets the widest possible installed base, by generating binaries for an x86 processor with few or no extensions. If you want to optimize your code to take advantage of specific processor hardware extensions—Ssuch as the SSE2 or SSE3 floating-point instructions or registers, or the 64-bit x86 extensions that AMD calls AMD64 and Intel calls Intel EM64T, you use compiler switches.
For example, the Intel 8.1 C/C++ compiler uses the flag -xN (for Linux) or -QxN (for Windows) to take advantage of the SSE2 extensions. For SSE3, the compiler switch is -xP (for Linux) and -QxP (for Windows). This instructs the compiler to use the new extensions and registers. However, code that uses those registers and instructions would crash and burn if run on a processor that doesn't have the extra bits of hardware needed to support those extensions.
So the optimizing compiler also adds a bit of runtime code that actually checks to see if the processor has the right extensions, and then gently fails the app if it runs on a non-supported processor. In the case of the Intel compiler, it fails with the message, "Fatal Error: This program is not built to run on the processor in your system."
So far, so good. But how does that little bit of runtime code see if the processor is compatible? It doesn't actually try executing the extensions. Instead, it uses the CPUID instruction to ask the processor to explain its specific capabilities.
Check the Badge
The CPUID (central processing unit identification) instruction lets operating systems and applications determine if they are compatible with the hardware platform, as well as choose the proper execution paths or runtime libraries to leverage specific processor features.
Depending on the input parameter specified in the EAX register, CPUID can return two different sets of information. If the EAX register contains a 0, CPUID stores the processor vendor string in the EBX, ECX, and EDX registers. If EAX contains 1, then CPUID puts a list of feature capability flags into those three registers.
The processor vendor string is easy to analyze, but isn't hugely valuable to most developers. If CPUID is run on an Intel processor, the string returned is "GenuineIntel." If it's an AMD processor, it's "AuthenticAMD." (I don't have a system with a VIA processor, so I can't check the string.) Normally, the processor vendor string isn't important except for trivia. Windows, for example, will tell you the manufacturer of the processor from the My Computer -> Properties dialog.
Far more important to an operating system and its applications—and in particular, apps optimized for specific processor extensions—are the feature flags returned by calling CPUID with EAX=1. This loads the EBX, ECX, and EDX registers with bits indicating the specific capabilities of the microprocessor, including which x86 extensions it supports. Intel and AMD use these bits in a consistent way.
For example, bit 23 in the EDX register indicates whether the processor supports the original 64-bit MMX instructions. Bit 25 indicates SSE and bit 26 is for SSE2. Bit 0 in the ECX register indicates support for the SSE3 instructions.
Many current Intel and AMD processor models (and future VIA processors expected to be released this year) support MMX, SSE, and SSE2, and return the proper bits from CPUID. The latest Intel Xeon processors, and revision E (or later) of the AMD Opteron processor, set the SSE3 bit to 1; for earlier processors, it's set to 0.
(Detailed information about CPUID is in the AMD64 Architecture Programmer's Manual, Volume 3. In the February 2005 edition of this manual, the CPUID instruction is covered beginning on page 117. These flags are documented in tables 3-4 and 3-5, beginning on page 123.
The expected behavior for an application compiled to use the SSE2 or SSE3 extensions is that the compiler would insert a library that can analyze processor capabilities. On application launch, that library would call CPUID with EAX containing a 1, and then check the appropriate bits to make sure the required extensions are supported. Only then would it allow execution to continue. That's the behavior for most compilers when using those types of optimizations.
You should know, by the way, that this isn't what the Intel compiler's little bit of runtime code does. With the -xN/-QxN and -xP/-QxP flags set, it checks the processor vendor string—and if it's not "GenuineIntel," it stops execution without even checking the feature flags. Ouch!
Fortunately, there are workarounds. There are other compiler switches that you can use to tell the Intel compiler to use hardware extensions without checking the processor vendor string. However, it's unclear if those other switches perform the same level of optimization.
But that's what you have to do if you want to optimize code for processor extensions using the Intel compiler, and you want your code to run on non-Intel hardware. Those switches are, for example, -axN/-QaxN for SSE2 and -axP/-QaxP for SSE3.
The bad news is that the -axN/-QaxN and axP/-QaxP tell the compiler to generate multiple code paths. The optimized SSE2 or SSE3 code paths are still vendor-checked; the difference is that there will be a generic (less optimized) fallback. The application will run—you won't get the dreaded "Fatal Error." But the best possible code path won't run on a non-Intel processor. Your app runs... but it's not fully optimized. Still, it's better than not running at all.
What Can You Do?
Currently, developers cannot create optimized applications using the Intel compilers that will run on non-Intel processors. The only way to achieve runtime portability is to disable optimizations that might cause the binaries to fail on non-Intel processors. This reduces the value of an expensive optimizing compiler.
How can this be addressed? Developers could request that Intel change the behavior of its compilers, and use the industry-standard feature flags, not the proprietary processor vendor string, to determine when a processor is compatible with specific compiler optimizations and instruction set instructions.
In the meantime, the best bet is to switch to a different family of compilers. As mentioned above, there are plenty of options available, from PathScale to Portland Group, from Microsoft to Sun, as well as open-source compilers from GNU. If you're trying to develop for an industry-standard architecture, you can't use tools that won't respect those standards.
Steve Westfield is a C/C++ programmer, consultant and video game addict who lives outside of Chicago.



[RIGHT][/RIGHT]

[/td]

[/td]

"
TLDR Intel in 2005 had slower CPU's but found that if their compiler (commonly used at the time) didn't allow certain instruction paths on "other" competing CPU hardware the got a speed boost and looked faster. Now it appears they are doing it again....
Posted on Reply
#14
Denver
This results in significant gains simply because Geekbench was intentionally using only scalar operations in some of the sub-benchmarks. ARM bias confirmed, in other words.
Posted on Reply
#15
R-T-B
evernessincePoorly worded, I meant per CPU architecture optimizations from the CPU vendor specifically like the GPU market.
Thank you for clarifying.
SteevoAhh yes, the are trying again 20 years later.

web.archive.org/web/20120105060810/http://developer.amd.com/documentation/articles/pages/4292005119.aspx

"
Your Processor, Your Compiler, and You: The Case of the Secret CPUID String
Home > Docs > Articles & Whitepapers
Tags:Processors, Processor Architecture, Compilers

[td]
The range of features and functions in an "industry standard" x86 processor can be bewildering. So, how do optimizing compilers know what to optimize for, and how do binaries understand their processor's capabilities? Steve Westfield investigates this curious mystery. And no, the butler didn't do it.



Steve Westfield


[RIGHT][td]
4/29/2005 [/RIGHT]

The x86 instruction set is an industry standard, and is found in chips like Intel's Pentium, Celeron and Xeon processors, as well as in AMD's Opteron, Athlon, Sempron, and Turion processors, and even in chips from other manufacturers, like VIA Technology's C3 processor family.
While the hardware specifications and interfaces of those x86-compatible chips vary, along with power consumption and performance characteristics, they all conform to the core x86 instruction-set standards. Many also offer extensions to that x86 architecture, and many of those extensions have been implemented by several vendors. This means binary portability. Compilers written for one x86 processor should create object code and binaries that run on any contemporary x86 processors with those same extensions. The use of standards provides economy of scale, gives customers choices, and fosters innovation on implementation of those standards.
There are many extensions to the x86 architecture, such as the original MMX multimedia extensions, which were then enhanced by SSE (Streaming SIMD Extensions), then SSE2 and, more recently, SSE3. Those are all found on processors made by Intel and by other companies, including AMD.
Another popular extension adds 64-bit capabilities to the 32-bit x86 processor. These extensions, which contain both new instructions and new registers, were initially developed by AMD as part of its AMD64 architecture, but were also implemented in Intel's newest Xeon processors with Extended Memory 64-bit Technology (Intel EM64T).
It's good that AMD and Intel, the two microprocessor giants, as well as smaller companies like VIA, use the same core instruction-set standard. This allows the companies to innovate and compete on implementation, while we developers and end users can be assured that compiled code will run on any x86-based system with the right instruction-set extensions.
As you probably know, there are many excellent native compilers available for x86 processors, and most of these compilers can handle most (or all) extension-set extensions targeting Linux, Unix, and Windows. Developers can choose a wide range of compilers to use, including the open-source GNU compiler collection, and outstanding offerings from PathScale, Portland Group, Intel, Sun and Microsoft.
Unfortunately, there are sometimes a few glitches. Intel's compilers, for example, don't always compile to run on non-Intel chips. But for the most part, all of those compilers target the x86 instructions, perform extension-set optimizations, and generate binaries that generally work fine on all x86 chips.
Of course, when you write an application, there's no way for your toolchain to know what type of runtime system you're targeting. So, by default, the compiler targets the widest possible installed base, by generating binaries for an x86 processor with few or no extensions. If you want to optimize your code to take advantage of specific processor hardware extensions—Ssuch as the SSE2 or SSE3 floating-point instructions or registers, or the 64-bit x86 extensions that AMD calls AMD64 and Intel calls Intel EM64T, you use compiler switches.
For example, the Intel 8.1 C/C++ compiler uses the flag -xN (for Linux) or -QxN (for Windows) to take advantage of the SSE2 extensions. For SSE3, the compiler switch is -xP (for Linux) and -QxP (for Windows). This instructs the compiler to use the new extensions and registers. However, code that uses those registers and instructions would crash and burn if run on a processor that doesn't have the extra bits of hardware needed to support those extensions.
So the optimizing compiler also adds a bit of runtime code that actually checks to see if the processor has the right extensions, and then gently fails the app if it runs on a non-supported processor. In the case of the Intel compiler, it fails with the message, "Fatal Error: This program is not built to run on the processor in your system."
So far, so good. But how does that little bit of runtime code see if the processor is compatible? It doesn't actually try executing the extensions. Instead, it uses the CPUID instruction to ask the processor to explain its specific capabilities.
Check the Badge
The CPUID (central processing unit identification) instruction lets operating systems and applications determine if they are compatible with the hardware platform, as well as choose the proper execution paths or runtime libraries to leverage specific processor features.
Depending on the input parameter specified in the EAX register, CPUID can return two different sets of information. If the EAX register contains a 0, CPUID stores the processor vendor string in the EBX, ECX, and EDX registers. If EAX contains 1, then CPUID puts a list of feature capability flags into those three registers.
The processor vendor string is easy to analyze, but isn't hugely valuable to most developers. If CPUID is run on an Intel processor, the string returned is "GenuineIntel." If it's an AMD processor, it's "AuthenticAMD." (I don't have a system with a VIA processor, so I can't check the string.) Normally, the processor vendor string isn't important except for trivia. Windows, for example, will tell you the manufacturer of the processor from the My Computer -> Properties dialog.
Far more important to an operating system and its applications—and in particular, apps optimized for specific processor extensions—are the feature flags returned by calling CPUID with EAX=1. This loads the EBX, ECX, and EDX registers with bits indicating the specific capabilities of the microprocessor, including which x86 extensions it supports. Intel and AMD use these bits in a consistent way.
For example, bit 23 in the EDX register indicates whether the processor supports the original 64-bit MMX instructions. Bit 25 indicates SSE and bit 26 is for SSE2. Bit 0 in the ECX register indicates support for the SSE3 instructions.
Many current Intel and AMD processor models (and future VIA processors expected to be released this year) support MMX, SSE, and SSE2, and return the proper bits from CPUID. The latest Intel Xeon processors, and revision E (or later) of the AMD Opteron processor, set the SSE3 bit to 1; for earlier processors, it's set to 0.
(Detailed information about CPUID is in the AMD64 Architecture Programmer's Manual, Volume 3. In the February 2005 edition of this manual, the CPUID instruction is covered beginning on page 117. These flags are documented in tables 3-4 and 3-5, beginning on page 123.
The expected behavior for an application compiled to use the SSE2 or SSE3 extensions is that the compiler would insert a library that can analyze processor capabilities. On application launch, that library would call CPUID with EAX containing a 1, and then check the appropriate bits to make sure the required extensions are supported. Only then would it allow execution to continue. That's the behavior for most compilers when using those types of optimizations.
You should know, by the way, that this isn't what the Intel compiler's little bit of runtime code does. With the -xN/-QxN and -xP/-QxP flags set, it checks the processor vendor string—and if it's not "GenuineIntel," it stops execution without even checking the feature flags. Ouch!
Fortunately, there are workarounds. There are other compiler switches that you can use to tell the Intel compiler to use hardware extensions without checking the processor vendor string. However, it's unclear if those other switches perform the same level of optimization.
But that's what you have to do if you want to optimize code for processor extensions using the Intel compiler, and you want your code to run on non-Intel hardware. Those switches are, for example, -axN/-QaxN for SSE2 and -axP/-QaxP for SSE3.
The bad news is that the -axN/-QaxN and axP/-QaxP tell the compiler to generate multiple code paths. The optimized SSE2 or SSE3 code paths are still vendor-checked; the difference is that there will be a generic (less optimized) fallback. The application will run—you won't get the dreaded "Fatal Error." But the best possible code path won't run on a non-Intel processor. Your app runs... but it's not fully optimized. Still, it's better than not running at all.
What Can You Do?
Currently, developers cannot create optimized applications using the Intel compilers that will run on non-Intel processors. The only way to achieve runtime portability is to disable optimizations that might cause the binaries to fail on non-Intel processors. This reduces the value of an expensive optimizing compiler.
How can this be addressed? Developers could request that Intel change the behavior of its compilers, and use the industry-standard feature flags, not the proprietary processor vendor string, to determine when a processor is compatible with specific compiler optimizations and instruction set instructions.
In the meantime, the best bet is to switch to a different family of compilers. As mentioned above, there are plenty of options available, from PathScale to Portland Group, from Microsoft to Sun, as well as open-source compilers from GNU. If you're trying to develop for an industry-standard architecture, you can't use tools that won't respect those standards.
Steve Westfield is a C/C++ programmer, consultant and video game addict who lives outside of Chicago.



[RIGHT][/RIGHT]

[/td]

[/td]

"
TLDR Intel in 2005 had slower CPU's but found that if their compiler (commonly used at the time) didn't allow certain instruction paths on "other" competing CPU hardware the got a speed boost and looked faster. Now it appears they are doing it again....
This is not at all the same thing as that, though if it doesn't run on AMD CPU's it is a bit questionable. But it's dealing with prebuilt binaries either way, apples and oranges.
DenverARM bias confirmed, in other words.
ARM also has vector extensions, just FYI. NEON being the most prevalent IIRC.
Posted on Reply
#16
_roman_
i read that topic on my android tablet without login and without ignore list. i am surprised how few really know what a cpu is or what software does.

gnu gentoo linux and the amd64 handbook and the gcc manual teaches a few things.
we see that BOT makes heavy use of vector instructions like SSE2 and AVX2.
that topic just verifies what i write quite often
  • p*ssmark or benchmarks are not valid (when geekbench is a fail than pissmark will be also a fail in this regards. i do not care that i thought passmark is usebenchmark)
  • windows software is hardly optimised (w11 pro runs on intel 3rd generation ivybridge cpus. a indicatior that cpu instructions are not used)
  • higher instructions are hardly used in windows 11 pro (w10 etc I consider eol, regardless of special licenses)
  • look up certain fps numbers / benchmark numbers / seconds used for certain software in certain operating systems when you are choosing hardware. e.g newbie strike 2 players will look up for newbie strike 2 benchmarks.
  • my code will not execute on most / some intel processors.
  • when avx512 does not exists in intel processors software can hardly be proper optimised. avx512 will be hardly be in use because most intel processors can not do it. intel dodged it also by altering their avx512 insturciton set to a weaker worse newer renamed avx512 "vector" instruction set.
when a cpu has cpu flags (linux terminology see /proc/cpuinfo) or certain instructions than the code can be run. taht is not an intel thing. intel does usually support less instructions = cpu flags as amd processors.

that topic should be pinned and pulled out when people think benchmarks are worth it or do not understand instructions in windows 11 pro.

note: should there be errors inside I want to ask you to read gcc first or the over 500 pages ore more several pdf files from intel or amd. these are the only valid references. and things sometimes change silently without a lot of news on tech pages.

as i suspected year 2010 instrtuctins are not used. and year 2013 instructions. well i assume the mediocre low quality wikipedia has this correct
see en.wikipedia.org/wiki/SSE2

note: small 4 digit numbers are the year the simd instruction was introduced. xop - amd dropped, therefore amd processors are not fully downwards compatible. amd bulldozer code will not execute on zen4 and zen5.
MMX (1996)3DNow! (1998)SSE (1999)SSE2 (2001)SSE3 (2004)SSSE3 (2006)SSE4 (2006)SSE5 (2007)AVX (2008)F16C (2009)XOP (2009)FMA (FMA4: 2011, FMA3: 2012)AVX2 (2013)AVX-512 (2015)AMX (2022)AVX10 (2023)
sudothelinuxwizardWhy can't they bring this to Linux?
why? just why?

a dissassembler is not allowed in my region. what most likely intel does

i compile since 2006 most binaries in my gnu gentoo linux. why should i need it with the linux kernel?

when you download a binary, you download crap. with all the issues, hidden backdoors, optimised for i686 or worse, etc. just compile it from source.
those games see the not being allowed to use dissassemblers.

skype was a binary in the past / steam was a binary. else i can hardly remember anything else which was a binary. yes teamspeak 3 around 15 years ago.

most gentoo discussions lead to people claiming, those optimisations may improve performance around -5 to +5%.

-- afaik arm9a which most smartphone arm chips do not have introduce similar avx512 cpu instructions. they were in my point of view added because some arm smartphone chips are used in desktop like computers. arm renamed the instruction in a different way and changed it like intel a bit.
JohHBecause on linux YOU can compile most things and turn on autovectorization yourself.
gcc manual or see /etc/porage/make.conf previous /etc/make.conf - the march line of gcc.

and also the gcc changes which i was not aware of, suse and someone else introduced some bigger cpu instruction sets which include certain processor generations.
Posted on Reply
#17
Wirko
Today I learned, with a lot of disappointment, that it's not the CPU that does automatic vectorisation at runtime. It's the compiler (or at best, JIT compiler) at compile time. All the magic is gone now.
Posted on Reply
#18
Tyler-98-W68
Raise your hand if you remember quake.exe vs quack.exe
Posted on Reply
#19
Visible Noise
SteevoAhh yes, the are trying again 20 years later.
Intel has used LLVM for the last 5 years.

Do you understand what that means?

Trivia time: Until Intel switched to LLVM, AMD used the Intel compiler for their own driver development because it produced better output even on AMD CPUs. Weird huh?
Posted on Reply
#20
R-T-B
Tyler-98-W68Raise your hand if you remember quake.exe vs quack.exe
Raise your hand if you are trying to make this about unrelated GPU issues.
Visible NoiseTrivia time: Until Intel switched to LLVM, AMD used the Intel compiler for their own driver development because it produced better output even on AMD CPUs. Weird huh?
Yeah also Intel Compiler in the form he's referencing has been dead for like, a decade. Seriously let it sleep.
Posted on Reply
#21
Tyler-98-W68
It wasn't about unrelated gpu issues, this simply reminded me of that debacle many years ago. Likely before a lot of people here were even out of diapers
Posted on Reply
#22
Nhonho
I think Intel will no longer develop a compiler or code optimizer that only benefits its own CPUs and deliberately degrades the performance of its competitors' x86 CPUs makers. If it does that, it will destroy the advisory and development support institution for the x86-64 architecture that it established with AMD.

In addition to losing a valuable collaboration from AMD, it will increasingly give to ARM and RISC-V CPU makers a greater chance to gain more market share.
Posted on Reply
#23
R-T-B
Tyler-98-W68It wasn't about unrelated gpu issues, this simply reminded me of that debacle many years ago. Likely before a lot of people here were even out of diapers
I remember it too but really fail to see the link.
Posted on Reply
#25
Denver
R-T-BThank you for clarifying.


This is not at all the same thing as that, though if it doesn't run on AMD CPU's it is a bit questionable. But it's dealing with prebuilt binaries either way, apples and oranges.


ARM also has vector extensions, just FYI. NEON being the most prevalent IIRC.
Nope. Not even server ARM CPUs have vector units as wide as x86.
Posted on Reply
Add your own comment
Nov 14th, 2026 09:05 CST change timezone

New Forum Posts

Popular Reviews

TPU on YouTube

Controversial News Posts