~ /project-overview /overview
Project · Overview

Parallel performance, measured twice.

Hands-on experiments with parallel execution on real systems. First with Linux processes in C, then with Java threads. Every configuration is timed, compared with its baseline and explained.

C · GCC · fork()Java · ThreadsUbuntu 24.04 ARM64Apple M2 · 8 cores

What the project covers#

Process-based parallelism#

Use fork() and wait() on Linux to divide matrix multiplication rows across child processes.

Thread-based parallelism#

Split a sum-of-cubes computation across Java worker threads and study how it scales from 1 to 8 threads.

Timing and analysis#

Measure with clock() in C and System.nanoTime() in Java, then compute speedup and percentage improvement.

Reproducible documentation#

Record the setup steps, run controlled experiments, and publish formatted results and reports for both phases.

Objectives#

  • Understand Linux process creation and parent–child synchronization.
  • Explore multithreading in Java and how work is divided among threads.
  • Measure execution time under different parallel configurations.
  • Analyze scalability and the overhead that limits it.
  • Compare process-based and thread-based parallelism.
  • Practice clear, structured technical documentation.

Scope#

The project is about experimental evaluation, not algorithm design. The provided programs are used as they are. Only their configuration parameters change, and every change is measured.

Phase I Phase II
Mechanism Processes (fork() / wait()) Threads (Runnable / join())
Language C, compiled with GCC Java, OpenJDK 25
Workload Matrix multiplication Sum of cubes over 1,000,000 integers
Variables Matrix size N, process count PROCS Thread count: 1, 2, 4, 6, 8
Machine UTM VM, Ubuntu 24.04 ARM64, 4 cores, 4 GB MacBook Air, Apple M2, 8 cores, 8 GB
Timer clock() (CPU time) System.nanoTime() (wall time)
Runs per config 3 12

Tools and technologies#

Linux (Ubuntu)#

The Phase I runtime environment for process creation and benchmarking.

C + GCC#

System-level code for process-based parallel matrix multiplication.

Java#

The multithreaded implementation and its timing harness in Phase II.

fork() / wait()#

The process-management primitives used in Phase I.

Java threads#

Workload division and synchronization with Thread and join().

MkDocs#

Builds this site from Markdown, using a custom theme.