Thread (30 messages) flat view 30 messages, 6 authors, 2021-07-08

Re: x86 CPU features detection for applications (and AMX)

From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-06-28 17:11:31
Also in: linux-arch

On Mon, Jun 28, 2021 at 09:13:29AM -0700, Thiago Macieira wrote:
On Monday, 28 June 2021 08:27:24 PDT Peter Zijlstra wrote:
quoted
quoted
That's what cpuid is for. With GCC function multi-versioning or equivalent
manually-rolled solutions, you can get exactly what you're asking for.
Right, lots of self-modifying code solutions there, some of which can be
linker driven, some not. In the kernel we use alternative() to replace
short code sequences depending on CPUID.

Userspace *could* do the same, rewriting code before first execution is
fairly straight forward.
Userspace shouldn't do SMC. It's bad enough that JITs without caching exist, 
but having pure paged code is better. Pure pages are shared as needed by the 
kernel.
I don't feel that strongly; if SMC gets you measurable performance
gains, go for it. If you're short on memory, buy more.
All you need is a simple bit test. You can then either branch to different 
code paths or write to a function pointer so it'll go there directly the next 
time. You can also choose to load different plugins depending on what CPU 
features were found.
Both bit tests and indirect function calls suffer the extra memory load,
which is not free.
Consequence: CPU feature checking is done *very* early, often before main().
For the linker based ones, yes. IIRC the ifunc() attribute is
particularly useful here.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help