acm-header
Sign In

Communications of the ACM

Blogroll


bg-corner

Does C++ allow template specialization by concepts?
From Daniel Lemire's Blog

Does C++ allow template specialization by concepts?

Recent versions of C++ (C++20) have a new feature: concepts. A concept in C++ is a named set of requirements that a type must satisfy. E.g., ‘act like a string’...

Scan HTML even faster with SIMD instructions (C++ and C#)
From Daniel Lemire's Blog

Scan HTML even faster with SIMD instructions (C++ and C#)

Earlier this year, both major Web engines (WebKit/Safari and Chromium/Chrome/Edge/Brave) accelerated HTML parsing using SIMD instructions. These ‘SIMD’ instructions...

Benchmarking ARM processors: Graviton 4, Graviton 3 and Apple M2
From Daniel Lemire's Blog

Benchmarking ARM processors: Graviton 4, Graviton 3 and Apple M2

The world of commodity processor is roughly divided in two: x64 chips for servers and PCs, and ARM processors for mobile devices. However, ARM chips increasingly...

Scan HTML faster with SIMD instructions: .NET/C# Edition
From Daniel Lemire's Blog

Scan HTML faster with SIMD instructions: .NET/C# Edition

Recently, the two major Web engines (WebKit and Chromium) adopted fast SIMD routines to scan HTML content. The key insight is to use vectorized classification (Langdale...

Performance tip: avoid unnecessary copies
From Daniel Lemire's Blog

Performance tip: avoid unnecessary copies

Copying data in software is cheap, but it is not at all free. As you start optimizing your code, you might find that copies become a performance bottleneck. Let...

Validating gigabytes of Unicode strings per second… in C#?
From Daniel Lemire's Blog

Validating gigabytes of Unicode strings per second… in C#?

We have been working on a fast library to validate and transcode Unicode and other formats such as base64 in C++: simdutf. We wondered: could we achieve the same...

Rolling your own fast matrix multiplication: loop order and vectorization
From Daniel Lemire's Blog

Rolling your own fast matrix multiplication: loop order and vectorization

If you must multiply matrices, you should use dedicated libraries. However, we sometimes need to roll our own code. In C++, you can quickly write your own Matrix...

Scan HTML faster with SIMD instructions: Chrome edition
From Daniel Lemire's Blog

Scan HTML faster with SIMD instructions: Chrome edition

Modern processors have instructions to process several bytes at once. Effectively all processors have the capability of processing 16 bytes one once. These instructions...

Quickly checking whether a string needs escaping
From Daniel Lemire's Blog

Quickly checking whether a string needs escaping

In software, we often represent strings by surrounding them with quotes ("). What happens if the string itself contains quotes? We then need to escape the string...

Never reason from the results of a sampling profiler
From Daniel Lemire's Blog

Never reason from the results of a sampling profiler

In the quest for software optimization, a trusty companion is the sampling profiler, a tool available in most programming languages. These profilers work unobtrusively...

Science and Technology links (May 25 2024)
From Daniel Lemire's Blog

Science and Technology links (May 25 2024)

Artificial intelligence is far more efficient at producing content than human beings, as far as carbon emissions go. Human brains got larger by over 5% betweenContinue...

Learning from the object-oriented mania
From Daniel Lemire's Blog

Learning from the object-oriented mania

Back when I started programming professionally, every expert and every software engineering professor would swear by object-oriented programming. Resistance was...

Forwarding references in C++
From Daniel Lemire's Blog

Forwarding references in C++

In C++, there are different ways to pass a value to a function. Typically, at any given time, an object in C++ ‘belongs’ to a single function. The various waysContinue...

Peer review is not the gold standard in science
From Daniel Lemire's Blog

Peer review is not the gold standard in science

Peer review as we know it today was introduced very late, over a century after the scientific revolution. It happened after Einstein’s time… arguably the most productive...

How fast can construct small list of strings in C for Python?
From Daniel Lemire's Blog

How fast can construct small list of strings in C for Python?

Python is probably the most popular programming language in the world right now. Python is easy to extend using C code. You may want to return from Python a small...

Should Node.js be built with ClangCL under Windows?
From Daniel Lemire's Blog

Should Node.js be built with ClangCL under Windows?

Under Windows, when using Visual Studio to build C++ code, there are two possible compiler strategies. The Visual Studio compiler (often referred to as MSVC) is...

Careful with Pair-of-Registers instructions on Apple Silicon
From Daniel Lemire's Blog

Careful with Pair-of-Registers instructions on Apple Silicon

Egor Bogatov is an engineer working on C# compiler technology at Microsoft. He had an intriguing remark about a performance regression on Apple hardware following...

Large language models (e.g., ChatGPT) as research assistants
From Daniel Lemire's Blog

Large language models (e.g., ChatGPT) as research assistants

Software can beat human beings at most games… from Chess to Go, and even poker. Large language models like GPT-4 offered through services such as ChatGPT allowContinue...

How do you recognize an expert?
From Daniel Lemire's Blog

How do you recognize an expert?

Go back to the roots: experience. An expert is someone who has repeatedly solved the concrete problem you are encountering. If your toilet leaks, an experienced...

How quickly can you break a long string into lines?
From Daniel Lemire's Blog

How quickly can you break a long string into lines?

Suppose that you receive a long string and you need to break it down into lines. Consider the simplified problems where you need to break the string into segments...
Sign In for Full Access
» Forgot Password? » Create an ACM Web Account