Wednesday, April 12, 2017

Bit by bit: CPU architecture

There are a variety of reasons you might want to know how many bits the architecture of the CPU running your Python program has. Maybe you're about to use some statically-compiled C, or maybe you're just taking a survey.

Either way, you've got to know. One historical way way is:

import sys
IS_64BIT = sys.maxint > 2 ** 32

Except that sys.maxint is specific to Python 2. Being the crossover point where ints transparently become longs, sys.maxint doesn't apply in Python 3, where ints and longs have been merged into just one type: int (even though the C calls it PyLongObject). And Python 3's introduction of sys.maxsize doesn't help much if you're trying to support Python <2.7, where it doesn't exist.

So instead we can use the struct module:

import struct
IS_64BIT = struct.calcsize("P") > 4

This is a little less clear, but being backwards and forwards compatible, and given struct is still part of the standard library, it's a pretty good approach, and is the one taken in boltons.ecoutils.

But let's say you really wanted to get it down to a single line, and even standard library imports were out of the question, for some reason. You could do something like this:

IS_64BIT = tuple.__itemsize__ > 4

While not extensively documented, a lot of built-in types have __itemsize__ and __basicsize__ attributes, which describes the memory requirement of the underlying structure. For tuples, each item requires a pointer. Pointer size * 8 = bits in the architecture. 4 * 8 = 32-bit architecture, and 8 * 8 = 64-bit architecture.

Even though documentation isn't great, the __itemsize__ approach works back to at least Python 2.6 and forward to Python 3.7. Memory profilers like pympler use __itemsize__ and it might work for you, too!

3 comments:

  1. Finding out how much a home change venture will cost is quite recently the initial phase in making sense of regardless of whether you'll have the capacity to manage the cost of the home change. CutTheWood.com

    ReplyDelete
  2. Every two years, Georgia's licensed massage therapists are required to submit proof that they've taken at least twenty-four hours of massage therapy continuing education courses. Not only is this important in ensuring that massage therapists stay up-to-date, but also that they adhere to high standards of professional performance. Continue reading to learn what documentation is needed to remain licensed and compliant in the state of Georgia.http://www.thesisexample.info/

    ReplyDelete
  3. You can easily browse through fireplace catalogs to have a look at what are some of the ready-made or custom designs available. Ready-made designs are easier to install, and they cost less. tabletop fireplace

    ReplyDelete