From 973a84faff8d27654ed9561ae5498868f1d8d7db Mon Sep 17 00:00:00 2001 From: Zhihua Lai Date: Thu, 16 Jul 2026 18:04:35 +0100 Subject: [PATCH 1/2] Compute PI by integral --- README.md | 1 + parallel-integral-pi/Makefile | 30 +++++++++++ parallel-integral-pi/main.cpp | 60 ++++++++++++++++++++++ parallel-integral-pi/parallel-integral-pi | Bin 0 -> 138360 bytes parallel-integral-pi/tests.sh | 15 ++++++ 5 files changed, 106 insertions(+) create mode 100644 parallel-integral-pi/Makefile create mode 100644 parallel-integral-pi/main.cpp create mode 100755 parallel-integral-pi/parallel-integral-pi create mode 100755 parallel-integral-pi/tests.sh diff --git a/README.md b/README.md index ae035fe..cc5cd40 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Examples include (and will expand to): * RAII and ownership patterns * Parallelism * [parallel-transform](./parallel-transform/) + * [parallel-integral-pi](./parallel-integral-pi/) * Performance‑oriented C++ idioms * STL and ranges: * [ranges-find-in-vector-string](./ranges-find-in-vector-string/) diff --git a/parallel-integral-pi/Makefile b/parallel-integral-pi/Makefile new file mode 100644 index 0000000..172da2f --- /dev/null +++ b/parallel-integral-pi/Makefile @@ -0,0 +1,30 @@ +# pull in shared compiler settings +include ../common.mk + +# per-example flags +# CXXFLAGS += -pthread + +## get it from the folder name +TARGET := $(notdir $(CURDIR)) +SRCS := $(wildcard *.cpp) +OBJS := $(SRCS:.cpp=.o) + +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CXX) $(CXXFLAGS) -o $@ $^ + +%.o: %.cpp + $(CXX) $(CXXFLAGS) -c $< -o $@ + +run: $(TARGET) + ./$(TARGET) $(ARGS) + +clean: + rm -f $(OBJS) $(TARGET) + +# Delegates to top-level Makefile +check-format: + $(MAKE) -f ../Makefile check-format DIR=$(CURDIR) + +.PHONY: all clean run check-format diff --git a/parallel-integral-pi/main.cpp b/parallel-integral-pi/main.cpp new file mode 100644 index 0000000..723b3f5 --- /dev/null +++ b/parallel-integral-pi/main.cpp @@ -0,0 +1,60 @@ +/* + pi = \int 0^1 \frac{4}{1+x^2} dx + this demo computes pi using the trapezoidal rule in parallel aka. multithreaded +*/ + +#include +#include +#include +#include + +double f(double x) +{ + return 4.0 / (1.0 + x * x); +} + +int +main(int argc, char* argv[]) +{ + long long iterations = 10000000000; + if (argc > 1) { + iterations = std::atoll(argv[1]); + } + int threads = 10; + if (argc > 2) { + threads = std::atoi(argv[2]); + } + + // compute the width of each trapezoid + double h = 1.0 / static_cast(iterations); + // compute the area of each trapezoid in parallel + double sum = 0.0; + // create a vector of threads + std::vector thread_pool; + // create a vector of partial sums + std::vector partial_sums(threads, 0.0); + for (int t = 0; t < threads; ++t) { + thread_pool.emplace_back([&, t]() { + long long start = t * (iterations / threads); + long long end = (t + 1) * (iterations / threads); + for (long long i = start; i < end; ++i) { + double x = h * static_cast(i); + partial_sums[t] += f(x); + } + }); + } + // join the threads + for (auto& thread : thread_pool) { + thread.join(); + } + // sum the partial sums + for (int t = 0; t < threads; ++t) { + // std::cout << "partial sum from thread " << t << " = " << partial_sums[t] << std::endl; + sum += partial_sums[t]; + } + // multiply by the width of each trapezoid to get the final result + double pi = h * sum; + // set precision and print the result + std::cout.precision(15); + std::cout << "pi = " << pi << std::endl; +} \ No newline at end of file diff --git a/parallel-integral-pi/parallel-integral-pi b/parallel-integral-pi/parallel-integral-pi new file mode 100755 index 0000000000000000000000000000000000000000..ba1e0f532dd6faa3f700ad1f25f27077fdc4ef8f GIT binary patch literal 138360 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

x9Q!L^)cx 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 literal 0 HcmV?d00001 diff --git a/parallel-integral-pi/tests.sh b/parallel-integral-pi/tests.sh new file mode 100755 index 0000000..b0b8cb0 --- /dev/null +++ b/parallel-integral-pi/tests.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -ex + +# Run the tests +pi=$(./parallel-integral-pi) + +# Check that the result is within a reasonable range +if (( $(echo "$pi < 3.0" | bc -l) )) || + (( $(echo "$pi > 3.2" | bc -l) )); then + echo "Test failed: pi is out of range: $pi" + exit 1 +else + echo "Test passed: pi is within range: $pi" +fi From 6cad2862c327189fe165fcc77cc30fa4f079a7f2 Mon Sep 17 00:00:00 2001 From: Zhihua Lai Date: Thu, 16 Jul 2026 18:21:03 +0100 Subject: [PATCH 2/2] trapezoidal --- parallel-integral-pi/main.cpp | 66 ++++++++++++---------- parallel-integral-pi/parallel-integral-pi | Bin 138360 -> 0 bytes parallel-integral-pi/tests.sh | 30 ++++++---- 3 files changed, 57 insertions(+), 39 deletions(-) delete mode 100755 parallel-integral-pi/parallel-integral-pi diff --git a/parallel-integral-pi/main.cpp b/parallel-integral-pi/main.cpp index 723b3f5..bd682a4 100644 --- a/parallel-integral-pi/main.cpp +++ b/parallel-integral-pi/main.cpp @@ -1,14 +1,11 @@ -/* - pi = \int 0^1 \frac{4}{1+x^2} dx - this demo computes pi using the trapezoidal rule in parallel aka. multithreaded -*/ - -#include +#include #include +#include #include #include -double f(double x) +double +f(double x) { return 4.0 / (1.0 + x * x); } @@ -16,7 +13,7 @@ double f(double x) int main(int argc, char* argv[]) { - long long iterations = 10000000000; + long long iterations = 1000000; if (argc > 1) { iterations = std::atoll(argv[1]); } @@ -25,36 +22,47 @@ main(int argc, char* argv[]) threads = std::atoi(argv[2]); } - // compute the width of each trapezoid - double h = 1.0 / static_cast(iterations); - // compute the area of each trapezoid in parallel - double sum = 0.0; - // create a vector of threads + if (iterations <= 0 || threads <= 0) { + std::cerr << "iterations and threads must be positive integers\n"; + return 1; + } + + const double h = 1.0 / static_cast(iterations); + const long long interior_points = iterations - 1; + const int worker_count = static_cast(std::min(threads, iterations)); + const long long points_per_thread = interior_points / worker_count; + const long long remainder = interior_points % worker_count; + std::vector thread_pool; - // create a vector of partial sums - std::vector partial_sums(threads, 0.0); - for (int t = 0; t < threads; ++t) { + thread_pool.reserve(worker_count); + std::vector partial_sums(worker_count, 0.0); + + for (int t = 0; t < worker_count; ++t) { thread_pool.emplace_back([&, t]() { - long long start = t * (iterations / threads); - long long end = (t + 1) * (iterations / threads); + const long long thread_index = t; + const long long start = 1 + thread_index * points_per_thread + std::min(thread_index, remainder); + const long long end = start + points_per_thread + (thread_index < remainder ? 1 : 0); + + double local_sum = 0.0; for (long long i = start; i < end; ++i) { - double x = h * static_cast(i); - partial_sums[t] += f(x); + const double x = h * static_cast(i); + local_sum += 2.0 * f(x); } + partial_sums[t] = local_sum; }); } - // join the threads + for (auto& thread : thread_pool) { thread.join(); } - // sum the partial sums - for (int t = 0; t < threads; ++t) { - // std::cout << "partial sum from thread " << t << " = " << partial_sums[t] << std::endl; - sum += partial_sums[t]; + + // T_n = (h / 2) * (f(0) + f(1) + 2 * sum of interior points). + double sum = f(0.0) + f(1.0); + for (const double partial_sum : partial_sums) { + sum += partial_sum; } - // multiply by the width of each trapezoid to get the final result - double pi = h * sum; - // set precision and print the result + + const double pi = (h / 2.0) * sum; std::cout.precision(15); - std::cout << "pi = " << pi << std::endl; + std::cout << "pi = " << pi << '\n'; } \ No newline at end of file diff --git a/parallel-integral-pi/parallel-integral-pi b/parallel-integral-pi/parallel-integral-pi deleted file mode 100755 index ba1e0f532dd6faa3f700ad1f25f27077fdc4ef8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138360 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

x9Q!L^)cx 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 diff --git a/parallel-integral-pi/tests.sh b/parallel-integral-pi/tests.sh index b0b8cb0..11efa4d 100755 --- a/parallel-integral-pi/tests.sh +++ b/parallel-integral-pi/tests.sh @@ -1,15 +1,25 @@ -#!/bin/bash +#!/usr/bin/env bash -set -ex +set -euo pipefail -# Run the tests -pi=$(./parallel-integral-pi) +output=$(./parallel-integral-pi 100000 6) +pi=${output#pi = } -# Check that the result is within a reasonable range -if (( $(echo "$pi < 3.0" | bc -l) )) || - (( $(echo "$pi > 3.2" | bc -l) )); then - echo "Test failed: pi is out of range: $pi" +if ! awk -v pi="$pi" 'BEGIN { + expected = atan2(0, -1) + error = pi - expected + if (error < 0) { + error = -error + } + exit !(error < 0.000000001) +}'; then + echo "Test failed: inaccurate approximation: $pi" exit 1 -else - echo "Test passed: pi is within range: $pi" fi + +if ./parallel-integral-pi 0 2 >/dev/null 2>&1; then + echo "Test failed: zero iterations should be rejected" + exit 1 +fi + +echo "Test passed: pi = $pi"