If you don’t have the factories, you lose the expertiseMainstream economists have been advocating for the marvellous effects of global trade for decades. Who needs these factory jobs anyway? We’ll be designing the robots and the nuclear rockets. Except that, no. It does not work like that. If you have the factories, sooner or later, you get the designers. If you don’t have the … Continue reading If you don’t have the factories, you lose the expertiseDaniel Lemire's blogC++ Blogs, the last 7 days
Thursday, September 24, 2026
If you don’t have the factories, you lose the expertiseMainstream economists have been advocating for the marvellous effects of global trade for decades. Who needs these factory jobs anyway? We’ll be designing the robots and the nuclear rockets. Except that, no. It does not work like that. If you have the factories, sooner or later, you get the designers. If you don’t have the … Continue reading If you don’t have the factories, you lose the expertiseDaniel Lemire's blog
No, really, you need to pass all unhandled messages to DefWindowProc, part 2Another example to add to the list. The post No, really, you need to pass all unhandled messages to DefWindowProc, part 2 appeared first on The Old New Thing .The Old New Thing
VTK as a Metrology Tool for 3D ReconstructionIn the 3D reconstruction domain, an important step is measuring the quality of generated models. Often, this step is done subjectively and can lead to poor estimates and regressions. A better approach is to use metrology tools to compare reconstructions against a ground truth using objective metrics.. We present a pipeline leveraging VTK to perform […]Kitware Inc
Qt WebEngine Separate ReleaseWith the upcoming Qt 6.12.0 release, there will be no Qt WebEngine or Qt Pdf 6.12.0 binaries, and no webengine backend for Qt WebViewQt Blog
About alignment, struct layout and the cache...Meeting C++ blog
Remembering Johannes DoerfertIt is with great sadness that we share the news of the passing of Johannes Doerfert, on September 17, 2026, at the age of 36, after a battle with cancer. Johannes was one of the most prolific and respected contributors to the LLVM compiler project, and his loss will be deeply felt. Johannes was born on November 5, 1989. He earned his Ph.D. in computer science from Saarland University in Saarbrücken, Germany, in 2018, where his research focused on applying polyhedral compiler technologies to low-level code. He had been an active LLVM contributor since 2014, working in the compiler design lab of Prof. Sebastian Hack, and became a core developer on the Polly polyhedral-optimization project as early as 2012. Over the following decade, Johannes built a career at the intersection of compiler research and high-performance computing, most recently as a researcher focused on OpenMP, LLVM, and parallel program optimization. Contributions to LLVM Johannes’s worked on many parts of the LLVM Project, and these are just a few of his contributions: The Attributor framework. Johannes designed and championed the Attributor, LLVM’s versatile inter-procedural fixpoint iteration framework for deducing and propagating function and argument attributes across a program. He introduced it to the community at the 2019 LLVM Developers’ Meeting, and it has since become an important piece of LLVM’s interprocedural optimization infrastructure. OpenMP and GPU offloading. Johannes became LLVM’s code owner for OpenMP target offloading in 2021, leading the compiler and runtime support that lets OpenMP programs run efficiently on GPUs across NVIDIA, AMD, and Intel hardware. His work spanned the OpenMP runtime, just-in-time compilation and link-time optimization for target offloading, and techniques for near-zero-overhead GPU execution. Polly and polyhedral optimization. Early in his career, Johannes was a core developer of Polly, LLVM’s polyhedral loop optimization infrastructure, and published research on polyhedral scheduling in the presence of reductions and on optimistic loop optimization. He authored or co-authored dozens of papers on compiler optimization, automatic differentiation of GPU kernels, performance portability, and OpenMP. Community Building Johannes helped organize EuroLLVM 2017 in Saarbrücken, Germany, the LLVM-HPC workshop at CGO from 2017 onward, and the LLVM events at ISC starting in 2019, helping join together the LLVM and HPC communities. He was frequently in attendance at the LLVM Developers’ Meeting Newcomer and Community.o sessions. He welcomed newcomers to the LLVM Developers’ Meetings and shared his advice and wisdom on how to get more involved in the project. Johannes also held LLVM office hours on a weekly basis, where he answered questions on OpenMP, LLVM-IR, interprocedural optimizations, Attributor, workshops, research, and more. Mentoring the Next Generation Johannes was a Google Summer of Code mentor for LLVM for several years and helped student contributors on various projects. Here are just a few: 2016 Polly as an Analysis Pass in LLVM 2019 Improve (function) attribute inference (with Brian Homerding) Improve (function) attribute inference - 2 (with Brian Homerding) Generation of Annotated Sources (with Brian Homerding) 2020 Improve Parallelism-Aware Analyses and Optimizations (with Jon Chesterfield) Advanced Heuristics for Ordering Compiler Optimization Passes (with EJ Park and Giorgis Georgakoudis) Improve inter-procedural analyses and optimizations (with Brian Homerding) Advanced Heuristics for Ordering Compiler Optimization Passes - 2 (with EJ Park and Giorgis Georgakoudis) Latency Hiding for Host to Device Memory Transfers (with Jon Chesterfield) Improve inter-procedural analyses and optimizations - 2 (with Brian Homerding) Deduce attributes for non-exact functions (with Brian Homerding) 2021 Learning Loop Transformation Heuristics (with Mircea Trofin) Integrate custom derivatives of Numerical Computing routines like BLAS and Eigen into Enzyme (with William Moses and Vassil Vassilev) Improving OpenMP code generation with prediction of runtime parameters (with Jon Chesterfield) Integrate Enzyme into Rust to Provide High-performance Differentiation in Rust (with William Moses) Improve inter-procedural analyses and optimizations (with Jon Chesterfield) Use official isl C++ bindings for polly (with Michael Kruse) Integrating Enzyme into Rust (with William Moses) 2022 Non-Determinacy based optimizations in Parallel Programs (with William Moses) Learning loop transformation policy and its effect on RISC-V (with Mircea Trofin) 2023 Machine Learning Guided Ordering of Compiler Optimization Passes (with Tarindu Jayatilaka and Mircea Trofin) 2024 The 1001 Thresholds in LLVM (with Jan Hückelheim and William Moses) GPU Libc Benchmarking (with Joseph Huber) Statistical Analysis of LLVM-IR Compilation (with Aiden Grossman) 2025 Improve Rust-Enzyme Reliability and Compile Times (with Manuel Drehwald and Kevin Sala) LLVM Compiler Remarks Visualization Tool for Offloading (with Jose M Monsalve Diaz and Kevin Sala) A Decade at the Podium Besides the countless code contributions, mentorship, and community building, Johannes was a constant presence at US LLVM Developers’ Meetings and EuroLLVM. He spoke at 11 meetings across 11 years (2015–2024) , for at least 26 speaking sessions and even more that he helped author. 2015 — US DevMtg (San Jose) Input Space Splitting for OpenCL Tutorial: Polly - Optimistic Loop Nest Optimizations with Schedule Trees (with Tobias Grosser) 2016 — EuroLLVM (Barcelona) Analyzing and Optimizing your Loops with Polly (with Tobias Grosser) BoF: Polly - Loop Optimization Infrastructure (with Tobias Grosser and Zino Benaissa) 2017 — US DevMtg (San Jose) BoF: Thoughts and State for Representing Parallelism with Minimal IR Extensions in LLVM (with Xinmin Tian, Hal Finkel, Tb Schardl and Vikram Adve) Polyhedral Value & Memory Analysis 2017 — EuroLLVM (Saarbrücken) Co-organizer 2018 — US DevMtg (San Jose) Optimizing Indirections, using abstractions without remorse BoF: Ideal versus Reality: Optimal Parallelism and Offloading Support in LLVM (with Xinmin Tian, Hal Finkel, TB Schardl, and Vikram Adve) 2019 — EuroLLVM (Brussels) Compiler Optimizations for (OpenMP) Target Offloading to GPUs BoF: IPO — Where are we, where do we want to go? (with Kit Barton) 2019 — US DevMtg (San Jose) The Attributor: A Versatile Inter-procedural Fixpoint Iteration Framework Tutorial: The Attributor: A Versatile Inter-procedural Fixpoint Iteration Framework Tutorial: An overview of LLVM Poster: Attributor, a Framework for Interprocedural Information Deduction (with Hideto Ueno and Stefan Stipanovic) 2020 — US DevMtg (virtual) The Present and Future of Interprocedural Optimization in LLVM (with Brian Homerding, Stefanos Baziotis, Stefan Stipanovic, Hideto Ueno, Kuter Dinel, Shinji Okumura, Luofan Chen) (OpenMP) Parallelism-Aware Optimizations (with S. Stipanovic; H. Mosquera; J. Chesterfield; G. Georgakoudis; J. Huber) Tutorial: A Deep Dive into the Interprocedural Optimization Infrastructure (with B. Homerding; S. Baziotis; S. Stipanovic; H. Ueno; K. Dinel; S. Okumura; L. Chen) 2021 — US DevMtg (virtual) Panel: Machine Learning Guided Optimizations in LLVM Optimizing OpenMP GPU Execution in LLVM (with Giorgis Georgakoudis and Joseph Huber) 2022 — US DevMtg (San Jose) Panel: Machine Learning Guided Optimizations (MLGO) in LLVM Panel: High-level IRs for a C/C++ Optimizing Compiler CUDA-OMP — Or, Breaking the Vendor Lock (with Joseph Huber) Thoughts on GPUs as First-Class Citizens 2023 — EuroLLVM (Glasgow) How to run the LLVM-Test Suite on GPUs and what you’ll find OpenMP as GPU Kernel Language 2024 — US DevMtg (Santa Clara) (Offload) ASAN via Software Managed Virtual Memory Johannes Will Be Missed Beyond the commits, the talks, and the papers, those who worked with Johannes remember him as a person full of life and a good sense of humor. He is someone who signed his social media bio simply as “LLVM Developer, OpenMP contributor, Beer drinker, not in this order.” A memorial service will be held on Saturday, October 3, 2026, from 1:00 to 5:00 PM at San Jose Funeral Service in San Jose, California, with a separate service planned in Germany. He is survived by his wife, Xuejin Zhang, his father, Jürgen Doerfert, and other family and friends around the world. In lieu of flowers, his family has asked that those who wish to honor his memory consider a donation to the LLVM Foundation (either through Everloved or directly), the organization whose mission he spent his career supporting and advancing. A very generous donor has agreed to match 50K in donations in honor of Johannes. If you donate directly to the LLVM Foundation via a DAF, please indicate in memory of Johannes Doerfert. More details, and a place to share memories and condolences, can be found on Johannes’s memorial page .The LLVM Project BlogIf this page is useful, please consider donating a coffee
Wednesday, September 23, 2026
When working with Win32 FILETIME, don’t forget that you have std::chrono nowLet the library do the math for you. The post When working with Win32 FILETIME , don’t forget that you have std::chrono now appeared first on The Old New Thing .The Old New Thing
Canvas2D: WatchUI DemoIn the previous blog post I introduced Canvas2D , the new QML item in Qt 6.12 that lets you paint with JavaScript using the GPU through Qt Canvas Painter. That post was about the API: what it is, how it compares to Qt Quick Canvas and to the QCanvasPainter C++ API , and how fast it is. But that post might have left someone wondering what a real UI built with it could actually look like. So, while testing Canvas2D (and QQEM) in preparation for the Qt 6.12.0 release, I spent a few days building a demo application to give some ideas. WatchUI is a smartwatch demo with six swipeable views, running on a 3D watch model. This is based on the smartwatch demo that was built a while back for the Qt 6.5 release . But the content of the watch screen has been reimplemented using not just QQEM effects but also Canvas2D. The demo looks like this:Qt Blog
Qt Bridge for Rust 0.3 Beta: CXX-Qt Compatibility and SoundnessAs part of the on-going development of Qt Bridges , we are out with a new beta version of Qt Bridge for Rust, with a focus on CXX-Qt compatibility and soundness. The API surface has changed in only a handful of places compared to 0.2. Where it did change, it is mostly because we removed any API we could not make sound.Qt Blog
Hot Reload in Qt 6.12QML Preview We've had a thing called "QML Preview" for a number of years now. You can be forgiven for not having noticed. It's well hidden deep in the guts of Qt Design Studio where it's quietly doing what it does: it runs your design through the qml tool and gets notified when you change some file. Then it re-loads the currently visible scene, without re-starting the process, making your changes visible. This way you get faster turnaround when prototyping different designs.Qt Blog
⬢ Distrobox: An In-depth Guide for Developers - Part 1Distrobox gives developers a fast, practical way to work across Linux distributions without the setup time and resource overhead of full virtual machines. This in-depth guide explains how Distrobox builds on OCI containers and tools such as Podman or Docker to create tightly integrated development environments—with access to your home directory, graphical sessions, devices, and host tooling. Learn why it is useful for reproducing distro-specific bugs, testing software on multiple platforms, accessing alternative package repositories, and combining a stable host OS with flexible, disposable userlands.KDABTuesday, September 22, 2026
Faster C++ code intelligence for Copilot CLI with Whole Codebase IndexingC++ repositories can contain millions of lines of code spread across deeply connected source files and headers. Without a reusable index, navigating to definitions, finding references, or searching for symbols may require portions of that information to be analyzed again as you move through the repository. C++ code intelligence in GitHub Copilot CLI is now […] The post Faster C++ code intelligence for Copilot CLI with Whole Codebase Indexing appeared first on C++ Team Blog .C++ Team Blog
GeoGate: Generic Co-processing for Coupled Earth System Models with ParaView CatalystThis is a guest blog post from Ufuk Utku Turuncoglu from the NSF National Center for Atmospheric Research (NCAR). He shares his work on GeoGate, an open source component that brings ParaView Catalyst to Earth system models coupled through ESMF/NUOPC. Thanks to his approach of placing in situ analysis in the coupling layer that all […]Kitware Inc
A brief history of Windows scroll bar shortcutsRight-clicking and shift-clicking. The post A brief history of Windows scroll bar shortcuts appeared first on The Old New Thing .The Old New Thing
A summer of AI optimizationI maintain and comaintain several open-source libraries. Some of them are widely used: ada parses URLs in Node.js, fast_float parses numbers in GCC’s standard library and in Chromium, simdjson parses JSON in Node.js, simdutf validates and transcodes Unicode in Node.js, and the Roaring bitmap libraries sit inside many database engines. These libraries are mature. They … Continue reading A summer of AI optimizationDaniel Lemire's blogMonday, September 21, 2026
More than a taken branch per cycle?Our processors can execute many instructions per cycle; they are superscalar. But not all instructions are equal. Branches are particularly tricky. A branch occurs often when you use an if-then clause or a loop. We distinguish between a taken branch and a not taken branch. A not-taken branch is often cheap. The processor just keeps … Continue reading More than a taken branch per cycle?Daniel Lemire's blog
What’s New in ParaView 6.2ParaView 6.2 introduces faster processing for polyhedral cells, new options for exporting time-varying data, expanded support for canceling operations, and new options for stereo rendering in CAVE environments. The release also includes updates across ParaView’s filters, readers and writers, ParaView’s interface, plugins, Python scripting, virtual reality, and Catalyst. For a complete listing of new features […]Kitware Inc
Generating SBOMs with CMakeCMake now includes experimental support for directly generating Software Bills of Materials (SBOMs) from a project’s build description. Instead of relying on post-build scanners, you can produce a standards-based SBOM from the same dependency graph CMake already uses to compile and link your project. The first supported output format is SPDX. The design allows additional […]Kitware Inc
The data does not show mass unemploymentIf AI is causing mass unemployment among software developers, it is not showing up in the data yet. The USA had more software developers as a percentage of the population in 2025 than in 2021. On average salaries are slightly up (average of 148k$ a year). The 90th percentile is up from 2021 … Continue reading The data does not show mass unemploymentDaniel Lemire's blog
What’s the highest legal FILETIME? Is it safe to use?Being wary of how people use it and how it interacts with other types. The post What’s the highest legal FILETIME ? Is it safe to use? appeared first on The Old New Thing .The Old New Thing
Computers in the Simpsons Universe……are probably more efficient than ours. They are certainly different. Simpsons characters have 8 fingers (digits), not 10. So it is likely that octal is the dominant system they use. Yes, I know deities have 10 digits in the Simpsons Universe. It is still likely that the Simpsons universe predominantly...Why is a raven like a writing desk?Sunday, September 20, 2026
AI is breaking the academic sorting machineI see the mathematicians panicking at what we can do with agentic AI. Let us be clear on what we are talking about. In a few weeks, someone who is not a high-level mathematician can, with AI, produce the equivalent of a good PhD thesis in math. I could see a top 1% high school … Continue reading AI is breaking the academic sorting machineDaniel Lemire's blogSaturday, September 19, 2026
Friday, September 18, 2026
Faster JSON parsing with SVE2 on ARM processorsARM processors, like those in your phone, have instructions capable of processing several elements at once (SIMD). These instructions are called NEON. But many newer processors have a different SIMD extension called SVE. The latest ARM processors have SVE2. Unfortunately, Apple has not yet adopted SVE, but SVE processors are available in the cloud. In … Continue reading Faster JSON parsing with SVE2 on ARM processorsDaniel Lemire's blog
How did AMD Ryzen get 50% faster in two years?People still tell me that CPUs are boring. That nothing much happens anymore. Let us look at AMD Ryzen 7 processors from 2022 to 2024: the 5800X3D (Zen 3), the 7800X3D (Zen 4) and the 9800X3D (Zen 5). They are comparable 8-core chips with 3D V-Cache. I have written about them before, in How stagnant … Continue reading How did AMD Ryzen get 50% faster in two years?Daniel Lemire's blog
Comparing exception behavior of magic statics, std::call_once, and std::asyncDo you try again or give up? The post Comparing exception behavior of magic statics, std:: call_ once , and std:: async appeared first on The Old New Thing .The Old New Thing
Canvas2D: New QML canvas element using Qt Canvas PainterIn the earlier blog posts about Qt Canvas Painter we have looked at what it is , the new rendering features it brings, how fast it is compared to QPainter, and how path caching makes even a million line segments render smoothly. All of those earlier blog posts used the QCanvasPainter C++ API. At the end of the path caching post I teased that a QML element was coming, and it is here now: Canvas2D , available in Qt 6.12.Qt Blog
