The memory model in use is determined by two things:
- The CPU in use, and what modes it supports
- The Operating System and what it uses
From a programmer's point of view, unless you're working on kernel code, you get what the OS gives you. Which in most modern operating systems is a paged memory model.
For code that will execute on a modern operating system in userspace, the memory model as far as the process is concerned is flat. This is because the OS provides a virtual memory space to the process that hides all of the paging, swapping, and other things that can happen to memory. This layer of abstraction is quite, quite useful since it doesn't force programmers to play nice with memory for the good of the whole system.
Historically, this wasn't always the case.
Windows 3.1x, MacOS up to v9, and Novell NetWare all lacked some of the memory protections we take for granted in Linux/Windows/OSX. NetWare in specific had one big memory space it provided to all running code, so one bug that attempted to access memory it wasn't actually assigned could actually get that memory and more often than not crash the whole system. Programmers programming for NetWare had to be very careful about memory management for this reason, and to an extent that Linux/windows/OSX programmers don't need to bother with.
And yet even NetWare used a Paged Model of memory, it just didn't provide each process with a virtual memory-space, it gave it the actual memory space.
The memory model in use is not flexible for all programming but the closest to the hardware. Kernel programming and embedded device programming are the areas where such things are very important.
I'd like to comment on the RAM frequency (1333/1600/etc) part. Generally, the best stick is the one that has the ideal combination of:
- lowest timings
- highest frequency
- lowest voltage
- lowest price
- being compatible with your motherboard.
But the first 3 factors are not set in stone. For example, if for the same price, you can get:
- a stick of 1333mhz ram rated at 9-9-9-9 at 1.5V
- a stick of 1600mhz ram rated at 9-9-9-9 at 1.5V
Stick #2 is the better stick here. Because if you "slow it down" to 1333mhz, you may be able to run it at better timings such as 8-8-8-8, or at 9-9-9-9 with a lower voltage, 1.4V perhaps, or just run it at 1333mhz and call it a day. They're practically the same chips, just tested to perform at the stated minimum specs. In other words, don't give up a good sale because it's a 1600mhz stick!
Compatibility is not set in stone either! If a 1600/9-9-9-9 stick doesn't run at this speed on a motherboard, it may actually run fine at 1333/9-9-9-9. Just like the 1333 stick of the same brand would. Of course avoid any stick you know beforehand may not be compatible.
And that is why most RAM default to 1333mhz in the BIOS: for best compatibility. It's often up to the user to configure it optimally (higher frequency, lower timings, or lower voltage) as per the rated specs, if he so desires.
Example
You can use CPU-Z to figure out the rated specs at different frequencies. Below are the specs for my ram module, officially rated 1600mhz, CL-9-9-9-9-24, 1.6V. This JEDEC table is embedded of the RAM chip itself.
As you can see, the official specs match the column for 1600mhz (actually 800mhz, remember DDR stands for double data rate). If I were to run the ram at 1333mhz (666), I could safely set the BIOS to run the RAM at 1.5V instead - in fact I should since anymore is wasted heat. At around 1200mhz, I could safely lower the timings to 8-8-8-8-22.
Now you may ask what timings could this particular ram achieve at 1333mhz and 1.6V? Unfortunately, that falls in the realm of the unknown (or the overclocking). In this case, it would be much safer to buy a chip that guarantees 1333mhz, 8-8-8-8-24 at 1.5V or 1.6V.
Best Answer
Long story short, ganged treats the memory subsystem as a single 128-bit bus, while unganged treats the memory subsystem as dual independent 64-bit buses.
Ganged favors some single-threaded software, but AMD generally recommends unganged for typical modern system configurations, especially if you are commonly multitasking multiple applications.
Basically, Gang versus unganged is more about the memory access model being used.