<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/css" href="../../MD.css"?>
<!DOCTYPE MD SYSTEM "../../MD.dtd">

<!--
************************************************************************  
For instructions on completing the XML module description, see
http://www.cs.bham.ac.uk/resources/staffinfo/handbook/MDs-XML-Notes.html
************************************************************************
-->

<MD code="N0097" academic-yr="2009"> <!-- 5 digit Banner code,
                                          start of academic year -->

<LastUpdate>20 Aug 2009</LastUpdate> <!-- e.g. 29 Jul 2001 -->

<Aims>
  <Aim>understand GPU architecture</Aim>
  <Aim>understand what applications areas are most suitable to parallel programming</Aim>
  <Aim>practical understanding of parallel algorithms</Aim>
  <Aim>practical understanding of parallel programming techniques</Aim>
  <Aim>concrete skills in programming Nvidia GPUs using the CUDA framework</Aim>
  <Aim>skills in using the software tools provided by the CUDA framework</Aim>
</Aims>

<Outcomes>
  <Outcome>describe and explain modern GPU architecture<Assessed>Examination</Assessed>
  </Outcome>
  <Outcome>describe and explain applications of parallel programming<Assessed>Examination</Assessed>
  </Outcome>
  <Outcome>describe and explain the CUDA programming model<Assessed>Examination</Assessed>
  </Outcome>
  <Outcome>design simple parallel algorithms<Assessed>Examination and continuous assessment</Assessed>
  </Outcome>
  <Outcome>implement more advanced parallel algorithms using CUDA<Assessed>Continuous assessment</Assessed>
  </Outcome>
  <Outcome>use CUDA tools to debug and profile programs<Assessed>Continuous assessment</Assessed>
  </Outcome>
  </Outcomes>

  
<Restrictions>
  <P>For 2009/10, the module can only accommodate a certain maximum number of students, depending on how much equipment can be purchased. If too many students opt for this module, a test will be conducted to limit the numbers of students.</P>
</Restrictions>

<Prereqs>
  <P>None</P>
</Prereqs>

<Coreqs>
  <P>None, but systems level programming skills will be helpful.</P>
</Coreqs>


<Teaching>
  <P>2 hrs/week lectures; 2 hrs/week practical sessions</P>
</Teaching>

<ContactHrs>35</ContactHrs>

<Assessment>
  <Normal>Normal (sessional): 1.5 hr examination (80%), continuous assessment (20%)</Normal><!-- e.g. "1.5 hr examination (100%)",
                             "2 hr examination (80%), continuous assessment (20%)".
                         -->
  <Resit>By examination only (100%)</Resit><!-- if omitted, "as the normal assessment will be generated",
                           otherwise give the form of the resit assessment, e.g.
                           "By examination only", "By examination only (80%) with the
                           continuous asssessment carried forward (20%)",
                           "Examination (70%), supplementary continuous
                           assessment (30%)".
                       -->
  <P></P><!-- optionally further explanation of the form of the assessment
                   may appear here in any number of P elements -->
</Assessment>


<Summary>
This module covers the basics of programming massively parallel processors as commonly found in graphics processing units (GPUs). The module is focussed on the architecture of such devices and their use in speeding-up common (non-graphical) computational tasks. Recent developments in GPU architectures made this task substantially easier and newly available programming tools allow for high-level straightforward programming of these systems. The module will provide a largely practical introduction to the topic. Lectures will address the basic architectural principles of modern GPUs andrelevant algorithms and programming techniques. The exercises will be practical programming based on the CUDA framework for Nvidia GPUs.
</Summary>

<Syllabus>
  <P>The detailed syllabus is subject to change.</P>
  <P>There will be a set of weekly practicals.</P>
  <Topic>Contrasting CPU and GPU architectures </Topic>
  <Topic>The CUDA programming model </Topic>
  <Topic>A first example: matrix multiplication </Topic>
  <Topic>The CUDA memory model </Topic>
  <Topic>GPU as part of the PC architecture </Topic>
  <Topic>Detailed threading model </Topic>
  <Topic>Detailed memory model </Topic>
  <Topic>Control flow on the GPU </Topic>
  <Topic>Floating-point aspects </Topic>
  <Topic>Parallel programming concepts </Topic>
  <Topic>Parallel algorithms </Topic>
  <Topic>Reduction </Topic>
  <Topic>Advanced features </Topic>
</Syllabus>

<Books>
  <Book>
    <Title>Multigrid Methods on GPUs</Title>
    <Author>Peter Thoman</Author>
    <Publisher>VDM Verlag</Publisher>
    <Year></Year>
    <Comment></Comment>
  </Book>
  <Book>
    <Title>GPU Gems 3: Programming Techniques for High-Performance Graphics and General-Purpose Computation</Title>
    <Author>Hubert Nguyen</Author>
    <Publisher>Addison Wesley</Publisher>
    <Year></Year>
    <Comment></Comment>
  </Book>
</Books>

<Links>
  <P><A href="http://www.nvidia.com/object/cuda_home.html">Relevant link.</A>
</P>
</Links>

</MD>

