# smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book architecture

> Architecture diagram of the GitHub repository smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book
- Repository: https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book

## Overview

This repository is a set of educational Python and C examples accompanying a book on RISC-V performance and parallel programming, rather than one integrated application. The reader’s workflow is to run standalone examples and compare serial, vectorized, library-optimized, and multiprocessing approaches across numerical computing, signal/audio processing, and image processing. The five labs organize those topics, progressing from basic SIMD examples to multicore image filtering. The graph groups examples by their documented subject; standalone execution and outputs are evident in sampled files, but the README does not document inter-example calls or a shared runtime pipeline.

Main entry points: [`codes/lab0`](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/tree/main/codes/lab0) (Array and Filters), [`codes/lab1`](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/tree/main/codes/lab1) (Vector Addition), [`codes/lab1/1.2.average_vector_float64.py`](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.2.average_vector_float64.py) (Serial and Vector Average), [`codes/lab1/1.3.dot_float64.c`](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.3.dot_float64.c) (Dot Product)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_foundations["Foundations"]
  node_lab0["Array and Filters"]
end

subgraph group_simd["SIMD Computing"]
  node_vector_add["Vector Addition"]
  node_average["Serial and Vector Average"]
  node_dot_product["Dot Product<br/>[1.3.dot_float64.c]"]
  node_matrix_product["Matrix Multiplication<br/>[1.4.matmult_np.py]"]
  node_pi_estimation["Pi Estimation<br/>[1.5.pi_vector.c]"]
end

subgraph group_signals["Signal and Audio"]
  node_signal_examples["Signal Generation<br/>[2.1.sin_wave_np.py]"]
  node_fir_filter["FIR Filtering<br/>[2.2.fir_vector.c]"]
  node_fft["Fourier Transform<br/>[2.3.fft_pure.py]"]
  node_audio_synthesis["Audio Synthesis<br/>[2.4.synt_audio.py]"]
  node_audio_vectorization["Audio Vectorization"]
  node_audio_features["Audio Features"]
end

subgraph group_images["Image Processing"]
  node_image_drawing["Image Drawing"]
  node_image_transforms["Image Transforms"]
  node_color_conversion["Color Conversion<br/>[3.7.rgb_hsv_np.py]"]
end

subgraph group_parallel["Multicore Processing"]
  node_pool_examples["Multiprocessing Basics<br/>[4.1.pools.py]"]
  node_parallel_compute["Parallel Computation"]
  node_image_difference["Image Difference"]
  node_mandelbrot["Mandelbrot Rendering"]
  node_sobel["Sobel Filtering<br/>[5.2.sobel_mp_np.py]"]
  node_gaussian["Gaussian Filtering"]
end

node_reader(("Reader"))

node_reader -.->|"explores"| node_lab0
node_reader -.->|"explores"| node_vector_add
node_reader -.->|"compares"| node_average
node_reader -.->|"explores"| node_dot_product
node_reader -.->|"explores"| node_matrix_product
node_reader -.->|"explores"| node_pi_estimation
node_reader -.->|"explores"| node_signal_examples
node_reader -.->|"explores"| node_fir_filter
node_reader -.->|"explores"| node_fft
node_reader -.->|"explores"| node_audio_synthesis
node_reader -.->|"explores"| node_audio_vectorization
node_reader -.->|"explores"| node_audio_features
node_reader -.->|"explores"| node_image_drawing
node_reader -.->|"explores"| node_image_transforms
node_reader -.->|"explores"| node_color_conversion
node_reader -.->|"explores"| node_pool_examples
node_reader -.->|"explores"| node_parallel_compute
node_reader -.->|"explores"| node_image_difference
node_reader -.->|"explores"| node_mandelbrot
node_reader -.->|"explores"| node_sobel
node_reader -.->|"explores"| node_gaussian

click node_lab0 "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/tree/main/codes/lab0"
click node_vector_add "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/tree/main/codes/lab1"
click node_average "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.2.average_vector_float64.py"
click node_dot_product "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.3.dot_float64.c"
click node_matrix_product "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.4.matmult_np.py"
click node_pi_estimation "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.5.pi_vector.c"
click node_signal_examples "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.1.sin_wave_np.py"
click node_fir_filter "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.2.fir_vector.c"
click node_fft "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.3.fft_pure.py"
click node_audio_synthesis "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.4.synt_audio.py"
click node_audio_vectorization "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.5.audio_vect_np.py"
click node_audio_features "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.6.audio_features_np.py"
click node_image_drawing "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab3/3.2.line_vectorized_np.py"
click node_image_transforms "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab3/3.5.rgb_resize_gray.py"
click node_color_conversion "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab3/3.7.rgb_hsv_np.py"
click node_pool_examples "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab4/4.1.pools.py"
click node_parallel_compute "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab4/4.4.matmult_mp_pure.py"
click node_image_difference "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab4/4.5.rgb_image_diff_mp_np.py"
click node_mandelbrot "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab5/5.1.mandelbrot_mp_np.py"
click node_sobel "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab5/5.2.sobel_mp_np.py"
click node_gaussian "https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab5/5.3.gaussian_mp_np.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_lab0 toneBlue
class node_vector_add,node_average,node_dot_product,node_matrix_product,node_pi_estimation toneAmber
class node_signal_examples,node_fir_filter,node_fft,node_audio_synthesis,node_audio_vectorization,node_audio_features toneMint
class node_image_drawing,node_image_transforms,node_color_conversion toneRose
class node_pool_examples,node_parallel_compute,node_image_difference,node_mandelbrot,node_sobel,node_gaussian,node_reader toneIndigo
```

## Components

### Foundations

- [Array and Filters](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/tree/main/codes/lab0): `codes/lab0`

### SIMD Computing

- [Vector Addition](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/tree/main/codes/lab1): `codes/lab1`
- [Serial and Vector Average](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.2.average_vector_float64.py): `codes/lab1/1.2.average_vector_float64.py`
- [Dot Product](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.3.dot_float64.c): `codes/lab1/1.3.dot_float64.c`
- [Matrix Multiplication](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.4.matmult_np.py): `codes/lab1/1.4.matmult_np.py`
- [Pi Estimation](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab1/1.5.pi_vector.c): `codes/lab1/1.5.pi_vector.c`

### Signal and Audio

- [Signal Generation](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.1.sin_wave_np.py): `codes/lab2/2.1.sin_wave_np.py`
- [FIR Filtering](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.2.fir_vector.c): `codes/lab2/2.2.fir_vector.c`
- [Fourier Transform](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.3.fft_pure.py): `codes/lab2/2.3.fft_pure.py`
- [Audio Synthesis](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.4.synt_audio.py): `codes/lab2/2.4.synt_audio.py`
- [Audio Vectorization](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.5.audio_vect_np.py): `codes/lab2/2.5.audio_vect_np.py`
- [Audio Features](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab2/2.6.audio_features_np.py): `codes/lab2/2.6.audio_features_np.py`

### Image Processing

- [Image Drawing](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab3/3.2.line_vectorized_np.py): `codes/lab3/3.2.line_vectorized_np.py`
- [Image Transforms](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab3/3.5.rgb_resize_gray.py): `codes/lab3/3.5.rgb_resize_gray.py`
- [Color Conversion](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab3/3.7.rgb_hsv_np.py): `codes/lab3/3.7.rgb_hsv_np.py`

### Multicore Processing

- [Multiprocessing Basics](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab4/4.1.pools.py): `codes/lab4/4.1.pools.py`
- [Parallel Computation](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab4/4.4.matmult_mp_pure.py): `codes/lab4/4.4.matmult_mp_pure.py`
- [Image Difference](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab4/4.5.rgb_image_diff_mp_np.py): `codes/lab4/4.5.rgb_image_diff_mp_np.py`
- [Mandelbrot Rendering](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab5/5.1.mandelbrot_mp_np.py): `codes/lab5/5.1.mandelbrot_mp_np.py`
- [Sobel Filtering](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab5/5.2.sobel_mp_np.py): `codes/lab5/5.2.sobel_mp_np.py`
- [Gaussian Filtering](https://github.com/smartcomputerlab/risc-v-parallel-programming-for-signal-and-image-processing.book/blob/main/codes/lab5/5.3.gaussian_mp_np.py): `codes/lab5/5.3.gaussian_mp_np.py`

### Other components

- **Reader**

## Connections

- Reader → Array and Filters: explores
- Reader → Vector Addition: explores
- Reader → Serial and Vector Average: compares
- Reader → Dot Product: explores
- Reader → Matrix Multiplication: explores
- Reader → Pi Estimation: explores
- Reader → Signal Generation: explores
- Reader → FIR Filtering: explores
- Reader → Fourier Transform: explores
- Reader → Audio Synthesis: explores
- Reader → Audio Vectorization: explores
- Reader → Audio Features: explores
- Reader → Image Drawing: explores
- Reader → Image Transforms: explores
- Reader → Color Conversion: explores
- Reader → Multiprocessing Basics: explores
- Reader → Parallel Computation: explores
- Reader → Image Difference: explores
- Reader → Mandelbrot Rendering: explores
- Reader → Sobel Filtering: explores
- Reader → Gaussian Filtering: explores
