HN Simulatornew | past | comments | lists | submit | gnufx's commentslogin

Somewhat related, tunneling was once taken rather seriously in Liverpool: http://www.williamsontunnels.co.uk/ https://en.wikipedia.org/wiki/Williamson_Tunnels


Actually, one caveat is that GCC's optimization info can be rather inscrutable because it's in terms of compiler internal nomenclature. That's a definite area for improvement (or compiling some sort of key to it).

Indeed, GCC optimizes well. Last time I ran a set of Fortran benchmarks, the geometric mean for them was competitive with other compilers on multiple architectures, and some of the benchmarks could have been sped up considerably with specific compiler options or by re-writing a function sacrificing numerical equivalence, which the Intel compiler seemed to do itself.


I am more of an applied mathematician and a complete ignoramus in compiler technology. So I cannot emphasize enough the surprise ... wait I can actually understand what this compiler is saying and this is not clang, this is not supposed to happen on templates heavy code.

This is by no means a humble brag. Kudos to the GCC engineers. Competition with Clang certainly helped.


Vectorization doesn't imply SIMD, of course. The first vectorizing compilers were for CDC(?) systems long before SIMD. Today you have SVE in Arm, for instance, distinct from SIMD Neon.

Anyway, I'm familiar with optimizing numeric loops in C (and Fortran) rather than Rust. I've rarely seen simply using SIMD intrinsics work where GCC auto-vectorization didn't with the same semantics (like numeric equivalence in reductions). In most cases you can get away with -fassociative-math, of course, and not sacrifice peak performance, e.g. BLIS passes its extensive tests with it on, but you should check, of course. (GCC also documents the option as necessary to get Arm (Neon?) to vectorize at all.) Most of the time when people tell you how much better the Itel compiler is, it's because it incorrectly defaults to something like -funsafe-math.

Regardless, GCC (like other compilers) will tell you about vectorization with the -fopt-info- options without examining assembler, and you can have some surprises. For instance, you use unsigned in C for loop indices that you know are positive, and see failed vectorization due to "loop not affine", because of C's overflow semantics; use signed types instead.

There's another reason for using properly-optimized numerical libraries (typically BLAS), is that, at least for level three (matrix-matrix) operations. Even if you get the blocking right for the memory hierarchy, you typically won't get peak performance just with vectorization because tricky preloading is needed for the inner loops.


> Vectorization doesn't imply SIMD, of course. The first vectorizing compilers were for CDC(?) systems long before SIMD. Today you have SVE in Arm, for instance, distinct from SIMD Neon.

I wouldn't say "long before" since SIMD machines like ILLIAC IV came out with the IVTRAN compiler at the same time as the ASC/CDC. SVE is also considered SIMD https://support.arm.com/documentation/102340/0100/Introducin...


You're right. In rust, IMHO, the problem is mostly solved by using system C libraries rather than trying to force Rust into something that looks like the optimized C/Fortran we've had for decades. In almost all cases, it's quite possible and quite painless to do it that way. For example, by just making it a matrix operation and letting the system wrapper library call out to something blas-like.


That's not dimensionally correct! Double-decker bus is a unit of length, and footy pitch is too prosaic to be an approved unit: https://www.theregister.com/bootnotes/2026/05/31/the-reg-onl...


It's a shame it's not about area then at least we could agree on Wales as a unit.


It's not too prosaic, it's just too imprecise. There is no standard size, and some regulations even allow a range of sizes.

https://en.wikipedia.org/wiki/Football_pitch


I don't think that's relevant for Register units. Clearly there's a standard brontosaurus somewhere, for instance, otherwise how could we have the conversion table? However, sorry, I was wrong about the football pitch, at least as a unit of area, equal to 194.89nWa per the original article: https://www.theregister.com/offbeat/2007/08/24/so-whats-the-...


You're not wrong! Personally, I like to use penguin as a measure of height. Everybody knows how big a penguin is, right? It's pretty standard.


Not the first time I've said this: the 1970s-era GEC OS4000[1] was really fast, like compared with everyone's VAX 780s, and we users benefited in the '80s. I don't know whether or not it was strictly a microkernel, but at least the moral equivalent; the nucleus was originally in (hard/firm)ware, but it was later emulated on different hardware. (I guess, but don't know, that "4000" and "nucleus" reflected Brinch Hansen's RC 4000 system -- which seemed really steam-driven in the '80s).

1. https://en.wikipedia.org/wiki/OS4000


Guidelines | FAQ | Lists | API | Security | DMCA | Apply to YC | Contact

Search: