Computer systems, parallel and high performance computing
Description
This course aims to develop understanding on the multiple ways to express parallelism in various languages and systems, and understanding on the kinds of problems for which each system is optimal. It also aims to develop some initial experience with usual problems and errors in parallel programs, as well as some tools for avaoiding them. Finally, it aims to develop parallel thinking in software design and engineering.
Material per week:
1
Introduction to POSIX threads.
2
Application development with POSIX threads, parallel patterns.
3
Introduction to OpenMP - fine grain parallelism.
4
Application development in OpenMP, synchronization primitives, scheduling optimization.
5
Introduction to the TBB library - coarse grain patterns.
6
Recursive parallelism in TBB, synchronization patterns.
7
Data flow parallelism - TBB flow graph.
8
Introduction to Java Threads – differences.
9
Java parallel patterns, parallel data structures.
10
Synchronization patterns, asynchronous function call, futures.
11
Java Threads and immutable data structures – Introduction to Scala.
12
Functional programming in Scala – Parallelism without memory updates.
13
Parallelism and distributed systems in Scala.
Learning Outcomes
Having attended and succeeded in the course, the student is able to 1. Knowledge:
understand ways offered by various languages and systems in expressing parallelism
identify kinds of problems for which a system is better
2. Understanding:
recognize usual problems and errors in parallel programs, and identify the tools or methods for avoiding them
3. Application:
use tools for parallelizing code and languages such as OpenMP, Scala, Java threads, pthreads, and profiling and performance analysis tools
4. Analysis:
use basic principles of parallel thinking in designing and engineering software
5. Synthesis:
develop parallel programs while predicting and avoiding issues such as side-effects, synchronization, and parallelism errors
6. Evaluation:
measure the performance of non-deterministic programs, and compare non-deterministic solutions
measure and graph performance and scalability, and deduce performance of a parallel program on other parallel architectures.
Student Performance Evaluation
Specific details on grading can be found on the course’ s website
The courses of the Computer Science Department are designated with the letters "CS" followed by three decimal digits. The first digit denotes the year of study during which students are expected to enroll in the course.
First Digit
Advised Year of Enrollment
1,2,3,4
First, Second, Third and Fourth year
5,6
Graduate courses
7,8,9
Specialized topics
Code
Computer Science Area
A1
Computer architecture and microelectronics
A2
Computer systems, parallel and high performance computing
A3
Computer security and distributed systems
A4
Computer networks, mobile computing, and telecommunications
B1
Algorithms and systems analysis
B2
Databases, information and knowledge management
B3
Software engineering and programming languages
B4
Artificial Intelligence and machine learning
C1
Signal processing and analysis
C2
Computer vision and robotics
C3
Computer graphics and human-computer interaction
C4
Βioinformatics, medical informatics, and computational neuroscience
The following pages contain tables (one for each course category) summarizing courses offered by the undergraduate studies program of the Computer Science Department at the University of Crete. Courses with code-names beginning with "MATH" or "PHYS" are taught by the Mathematics Department and Physics Department respectively at the University of Crete.