@amonakov@mastodon.gamedev.place avatar

amonakov

@amonakov@mastodon.gamedev.place

This profile is from a federated server and may be incomplete. Browse more on the original instance.

amonakov, to random
@amonakov@mastodon.gamedev.place avatar

PSA for people writing Arm SIMD code in C or C++: unlike x86, where you can cast any pointer to __m128* and be able to dereference it regardless of the dynamic type of the pointed-to memory, that is not the case on Arm: Neon types do not carry the may_alias attribute and standard type compatibility rules apply. Compare the differences between 'f' and 'g' on the first pic, and Arm codegen on the second pic.

image/png

pervognsen, to random
@pervognsen@mastodon.social avatar

Digging through old stuff, here's a fairly extreme example of branch predictor training effects in a benchmark of Robin Hood linear probing vs conventional linear probing. Look at the branch misses for 1 vs 1000 outer loop iterations for RH (and the impact on wall clock time): https://gist.github.com/pervognsen/e818251d52f725db7c67e562577a12f6

amonakov,
@amonakov@mastodon.gamedev.place avatar

@pervognsen Is that Rust's built-in perf_event interface in action for {branch,cache} miss counts?

amonakov, to random
@amonakov@mastodon.gamedev.place avatar

In 'less', you can interactively add command-line arguments without leaving the pager by pressing '-': you can press '-S' to flip wrapping/chopping of long lines, and '-j11' to spawn 10 wor^W^W^W see extra ten lines of context above the match when searching!

vegard, to random
@vegard@mastodon.social avatar

Are these all the special sections that run code on program init/exit? Did I miss any?

.section .preinit_array; .quad fun
.section .init, "ax"; callq fun
.section .init_array; .quad fun
.section .ctors, "aw"; .quad fun
.section .dtors, "aw"; .quad fun
.section .fini_array; .quad fun
.section .fini, "ax"; callq fun

amonakov,
@amonakov@mastodon.gamedev.place avatar

@vegard you absolutely did, because you're not asking the right question. The right question is, what makes code from those sections run at startup?

forrestthewoods, to random
@forrestthewoods@mastodon.gamedev.place avatar

One of the arguments against immediate mode UI is that it will drain your battery. I think that's bollocks!

Here is my "proof of life" test to measure power draw. Preliminary result is that Dear ImGui consumes less power than YouTube. That feels like a fairbar to compare against

I'll of course take some much more rigorous measurements and tests over longer periods of time. This is just the first time I have actual data.

amonakov,
@amonakov@mastodon.gamedev.place avatar

@wolfpld @forrestthewoods @castano I am well aware of the joke that goes like "to learn how to do <X> on Linux, loudly claim 'Linux cannot do <X>! WTF!' and wait to be corrected", and I am not sure what you were looking for when both perf and turbostat can work with RAPL sensors, but I'm curious how you solved it in the end.

amonakov, to random
@amonakov@mastodon.gamedev.place avatar

shower thought re. rgb 565 vs. theoretical 555|1 (common least significant bit for each component): it introduces higher "distortion" for darker colors (i.e. the closest encodable to dark purple { 1, 0, 1 }/64 is dark grey { 1, 1, 1 }/64), but our vision loses color sensitivity in low-light conditions anyway, so that probably would have been a better fit

amonakov,
@amonakov@mastodon.gamedev.place avatar

Oh, it's not theoretical at all: at least Sharp X68000 and Neo Geo employed it. Thanks, Wikipedia!

regehr, to random
@regehr@mastodon.social avatar

this has to be one of my all-time favorite bug-finding techniques: in your widely deployed software, at very low probability, you put a new heap allocation next to a protected page. performance is unaffected and the bugs that you find are those that actually matter to users in practice.

https://arxiv.org/pdf/2311.09394v2.pdf

amonakov,
@amonakov@mastodon.gamedev.place avatar

@regehr how do you rate this verbatim quote from the paper:

GWP-ASan is neither GWP nor ASan.

castano, to random
@castano@mastodon.gamedev.place avatar

Apparently PVR has a Vulkan layer that enables support gpu timestamps. Has anybody had any success enabling it?

https://developer.imaginationtech.com/downloads/latest-release-notes/#pvrcarbon

amonakov,
@amonakov@mastodon.gamedev.place avatar

@castano What. Why is it a layer. Is it because it adds overhead to everything.

amonakov, to random
@amonakov@mastodon.gamedev.place avatar

We can
typedef float vec4 attribute((ext_vector_type(4)));

But what if we could

typedef void lane_fn(...);
typedef lane_fn vec_fn attribute((ext_vector_size(4)));

amonakov, to random
@amonakov@mastodon.gamedev.place avatar

With xz backdoor opening an RCE pathway, have you thought "hey, it would be nice if the sshd sub-process doing the key/cert parsing would not be able to fork/exec anything?" Ideally the only thing it should be able to do is read/write to already-open fds and die a peaceful death, right?

Now, this particular backdoor was embedded deep enough that it might be able to workaround such privilege separation, but in general dropping privs for risky computations is an important part of defence-in-depth

amonakov,
@amonakov@mastodon.gamedev.place avatar

And that reminds me of another scenario where we parse untrusted certificates: WPA2-Enterprise authentication. Venerable wpa_supplicant does have some privilege-separation code (which I believe is rarely enabled on Linux), but what iwd does is completely incomprehensible to me: they pass certs from the access point straight to the kernel keyring subsystem, using the kernel as a fancy SSL library. Any weakness in the involved kernel code is thus open for exploitation by rogue access points.

demofox, to random
@demofox@mastodon.gamedev.place avatar
amonakov,
@amonakov@mastodon.gamedev.place avatar

@demofox the adversity of the effect will fall more on the waterer than the wateree

amonakov, to random
@amonakov@mastodon.gamedev.place avatar

Inside of you there are two reviewers

fclc, to hpc
@fclc@mast.hpc.social avatar

Ehhhh the newest big GPU has arrived!

And you can have two of them connected to Grace!

#B100 and #GB200 for the GPU itself and the #grace +2X GPU version

#hpc #GTC

amonakov,
@amonakov@mastodon.gamedev.place avatar

@ProjectPhysX @fclc @fay59
that's not for real, right? it does not follow IEEE conventions (Inf should be next to 2.0, and 2.0 should be 1.5), and surely for fp4 you want a two-bit exponent so you have only one NaN of each sign:
0000 0.0
0001 0.5
0010 1.0
0011 1.5
0100 2.0
0101 3.0
0110 +Inf
0111 +NaN

castano, to random
@castano@mastodon.gamedev.place avatar

I don't get why IHVs hide their tools within layers of security and identity validation steps, that then don't work as intended and prevent developers from using those tools. What are they trying to protect?
On the other hand, AMD's approach is so refreshing.

amonakov,
@amonakov@mastodon.gamedev.place avatar

@castano So much this, but which facet of "AMD's approach" are you praising? I'm mostly observing from the perspective of compute workloads on Linux, where AMD consumers are too often left to their own devices.

demofox, to random
@demofox@mastodon.gamedev.place avatar

Anyone out there do IIR filters on images? In real time, or at all?

amonakov, (edited )
@amonakov@mastodon.gamedev.place avatar

@demofox Yes! Young and Van Vliet described a fast approximation for Gaussian filters via IIR. It is used in RawTherapee and uncovered a very peculiar bug in GCC!

(Young – Van Vliet gives separate IIRs for each dimension, so at least one of them is very SIMD-friendly)

amonakov, to random
@amonakov@mastodon.gamedev.place avatar

My kingdom for a distro with smooth cross-installation (preparing a rootfs for a foreign architecture without qemu).

amonakov,
@amonakov@mastodon.gamedev.place avatar

@lanodan @wolf480pl good to know, thanks!

shafik, to programming
@shafik@hachyderm.io avatar

'long long long' is too long for GCC

is such a good ol'diagnostic

amonakov,
@amonakov@mastodon.gamedev.place avatar

@shafik and yet sometimes a quad-long is okay with g++ if you twist its arm in exactly the right way:

retr0id, to random
@retr0id@retr0.id avatar

SIZEOF_CHAR (sizeof 'A')

amonakov,
@amonakov@mastodon.gamedev.place avatar
simontatham, to random
@simontatham@hachyderm.io avatar

I wish 'git push' had a less hardcore mode for -n.

It connects to the server using the push protocol, and stops short of actually uploading anything. So it uses the push URI instead of the pull one, if they're different.

This means it checks that the push URI actually works. Great!

But if the push URI needs awkward authentication (e.g. SSH key on a token) then I'd also like a mode where it uses the pull URI, so I can easily check 'is this command line asking for what I meant to ask for?'

amonakov,
@amonakov@mastodon.gamedev.place avatar

@simontatham Here's a possible alternative. At work we have a repo created with 'git clone --mirror' from upstream. When I clone that repo for development, 'git push -n' from my worktree is a local operation, and I do 'git push upstream my-branch:remote-branch' when everything looks ok (after setting up the 'upstream' remote).

(if the upstream updated in the meantime, I have to 'git fetch' in the mirror repo, and 'git pull --rebase' in my tree)

amonakov,
@amonakov@mastodon.gamedev.place avatar

@simontatham there's also 'git worktree add' if your git is not too old.

mjp, to random
@mjp@mastodon.gamedev.place avatar

My very brief summary of Apple's new "dynamic caching" as described in this video: https://developer.apple.com/videos/play/tech-talks/111375

There's a shared pool of on-chip memory on the shader core that can be dynamically split up to serve as register file, tile cache, shared memory, general buffer L1, or stack. Since it's dynamic even within the lifetime of a thread/wave, the registers can be allocated dynamically as the program needs them rather than needing registers to be statically-allocated up-front.

amonakov,
@amonakov@mastodon.gamedev.place avatar

@aras @pervognsen @mjp for OoO CPU you mainly look at critical path length and throughput limits without regards to specific instruction schedule, which is way easier compared to in-order. It's not like you can add up instruction latencies for a pipelined in-order core to get a good estimate. @rygorous tweeted about this too iirc.

(I don't suppose there's an implied ";)" after your "?")

mbr, to random
@mbr@mastodon.gamedev.place avatar

Does anybody know what the current usable state-of-the-art method of converting an unsigned integer multiply by constant is? I'd imagine it's not still a variant Bernstein.

amonakov,
@amonakov@mastodon.gamedev.place avatar

@mbr @fatlimey ”expanding” or ”synthesizing” multiplication via shifts/adds might be clearer :)

  • All
  • Subscribed
  • Moderated
  • Favorites
  • Leos
  • vwfavf
  • magazineikmin
  • thenastyranch
  • Youngstown
  • everett
  • rosin
  • slotface
  • ngwrru68w68
  • InstantRegret
  • PowerRangers
  • kavyap
  • tsrsr
  • DreamBathrooms
  • normalnudes
  • hgfsjryuu7
  • mdbf
  • cisconetworking
  • osvaldo12
  • khanakhh
  • Durango
  • GTA5RPClips
  • tacticalgear
  • ethstaker
  • tester
  • cubers
  • modclub
  • anitta
  • All magazines