Skip to content

Advanced and Parallel programming course, University of Trieste

Notifications You must be signed in to change notification settings

AbKalus/advanced_parallel_programming_2023

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation

Advanced and Parallel Programming

UNITS webpage

The course aims to provide advanced knowledge of both theoretical and practical programming in C and Python3, with particular regard to the principles of parallel programming and object-oriented programming and best practices of software development.

Syllabus:

[Knowledge and understanding] You will be able to recognize the main factors that influence performance on modern computer architectures. you will also be able to understand the principles of the object-oriented programming paradigm. [Applying knowledge and understanding] You will be able to write code and evaluate its efficiency on modern architectures. You will also be able to structure complex programs following the object-oriented paradigm. [Making judgments] You will choose between multiple approaches in terms of code structuring, evaluating both the advantages and disadvantages in the choice. [Communication skills] You will be able to explain and motivate his implementation choices in terms of readability, structure and performance. [Learning skills] You will be able to independently delve into the topics covered and keep up to date on developments in terms of programming languages and the efficiency of the various implementation choices

Prerequisites

Knowledge of the C and Python languages, the concepts of threads and locks, the most common data structures (stacks, queues, binary trees, hash tables) and their implementations is required. C language: functions, pointers, arrays, dynamic memory allocation, pthreads (including locks) Python language: basic knowledge of non-object-oriented use, therefore with only the use of functions Architecture: instruction execution cycle, Von Neumann architecture and basic components of an electronic calculation Algorithms and data structures: basic data structures (stacks, queues, stacks, binary trees, hash tables), notion of complexity of an algorithm.

Content

The course will cover topics regarding the programming techniques necessary for writing high-performance code and the features of the languages that allow you to write well-structured and maintainable code. In particular, the following topics will be covered: How the architecture of modern computers influences performance, with references to the notions of cache, memory locality, branch prediction and their effects on code execution speed. Efficient algorithms and data structures on modern architectures and how to evaluate their performance

Extended program

  • Memory hierarchies and cache behavior of modern processors, as examples of existing processors
  • Concept of memory locality and its influence on performances
  • Pipeline and branch prediction. Performance effect of branch misprediction
  • Measurement of program performances
  • Data structures and algorithms that make use of the concepts of memory locality, with examples and comparisons
  • Threads and mutexes using the pthread library (review)
  • Parallelism and performances: theory
  • Effects of locks on performances: lock contention
  • Performance measurement of multithreaded parallel programs
  • Design of data structures and locking mechanisms
  • Using external code in Python: motivations and library examples
  • The numpy library in Python
  • Object-oriented programming in Python: classes and methods
  • Object-oriented programming in Python: Inheritance and polymorphism
  • Decorators in Python
  • Introduction to functional programming concepts and their application in Python
  • Good code management practices
  • Mechanisms for parallel programming, notion of lock contention and the effect of locks on performance
  • Using high-performance libraries in Python, especially the numpy library.
  • Object-oriented programming paradigm in Python. The notions of object and class, inheritance and polymorphism will be covered. You will also see language-specific features such as decorators
  • Notes on other existing programming paradigms, e.g., the functional paradigm
  • How to make code maintainable and how to use version control systems

About

Advanced and Parallel programming course, University of Trieste

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published