acm-header
Sign In

Communications of the ACM

Blogroll


bg-corner

How many political parties rule Canada? Fun with statistics
From Daniel Lemire's Blog

How many political parties rule Canada? Fun with statistics

Canada has several political parties with elected member of parliament: the Liberals, the Conservatives, the Bloc Québecois, de NDP and the Green. But do the behave...

Book review: Theft of Fire by Devon Eriksen
From Daniel Lemire's Blog

Book review: Theft of Fire by Devon Eriksen

When I was young, science fiction was the genre of choice for many engineers and scientists. But the genre declined significantly in recent years. Part of the problem...

Measuring energy usage: regular code vs. SIMD code
From Daniel Lemire's Blog

Measuring energy usage: regular code vs. SIMD code

Modern processor have fancy instructions that can do many operations at one using wide registers: SIMD instructions. Intel and AMD have 512-bit registers and associated...

JSON Parsing: Intel Sapphire Rapids versus AMD Zen 4
From Daniel Lemire's Blog

JSON Parsing: Intel Sapphire Rapids versus AMD Zen 4

Intel has release a new generation of server processors (Sapphire Rapids) while the latest AMD technology (Zen 4) is now broadly available. There are extensiveContinue...

How fast is rolling Karp-Rabin hashing?
From Daniel Lemire's Blog

How fast is rolling Karp-Rabin hashing?

A hash function maps values (e.g., strings) into a fixed number of strings, typically smaller than the original. It is useful to compare quickly two long strings...

C23: a slightly better C
From Daniel Lemire's Blog

C23: a slightly better C

One of the established and most popular programming languages is the C programming language. It is relatively easy to learn, and highly practical. Maybe surprisingly...

How much memory bandwidth do large Amazon instances offer?
From Daniel Lemire's Blog

How much memory bandwidth do large Amazon instances offer?

In my previous post, I described how you can write a C++ program to estimate your read memory bandwidth. It is not very difficult: you allocate a large memory region...

Estimating your memory bandwidth
From Daniel Lemire's Blog

Estimating your memory bandwidth

One of the limitations of a compute is the memory bandwidth. For the scope of this article, I define “memory bandwidth” as the maximal number of bytes you can bring...

Implementing the missing sign instruction in AVX-512
From Daniel Lemire's Blog

Implementing the missing sign instruction in AVX-512

Intel and AMD have expanded the x64 instruction sets over time. In particular, the SIMD (Single instruction, multiple data) instructions have become progressively...

Science and Technology links (December 30th 2023)
From Daniel Lemire's Blog

Science and Technology links (December 30th 2023)

Parenting does not appear to be able to determine the personality traits of a child. When the last ice age ended, 12,000 years ago, the Sahara was green and full...

Measuring the size of the cache line empirically
From Daniel Lemire's Blog

Measuring the size of the cache line empirically

Our computers do not read or write memory in units of bits or even bytes. Rather memory is accessed in small blocks of memory called “cache line”. For a given system...

Fast Buffer-to-String conversion in JavaScript with a Lookup Table
From Daniel Lemire's Blog

Fast Buffer-to-String conversion in JavaScript with a Lookup Table

When programming in a JavaScript environment such as Node.js, you might recover raw data from the network and need to convert the bytes into strings. In a system...

How fast can you validate UTF-8 strings in JavaScript?
From Daniel Lemire's Blog

How fast can you validate UTF-8 strings in JavaScript?

When you recover textual content from the disk or from the network, you may expect it to be a Unicode string in UTF-8. It is the most common format. Unfortunately...

Parsing 8-bit integers quickly
From Daniel Lemire's Blog

Parsing 8-bit integers quickly

Suppose that you want to parse quickly 8-bit integers (0, 1, 2, …, 254, 255) from an ASCII/UTF-8 string. The problem comes up in the simdzone project lead by Jeroen...

A simple WebSocket benchmark in Python
From Daniel Lemire's Blog

A simple WebSocket benchmark in Python

Modern web applications often use the http/https protocols. However, when the server and client needs to talk to each other in a symmetrical fashion, the WebSocket...

A simple WebSocket benchmark in JavaScript: Node.js versus Bun
From Daniel Lemire's Blog

A simple WebSocket benchmark in JavaScript: Node.js versus Bun

Conventional web applications use the http protocol (or the https variant). The http protocol is essentially asymmetrical: a client application such as a browser...

Science and Technology links (November 12 2023)
From Daniel Lemire's Blog

Science and Technology links (November 12 2023)

Vitamin K2 supplements might reduce the risk of myocardial infarction (heart attacks) and of all-cause death (Hasific et al. 2022). You find vitamin K2 in someContinue...

Generating arrays at compile-time in C++ with lambdas
From Daniel Lemire's Blog

Generating arrays at compile-time in C++ with lambdas

Suppose that you want to check whether a character in C++ belongs to a fixed set, such as ‘\0’, ‘\x09’, ‘\x0a’,’\x0d’, ‘ ‘, ‘#’, ‘/’, ‘:’, ‘<‘, ‘>’, ‘?’, ‘@’, ‘...

Appending to an std::string character-by-character: how does the capacity grow?
From Daniel Lemire's Blog

Appending to an std::string character-by-character: how does the capacity grow?

In C++, suppose that you append to a string one character at a time: while(my_string.size() <= 10'000'000) { my_string += "a"; } In theory, it might be possible...

For processing strings, streams in C++ can be slow
From Daniel Lemire's Blog

For processing strings, streams in C++ can be slow

The C++ library has long been organized around stream classes, at least when it comes to reading and parsing strings. But streams can be surprisingly slow. ForContinue...
Sign In for Full Access
» Forgot Password? » Create an ACM Web Account