How many bytes a 64 bit processor processes?

19,146

Solution 1

The thing with the large number is, it's 2^64 (2 to the 64th power). That's the amount of unique states that a x64 register could be in, as there are 64 bits in the register to be set to either on or off thus there are 2^64 unique combinations of bits set to on and off.

Assuming that a register value points to a byte address in memory, it can thus "pinpoint" any byte in a memory of 2^64 bytes. So in that sense, it can "reach" all those bytes in the theoretical 16 EB's of RAM at any time. But it's not like a CPU has 16 EB's of built-in ram, which is what that boson.com article sounds like.

At a time would probably not imply a certain timespan, but a single processing stroke. I would say the answer is indeed 8 bytes. If the timespan were important for this question, it would be a more difficult calculation as one would need the clock speed of the CPU and then also need to define if the count includes error correction retries on the same data, cycles used for CPU-based graphics/audio and many other things.

Solution 2

Basically, your first reference had it wrong, and your second reference was right, but they did not give the whole picture.

Here's (I hope) a more complete and accurate picture CPU/Memory fundamentals:

A 64-bit processor has a 64-bit internal "bus". This is literally 64 wires that can each pass a high or low voltage (1 or 0) at any given time. This allows several things including:

1) 64-bits (8 Bytes) of data can "flow" thru the bus at any given time. This data is "Pushed" thru the bus each time the CPU "clock" ticks. If you're curious, a CPU "clock" is usually an internal crystal that vibrates ("oscilates") when it is electrically charged. The osculating crystal produces an electronic "wave" which is then transformed into a rigid, "toggle", wave form. This is the heartbeat of the processor, and each beat "pushes" data thru the bus (simply put). For example, a 1Ghz, 64-bit CPU can "push" data 1 Billion times every second, and it pushes 64 bits each time. Therefore it's processing power or "bandwidth" is 64 Billion bits/second or 8 Gb/s "bandwidth".

2) Since there are 64 binary wires, there are 2^64 possible values the bus can ever produce. Since those values can refer to memory "addresses", a 64-bit processor has the ability to point to up to 2^64 memory locations, each 1 Byte long. This is HUGE... 18.5 Billion GB of RAM.... That's 2 GB of RAM for every human on earth... in a single computer. But for a better example, consider a 32-bit CPU, which can refer to up to 2^32 memory addresses (RAM). Again, each RAM "address" is usually 1 Byte (8 bits), so this is 2^32 Bytes (4GB) of RAM. This is why any computer having either a 32-bit Processor or 32-bit Windows is limited to using 4GB of RAM. Even if more RAM is installed, the system can only use 4GB of it. Also, a 64-bit CPU running 32-bit windows is still limited to 4GB RAM because the Windows software was not designed to connect to any more than the 4GB (2^32) memory "addresses".

NOTE: Keep in mind that as technologies are added such as 3-state bits, mult-core processors, fiber optics, etc, these fundamental calculations get more complex.

SOURCE: Bachelors of Science in Computer/Electrical Engineering From Purdue (IUPUI) in 2010 and have worked in Data/IT/Analysis for the last 8 years. I am also a gaming PC builder/enthusiast, and AnadTech/TomsHardawre article addict :)

Regards, - Jonathan Mathews

Share:
19,146

Related videos on Youtube

committedandroider
Author by

committedandroider

Updated on September 18, 2022

Comments

  • committedandroider
    committedandroider over 1 year

    This is from an interview question - http://www.glassdoor.com/Interview/Yelp-Software-Engineering-Intern-Interview-Questions-EI_IE43314.0,4_KO5,32_IP4.htm

    "there is not more than one way to answer such as number of bytes a 64 bit processor processes and the kill signal for linux"

    Kill signal for linux was pretty easy to find. I just did a quick google search and was able to find this article. http://www.maketecheasier.com/kill-command-in-linux/

    I am confused about the "number of bytes a 64 bit processor processes" part. One article(http://blog.boson.com/bid/87673/A-Few-Bytes-About-32-bit-vs-64-bit-Processing) states that " In fact, a 64-bit processor can theoretically process up to 18,446,744,073,709,551,616 bytes, or 16 exabytes (EB) at one time." Another article(http://mindprod.com/bgloss/sixtyfourbit.html), which makes more intuitive sense, states that "in 64-bit CPUs (Central Processing Units) such as the Athlon, Itanium and Opteron, programs process information 64 bits (or 8 bytes) at a time". This one made sense to me because 64 bits is 8 bytes (8 bits per byte)

    Does at a time in both articles mean in nano second? mili second? From these two articles, what answer would an interviewer expect? Would he/she expect the 8 bytes at a time answer and something that is so much greater?

    • misha256
      misha256 about 9 years
      What a daft question. Actually, I reckon it's one of those questions designed to weed out those who don't have the guts to say "Hold on, this question is flawed, I have at least three different answers for you and they're all correct".
    • Praxeolitic
      Praxeolitic over 8 years
      ...about as much wood as a woodchuck chucks.
    • David Schwartz
      David Schwartz about 7 years
      Usually the point of such a question is to make it impossible for the candidate to regurgitate any canned response and to prod them to demonstrate their ability to reason about what the question might mean and what they understand that relates to its subject area. Intelligent requests for clarification are good, as are things like "If you mean X, then Y, but if you mean Z, then ...".
  • committedandroider
    committedandroider about 9 years
    With the 2^64, I agree with the unique states idea you stated. But why did the author say 2^64 bytes? How does each state represent a byte?
  • Overmind
    Overmind about 9 years
    Lets say the CPU can read 2^32 values (over 4 Billion). Each value corresponds with a RAM Byte position. So the 32-bit CPU will be able to read a 4GB module (2^32 byte blocks). To extend the example, a 33-bit CPU (does not exist, just example) could access 2^33 values (over 8 billion) so that would have enough address space for 8GB of RAM. So even if a 64-bit would allow 16EB, in practice things are different. 64-bit architecture, doesn't mean that all the bits of those pointers are actually used. [continued]
  • Overmind
    Overmind about 9 years
    [continued] Current x86-64 CPUs (AMD64 and Intel's 64-bit chips) actually use 48-bit address lines (AMD64) and 42-bit address lines (Intel). Thats 256 TB and 4 TB.
  • committedandroider
    committedandroider about 9 years
    Like the 32 bit CPU has access to any spot from the 2 ^ 32 byte blocks? If it does, is that where the memory for local variables and instance variables(global) is allocated from?
  • Overmind
    Overmind about 9 years
    In order for the CPU to read the memory byte blocks it must first have enough space to count them. I could picture this but alignment tags don't seem to work.
  • SadBunny
    SadBunny about 9 years
    The idea is that the full content of a register state indicates a byte address/number/id in RAM. There are 2^64 possible register states, thus a 64 bits register can theoretically point to 2^64 unique bytes in the physical RAM.
  • committedandroider
    committedandroider about 9 years
    So basically in a single stroke or move, the 64 bit processor has a register that can point to 2^64 unique bytes. Doesn't that mean it could technically process that many bytes then. So the answer would be 2^64
  • SadBunny
    SadBunny about 9 years
    It can only point to 1 byte at a time, out of that total of 2^64 unique bytes. To process all those 2^64 bytes, you would need 2^64 strokes (not counting all the overhead "strokes" the CPU needs to do).
  • Jamie Hanrahan
    Jamie Hanrahan over 5 years
    Sorry but this isn't even wrong. "Code per CPU cycle" is not dependent on the "bit width" of the machine (which usually refers to the register width). In comparing the x86 vs x64 machine code we find that if anything the x64 code will take a little more space than the x86. You may be thinking of parallel execution of subinstructions from a single instruction stream, but that isn't dependent on the register width either.