STATE UNIVERSITY OF NEW YORK AT OSWEGO
                 Computer Science Department


    I.  COURSE NUMBER AND CREDIT:

        CSC 375 - 3 S. H.

   II.  COURSE TITLE:

        Parallel Computing

  III.  COURSE DESCRIPTION:

        A survey of parallel hardware and software computing
        technology and an introduction to parallel
        programming.  Topics will include an introduction to
        parallel architectures, parallel algorithms, parallel
        languages, parallel algorithm design, analysis, and
        debugging.

   IV.  PREREQUISITES:

        CSC 231 and CSC 241

    V.  JUSTIFICATION:

        Problems that must be solved in many different
        disciplines are rapidly becoming too large to be
        approached using traditional computing techniques.
        These problems require computers that are many orders
        of magnitude faster than the fastest computers
        available today.  Parallel computing represents one
        of the most feasible avenues to achieve the
        performance necessary to solve these problems.
        Because our students will see and use parallel
        machines in graduate school and industry, an
        undergraduate course in parallel program is required.

        Writing parallel programs provides a special
        challenge to the computer scientist.  Classic
        training teaches skills that are primarily sequential
        in nature.  The next generation of computer
        scientists must be introduced to the parallel methods
        of computing in order to produce the results that
        will be required of them.

        Parallel programming is different from traditional
        programming in that a knowledge of the computer
        architecture is often necessary to develop effective
        parallel algorithms.  It is essential that a parallel
        programmer not only understand the programming
        techniques required but also understand the hardware
        on which the program runs.

        This course will introduce students to parallel
        computing in general.  Students will be introduced to
        the ideas and concepts of parallel computing,
        parallel computing hardware, and programs.  They will
        be required to write a number of programs to develop
        experience in parallel programming.

        This course will be offered at least once every two
        years servicing 25 students.

   VI.  COURSE OBJECTIVES:

        As a result of this course, students will be able to:
        1.  Understand why parallel computing is needed.
        2.  Understand the limitations of parallelism.
        3.  Be exposed to a variety of parallel
            architectures.
        4.  Design and implement software that takes
            advantage of parallel hardware.
        5.  Analyze parallel algorithms.
        6.  Study a variety of applications that use
            parallel techniques.

  VII.  COURSE OUTLINE:

        1.  Introduction to Parallel Computing
            a) The need for higher-performance computers
            b)  Methods to achieve higher performance
            c)  Classifying architectures
            d)  Memory models
            e)  Network topologies

        2.  Parallel Architectures
            a)  Pipelined architectures
            b)  Multiprocessors
            c)  SIMD
            d)  MIMD
            e)  Hybrid

        3.  Designing Parallel Algorithms
            a)  Introduction
            b)  Speed-up
            c)  Parallel paradigms
            d)  Communication costs

        4.  Languages
            a)  Extension to Sequential Languages
            b)  Process Oriented
            c)  Object Oriented
            d)  Functional

        5.  Parallel Algorithms
            a)  Pipelines
            b)  Systolic Algorithms
            c)  Divide and Conquer
            d)  Sorting Networks

        6.  Algorithm Analysis
            a)  Measures
            b)  Complexity
            c)  Speed-up
            d)  Communication

        7.  Applications
            a)  Weather Prediction
            b)  Neural Networks
            c)  Database Systems

 VIII.  METHODS OF INSTRUCTION:

        1.  Lectures
        2.  Programming assignments

   IX.  COURSE REQUIREMENTS:

        1.  Readings from a main text and current and
            current papers.
        2.  Individual programming assignments.
        3.  Class presentations.

    X.  MEANS OF EVALUATION:

        1.  Individual programming assignments.
        2.  Examinations.
        3.  Class presentations.

   XI.  RESOURCES:

        No additional resources are required.

  XII.  BIBLIOGRAPHY:

        Akl, Selim G. The Design and Analysis of Parallel
          Algorithms. Englewood Cliffs, NJ: Prentice-Hall,
          1985.

        Akl, Selim G. Parallel Sorting Algorithms, Orlando:
          Academic Press, 1985.

        Almas & Gottlieb. Highly Parallel Computing, Menlo
          Park, CA: Benjamin/Cummings, 1989.

        Ben-Ari, M. Principles of Concurrent and
          Distributed Programming, Englewood Cliffs, NJ:
          Prentice-Hall, 1948.

        Brawer, Steven, Introduction to Parallel
          Programming, Orlando: Academic Press, 1989.

        Burns, Allan, Programming in Occam2, Menlo Park,
          CA: Addison-Wesley, 1988.

        Gehani and Roome, The Concurrent C Programming
          Language, New York: Silicon Press, 1989.

        Hillis, W. D. The Connection Machine, 2nd ed.,
          Cambridge, MA: MIT Press, 1985.

        Hoare, C.A.R. Communicating Sequential Processes,
          Englewood Cliffs, NJ: Prentice-Hall, 1985.

        Inmos, Ltd. Occam2 Reference Manual, Prentice Hall
          International Series, 1988.

        Quinn, Michael J. Designing Efficient Algorithms for
          Parallel Computers, New York: McGraw Hill, 1987.

        Sedgewick, Robert. Algorithms, 2nd ed., Menlo Park,
          CA: Addison-Wesley.

        Wexler, John. Concurrent Programming in Occam2, New
          York: John Wiley.
 Last Updated: 7/9/07