I have a question for you:
What is actually the technics that are used in the hardware
to scale and speed more the memory system and the harddisk system ? and
if those technics to speed the memory system and harddisk system
can make memory and/or disk bound applications scalable in today
and future multicore systems ?
Amine Moulay Ramdane
If you are thinking of throughput, then maybe you can e.g. have additional harddisks in parallel, or even whole machines running in parallel. Each machine/harddisk is associated its own work set (as independent of others as much as the design of the app allows it)
As regards to memory, they can be multi-channel (dual channel, quad-channel etc) and processors can access memory concurrently. Again the design of the app tries to split work into multiple data/computation blocks as much as possible and minimize the frequency at which threads need to synchronize.
If you are thinking of latency, then solid state disks. Or reduce the data size so that requests can be serviced from RAM, L3, L2 cache etc? Other techniques could be for example be preloading: you make your file data ready to be delivered before the request arrives (based on statistics). Or speculative execution: you try predict what the request will be and execute that request before the request arrives, if you guessed right the you just need to "commit" the request, if guessed wrong you cancel the speculative execution and restart with the correct parameters.
Hardware prefecthing and branch prediction works somewhat like the above, but the concept can easily be applied to software as well.