\setcounter{chapter}{-1}
\chapter{TODO-list}

\begin{minipage}{\textwidth}
% #1
\section{Course Introduction and Getting Started with OpenMP \correct}
\rightarrow Lecture video 01 \correct
\begin{itemize}
    \item Select one slide from the lecture, research more about the topic, and report on it. \correct
    \item Read Chapter 1 from Computer Systems: A Programmer's Perspective. \correct \\
        \rightarrow Discuss two things you find particularly interesting. \correct
    \item Parallelize the program on slide 21 with OpenMP \correct
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #2
\section{False Sharing, Race Conditions, and Schedules \correct}
\rightarrow Lecture video 02 \correct
\begin{itemize}
    \item What causes false sharing? Describe it visually by creating your own graphic. \correct
    \item Read the paper \enquote{There's plenty of room at the Top: What will drive computer performance after Moore's law?} \correct \\
        \rightarrow Explain in detail the figure \enquote{Performance gains after Moore's law ends}. (on the first page) \correct
    \item Rewrite the program for estimating $\pi$ from the last lecture (\texttt{pi\_numerical\_integration.cpp}) so that it is parallelized with the \verb|#pragma omp for| construct. \correct
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #3
\section{Ordered Clause, Collapse Clause, Reductions, Barriers, and Storage Attributes}
\rightarrow Lecture video 03
\begin{itemize}
    \item Read Chapter 3 titled \enquote{Programming Multi-core and Shared Memory Multiprocessors Using OpenMP} (pp. 47-78) in \enquote{Introduction to Parallel Computing} (Trobec et al., 2018).
        \begin{itemize}
            \item When run with one thread per logical core, threads from Listing 3.1 display their numbers randomly, while those from Listing 3.2 show them in the same order. Explain why.
            \item What do you think, does the code snippet in Listing 3.10 use the cores efficiently, why yes, why no. Consider also the variable size in your argumentation.
            \item From Lecture 1, take your parallelized version of \texttt{pi\_monte\_carlo.cpp} and modify it based on the insights from Example 3.5 on computing $\pi$ using random shooting, particularly the random number generation method. Report the changes you do and their impact on performance.
        \end{itemize}
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #4
\section{Tasks, Merge Sort, Paper}
\rightarrow Lecture video 04
\begin{itemize}
    \item Benchmark \texttt{min\_max\_quicksort} against \texttt{std::sort} and \texttt{\_\_gnu\_parallel::sort}. (you can adjust \texttt{min\_max\_quicksort.cpp} as necessary)
        \begin{itemize}
            \item Provide details of your benchmarking environment, including the Operating System, RAM, CPU and Compiler.
            \item Create a graph where the x-axis represents the number of threads and the y-axis displays the relative speedup over \texttt{std::sort}. (use an array size of at least $10^7$)
            \item Construct another graph with the x-axis denoting the array size and the y-axis illustrating the relative speedup over \texttt{std::sort}. (use all CPU threads)
            \item Explain any patterns or trends observed in the graphs, and offer potential reasons for these findings.
        \end{itemize}
    \item Read \enquote{What every systems programmer should know about concurrency}. \url{https://assets.bitbashing.io/papers/concurrency-primer.pdf} \\
    \rightarrow Discuss two things you find particularly interesting.
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #5
\section{CMake and Optimization Process}
\rightarrow Lecture video 05
\begin{itemize}
    \item The program in \texttt{quantpng.zip} uses a Makefile for compilation. Add three CMakeLists.txt so that the program can be built with CMake. You can also restructure the code files by saving them in new subfolders. (see video for hints)
    \item Create a static library that computes fizzbuzz. Test this static library using Catch2. See \href{https://mariusbancila.ro/blog/2018/03/29/writing-cpp-unit-tests-with-catch2/}{here} for sample code for the fizzbuzz function and test cases. (see video for hints)
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #6
\section{Auto Vectorization}
\rightarrow Lecture video 06
\begin{itemize}
    \item Name some characteristics of the instructions sets: SSE, AVX(2) and AVX-512.
    \item How can memory aliasing affect performance?
    \item What are the advantages of unit stride (stride-1) memory access compared to accessing memory with larger strides (for example, stride-8)?
    \item When would you prefer arranging records in memory as a Structure of Arrays?
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #7
\section{Guided Vectorization}
\rightarrow Lecture video 07
\begin{itemize}
    \item Explain three vectorization clauses of your choice that can be used with \verb|#pragma omp simd|.
    \item On slide 17 is a graphic for SSE data types and how these data types occupy the XMM vector registers, create a similar graphic for AVX512 data types (\texttt{\_\_m512}, \texttt{\_\_m512d}, \texttt{\_m512i}), how they occupy ZMM vector registers.
    \item Read the article \enquote{Intel MMX for Multimedia PCs}. \url{https://dl.acm.org/doi/pdf/10.1145/242857.242865} \\
    \rightarrow Discuss two things you find particularly interesting.
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #8
\section{Vector Intrinsics and Instruction-Level Parallelism}
\rightarrow Lecture video 08
\begin{itemize}
    \item Select one slide from the lecture, research more about the topic, and report on it.
    \item What do the metrics latency and throughput tell you about the performance of an intrinsic function?
    \item Read the paper \href{https://hpi.de/fileadmin/user_upload/fachgebiete/rabl/publications/2023/vectorized_hash_tables_vldb23.pdf}{\enquote{Analyzing Vectorized Hash Tables Across CPU Architectures}}. \\
    \rightarrow Discuss two things you find particularly interesting.
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #9
\section{Cache and Main Memory}
\rightarrow Lecture video 09
\begin{itemize}
    \item How do bandwith-bound computations differ from compute-bound computations?
    \item Explain why temporal locality and spatial locality can improve program performance.
    \item Select one slide from the lecture, research more about the topic, and report on it.
    \item Read the paper \href{https://link.springer.com/content/pdf/10.1007/3-540-36574-5_10.pdf}{\enquote{An Overview of Cache Optimization Techniques and Cache-Aware Numerical Algorithms}}. \\
    \rightarrow Discuss two things you find particularly interesting.
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #10
\section{Debugging and Profiling}
\rightarrow Lecture video 10
\begin{itemize}
     \item Discuss Donald Knuth's original quote about premature optimization (slide 16). What is your opinion?
     \item Select one slide from the lecture, research more about the topic, and report on it. (except slides 15-16)
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #11
\section{Designing SSD-Friendly Applications}
\rightarrow Lecture video 11
\begin{itemize}
    \item Select one slide from the lecture, research more about the topic, and report on it.
    \item Read the paper \href{https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7552037}{\enquote{Designing SSD-friendly Applications for Better Application Performance and Higher IO Efficiency}}.
    \rightarrow Discuss two things you find particularly interesting.
\end{itemize}
\end{minipage}
\\[8ex]

\begin{minipage}{\textwidth}
% #12
\section{Advanced Topics}
\rightarrow Lecture video 12
\begin{itemize}
    \item Select \textbf{three} slides from the lecture, research more about the topics, and report on them. (one slide from the parallelization section, the other two slides from two other topics) \\
    \phantom{uwu} \\
    Note: If you do not find anything interesting / relevant online for the respective slides, you can also simply discuss the content on them.
\end{itemize}
\end{minipage}
