| % cpu/cpu.tex |
| |
| \QuickQuizChapter{chp:Hardware and its Habits}{Hardware and its Habits} |
| |
| Most people have an intuitive understanding that passing messages between |
| systems is considerably more expensive than performing simple calculations |
| within the confines of a single system. |
| However, it is not always so clear that communicating among threads within |
| the confines of a single shared-memory system can also be quite expensive. |
| This chapter therefore looks at the cost of synchronization and communication |
| within a shared-memory system. |
| These few pages can do no more than scratch the surface of shared-memory |
| parallel hardware design; readers desiring more detail would do well |
| to start with a recent edition of Hennessy and Patterson's classic |
| text~\cite{Hennessy95a}. |
| |
| \QuickQuiz{} |
| Why should parallel programmers bother learning low-level |
| properties of the hardware? |
| Wouldn't it be easier, better, and more general to remain at |
| a higher level of abstraction? |
| \QuickQuizAnswer{ |
| It might well be easier to ignore the detailed properties of |
| the hardware, but in most cases it would be quite foolish |
| to do so. |
| If you accept that the only purpose of parallelism is to |
| increase performance, and if you further accept that |
| performance depends on detailed properties of the hardware, |
| then it logically follows that parallel programmers are going |
| to need to know at least a few hardware properties. |
| |
| This is the case in most engineering disciplines. |
| Would \emph{you} want to use a bridge designed by an |
| engineer who did not understand the properties of |
| the concrete and steel making up that bridge? |
| If not, why would you expect a parallel programmer to be |
| able to develop competent parallel software without at least |
| \emph{some} understanding of the underlying hardware? |
| } \QuickQuizEnd |
| |
| \input{cpu/overview} |
| \input{cpu/overheads} |
| \input{cpu/hwfreelunch} |
| \input{cpu/swdesign} |
| |
| Chapter~\ref{chp:Tools of the Trade} will cover some of the low-level |
| tools used for parallel programming, |
| Chapter~\ref{chp:Counting} will investigate problems and solutions to |
| parallel counting, and |
| Chapter~\ref{cha:Partitioning and Synchronization Design} |
| will discuss design disciplines that promote performance and scalability. |