Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

How is just splitting the memory in two separate channels going to make anything faster?

How will this affect driver complexity and cache-misses?



This is sort of explained in the article. I think they had to use burst length 16 [1] to scale to 6400 MHz, but 16 * 64 bits would be 128 bytes or two cache lines. The whole memory system works in cache lines, so it wouldn't be good if the processor requested one cache line and got two. So they use BL16 with a narrower 32-bit channel to fetch one 64-byte cache line.

As long as multiple cores are accessing memory or prefetching is on (it's almost always on), both channels will be utilized so software won't notice.

[1] When you do a read operation on DRAM you get a multi-cycle burst of data, not just one word. This amortizes command/address overhead and presumably matches the slow-but-wide internal DRAM array with the fast-but-narrow channel. See https://people.freebsd.org/~lstewart/articles/cpumemory.pdf sec. 2.2.


Reminds me a little bit of Virtual Channel Memory (VCM) SDRAM from NEC.


> How is just splitting the memory in two separate channels going to make anything faster?

I am not a HW engineer, but:

With DDR, the difference of all traces in the same channel (data & clock) has very tight tolerances (on the order of 1/8 or 1/16 of a clock). Having fewer traces per channel may make it easier to route for higher clock speeds.

> How will this affect driver complexity and cache-misses?

I'm not sure what you mean? The memory controller should abstract almost all of the differences away. There are per-channel configuration settings that are usually configured by the SPD rom, so there will be twice as many to set, but multichannel memory controllers are already a thing, and going from N to 2N of something doesn't really affect software complexity once N is greater than one.


you can issue two commands simultaneously. yes, the data transfer latency takes twice as long in theory, due to the bus size halving, but with increased clock speeds its not really an issue.


Similarly to how dual channel memory is faster than single channel. Now you can do dual channel with a single stick, or maybe even quad channel with 2 sticks. I believe it should be otherwise transparent to the rest of the system.


I think that's wrong. Going from 1 64-bit channel to 2 32-bit channels has the same throughput per clock (or even slightly lower if the per-transaction overhead is paid separately on each channel).


But memory is latency-limited, not bandwidth-limited. The channels are idle quite a lot of the time.

So you go from

  REQUEST1---------RESPONSE1-REQUEST2---------RESPONSE2
to

  REQUEST1---------RESPONSE1RESPONSE1
  REQUEST2---------RESPONSE2RESPONSE2
Each request individually is slightly slower, but the total bandwidth is greatly increased.


I think SDRAM can do

    REQUEST1-REQUEST2---RESPONSE1-RESPONSE2
can't it?


Yes it can! But, unless I'm mistaken, only within the same bank. This means you can basically only do this for sequential access, not random access. And there's still a non-zero latency between the responses, so it's still slightly slower than doubling the channels.


Yes, but they also doubled the clock.


Which doesn't answer the question of "why didn't they just double the clock without reducing the bus width" but your answer to the original question sums that up nicely.


Well, you could just increase the clock, but it doesn't really gain you anything. G.Skill already has the F4-4800C18D-16GTRS which runs at 4800Mhz. Is it fast? Not really. The F4-3800C14D-16GTZN running at 3800Mhz is actually faster in practice because you're limited by the memory module's latency.

Increasing the clock just makes it a lot harder for motherboard and CPU manufacturers to support those speeds, but on its own it doesn't really gain you a lot of speed.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: