Ubuntu makes more or less everything Linux-related easier. Nonetheless, there are a few steps one needs to go through to build the absolute latest gcc on a stock 64-bit Ubuntu 10.10 install.
Category Archives: Tech
A small 64-bit conundrum
Traditionally, 64-bit computing is a mixed bag. You gain additional precision and the ability to address more memory, but in many cases those advantages are outweighed by the fact that the 64-bit code requires more memory and cache and the actual individual operations are slower.
X86-64 is somewhat different in this respect, because when AMD took it upon themselves to add 64-bit capabilities to x86, they also made other enhancements including, notably, doubling the number of general purpose registers from a paltry 8 to a more manageable 16. The caveat is that only 64-bit code can have access to these new registers.
Finding primes – simple assembly benchmark
The short answer is that in my implementation, the 64-bit assembly version ran modestly faster on my machine (64-bit Intel Core i7) than the C code compiled in 64-bit mode with full optimizations. Note that this program simply spits out the total number of primes between 2 and MAX, not the actually primes themselves (often a rather long list).
x86 assembly– written for nasm, should run on Linux and MacOS X
C code – should run anywhere
Mersenne Primes – part 1
Mersenne primes are prime numbers of the form 2^n – 1. They were named after Marin Mersenne, a 17th century French monk who compiled a table of the first dozen (although it turns out he got the last few wrong).
The first few are:
3 = 2^2 – 1
7 = 2^3 – 1
31 = 2^5 – 1
127 = 2^7 – 1
8191 = 2^13 – 1
131071 = 2^17 – 1
…
masm to nasm assembly conversion example
Using nasm on MacOS X
Nasm is a cross-platform x86 assembler and functions largely the same on MacOS X as it does on Linux. However as I discovered porting some of my code, there are some quirks and slight changes required, compared to working with nasm in Linux.
Using nasm/Along32 instead of masm/Irvine32
Kip Irvine’s x86 assembly book is a good introduction to assembly. However, it requires using Visual Studio on Windows, both for the syntax and more importantly for the Irvine32 support library that the examples require. Happily, some folks have put together a Linux port of that library called Along32 and so using the crossplatform nasm assembler, one can make nearly full use of the book on Linux.
Below are the basic instructions for using nasm and this library.
Moving x86 assembly to 64-bit (x86-64)
While 64-bit x86 processors have now been on the market for more than 5 years, software support is only slowly catching on. 64-bit x86, or x86-64 as its inventors at AMD called it, not only offers programmers the ability to manipulate and address data in larger chunks, but added some other niceties like an additional 8 general purpose registers.
Transitioning assembly code from x86 to x86-64 is pretty straightforward, but there are some changes worth noting.
Converting x86 assembly from masm to nasm
Masm, the Microsoft assembler, is the most commonly taught x86 assembler. Unfortunately, its use is limited to Windows. nasm is a free cross-platform x86 assembler which supports all the common x86 operating systems – Linux, MacOS X and Windows. Unlike the GNU assembler, it uses the same Intel syntax that masm does. Still, there are some differences.
What follow are my notes on converting x86 assembly code from use with mas to nasm.
I have also posted a simple example highlighting some of those changes.
The Great Camera Con
Digital cameras are responsible for many wonderful things. They let us capture manner of events that were not practical or possible before. They enable us to post-process and alter our images quickly and easily. They make it possible to share our images with just about anybody at no cost and little effort.
What they have not done, at least for serious amateurs, is save us money over their film predecessors. This of course flies in the face of conventional wisdom. No more buying film. No more paying the drugstore to process our images (or buying the chemicals and equipment and processing them ourselves). No more paying for prints of every image on a roll of film. Etc.