acm-header
Sign In

Communications of the ACM

Blogroll


bg-corner

A simple algorithm to compute the square root of an integer, byte by byte
From Daniel Lemire's Blog

A simple algorithm to compute the square root of an integer, byte by byte

A reader asked me for some help in computing (1 – sqrt(0.5)) to an arbitrary precision, from scratch. A simpler but equivalent problem is to compute the squareContinue...

C++ web app with Crow: early scalability results
From Daniel Lemire's Blog

C++ web app with Crow: early scalability results

Last year, I looked at writing small “hello world” web applications in various programming languages (Go, JavaScript, Nim…). Go, using nothing but the standardContinue...

Science and Technology links (March 31 2024)
From Daniel Lemire's Blog

Science and Technology links (March 31 2024)

Large language models (e.g., ChatGPT) do better at legal questions that lawyers: Our empirical analysis benchmarks LLMs against a ground truth set by Senior Lawyers...

Fast and concise probabilistic filters in Python
From Daniel Lemire's Blog

Fast and concise probabilistic filters in Python

Sometimes you need to filter out or filter in data quickly. Suppose that your employer maintains a list of forbidden passwords or URLs or words. You may store them...

Passing recursive C++ lambdas as function pointers
From Daniel Lemire's Blog

Passing recursive C++ lambdas as function pointers

In modern C++, as in many popular languages, you can create ‘lambdas’. Effectively, they are potentially anonymous function instances that you can create on the...

How to read files quickly in JavaScript
From Daniel Lemire's Blog

How to read files quickly in JavaScript

Suppose you need to read several files on a server using JavaScript. There are many ways to read files in JavaScript with a runtime like Node.js. Which one is best...

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...
Sign In for Full Access
» Forgot Password? » Create an ACM Web Account