Hello,
I signed up for the final Computer Architecture course in my college for next semester. This means a large portion of the summer dedicated towards preparing and studying.
However, I need to focus on somethings more than others, specifically ones that will benefit me programming (C++) wise. Can someone explain to me exactly how my knowledge in such concepts can affect my programming expertise? For example these are some of the topics that we will cover next semester (I know it's a long list). Can someone explain to me how some of these can help me with being a better programmer exactly?
Almost everything I learned on the subject has been too general or too specific for me to apply to my knowledge. As in I have a general understanding so far that knowing how hardware works will definitely affect my software design in terms of efficiency since obviously programming is done into hardware. But that's about it, I can't think of anything specific or very insightful, or at least useful to my programming expertise.
Clocks and Clock Cycles
SRAM
DRAM
Memory Hierarchy
Various types of caches (as well as measuring and improving cache performance)
architecture on performance
AMAT
Virtual Memory
Disk structure
Disk performance ad costs (controlled overhead, rotational latency etc)
Buses: types, synchronous versus asynchronous
Interfacing I/O Devices to the Processor, Memory, and OS
Memory-mapped I/O versus special I/O instructions
Polling
Interrupt driven I/O
DMA -- operations, performance, interaction with virtual memory
RAID
Network Topologies (Meshes, Corssbar Switching, multi stage)
Types of Multiprocessors (SMP, UMA, NUMA, SMP)
Multiprocessor synchronization
Pipelining
Hardware Multithreading
Flynn's Taxonomy
SISD, SIMD, MISD, MIMD multi processors
Indepth NNIDIA GPU (some CUDA programming)
Thank you very much.