acm-header
Sign In

Communications of the ACM

Blogroll


bg-corner

Fast decoding of base32 strings
From Daniel Lemire's Blog

Fast decoding of base32 strings

We often need to encode binary data into ASCII strings. The standards (e.g., email) to do so include base16, base32 and base64. There are some research papers on...

Science and Technology links (July 16 2023)
From Daniel Lemire's Blog

Science and Technology links (July 16 2023)

Most people think that they are more intelligent than average. Lack of vitamin C may damage the arteries. Make sure you have enough! A difficult problem in software...

Recognizing string prefixes with SIMD instructions
From Daniel Lemire's Blog

Recognizing string prefixes with SIMD instructions

Suppose that I give you a long list of string tokens (e.g., “A”, “A6”, “AAAA”, “AFSDB”, “APL”, “CAA”, “CDS”, “CDNSKEY”, “CERT”, “CH”, “CNAME”, “CS”, “CSYNC”, “DHC...

Stealth, not secrecy
From Daniel Lemire's Blog

Stealth, not secrecy

The strategy for winning is simple: do good work and tell the world about it. In that order! This implies some level of stealth as you are doing the good work.Continue...

Packing a string of digits into an integer quickly
From Daniel Lemire's Blog

Packing a string of digits into an integer quickly

Suppose that I give you a short string of digits, containing possibly spaces or other characters (e.g., "20141103 012910"). We would like to pack the digits into...

Having fun with string literal suffixes in C++
From Daniel Lemire's Blog

Having fun with string literal suffixes in C++

The C++11 standard introduced used-defined string suffixes. It also added regular  expressions to the C++ language as a standard feature. I wanted to have fun and...

Parsing time stamps faster with SIMD instructions
From Daniel Lemire's Blog

Parsing time stamps faster with SIMD instructions

In software, it is common to represent time as a time-stamp string. It is usually specified by a time format string. Some standards use the format %Y%m%d%H%M%SContinue...

Dynamic bit shuffle using AVX-512
From Daniel Lemire's Blog

Dynamic bit shuffle using AVX-512

Suppose that you want to reorder, arbitrarily, the bits in a 64-bit word. This question was raised on Twitter by @experquisite. Formally, you might want to provide...

Science and Technology links (June 25 2023)
From Daniel Lemire's Blog

Science and Technology links (June 25 2023)

Women in highly religious relationships report the highest levels of relationship quality. US politics is largely divided into two parties (Republicans and Democrats)...

Science and Technology links (June 11 2023)
From Daniel Lemire's Blog

Science and Technology links (June 11 2023)

Similar species can have vastly different lifespan. Researchers have been looking for the limiting factors that explain these differences. As we age, our genesContinue...

Parsing IP addresses crazily fast
From Daniel Lemire's Blog

Parsing IP addresses crazily fast

Most of us are familiar with IP addresses: they are strings of the form “ddd.ddd.ddd.ddd” where ddd is a decimal number of up to three digits in the range 0 toContinue...

Science and Technogy links (June 3 2023)
From Daniel Lemire's Blog

Science and Technogy links (June 3 2023)

There are fewer serial killers these days. Some suggests it is due to better forensic techniques: we catch the killers faster and more efficiently. Between theContinue...

Peak credentialism
From Daniel Lemire's Blog

Peak credentialism

How much is a degree from a prestigious university worth? The answer is a bit difficult to answer because there are many cofounding factors: people from the connected...

Expected performance of a Bloom filter
From Daniel Lemire's Blog

Expected performance of a Bloom filter

A hash function is a function that maps a value (such as a string) to an integer value. Typically, we want random-looking values. A Bloom filter is a standard data...

The absurd cost of finalizers in Go
From Daniel Lemire's Blog

The absurd cost of finalizers in Go

The Go programming language makes it easy to call C code. Suppose you have the following C functions: char* allocate() { return (char*)malloc(100); } void free_allocated...

Computing the UTF-8 size of a Latin 1 string quickly (ARM NEON edition)
From Daniel Lemire's Blog

Computing the UTF-8 size of a Latin 1 string quickly (ARM NEON edition)

While most of our software relies on Unicode strings, we often still encounter legacy encodings such as Latin 1. Before we convert Latin 1 strings to Unicode (e...

ARM instructions do “less work”?
From Daniel Lemire's Blog

ARM instructions do “less work”?

Modern processors can execute several instructions per cycle. Because processors cannot easily run faster (in terms of clock speed), vendors try to get their processors...

Science and Technology links (May 6 2023)
From Daniel Lemire's Blog

Science and Technology links (May 6 2023)

Artificial intelligence (ChatGPT) can provide better answers to patients than physicians. Eating chocolate might affect your brain and cognitive functions. It may...

Graviton 3, Apple M2 and Qualcomm 8cx 3rd gen: a URL parsing benchmark
From Daniel Lemire's Blog

Graviton 3, Apple M2 and Qualcomm 8cx 3rd gen: a URL parsing benchmark

Whenever you enter a URL into a system, it must be parsed and validated. It is a surprisingly challenging task: it may require hundreds of nanoseconds and possibly...

Under Linux, libSegFault and addr2line are underrated
From Daniel Lemire's Blog

Under Linux, libSegFault and addr2line are underrated

Many modern programming languages like Java produce useful error messages when they fail. Some indicate where in the program (e.g., down to the line of source code)...
Sign In for Full Access
» Forgot Password? » Create an ACM Web Account