---
# System prepended metadata

title: POSIX threads hw report

---

{%hackmd theme-dark %}
# POSIX threads hw report
##### tags: `homework` `posix`
F74096336 陳振皓
## What I have done
* I used Condition Variable to implement my barrier

* I distribute work to n threads by having each thread do roughly total_rows/n. (remainder are distributed starting from thread 0)

* In each thread:

    1. Calculate how many local_rows it should do and starting from which row.
    2. barrier.
    3. Smoothing.
    4. Wait for each thread to complete.
    5. Repeat 2~4 1000 times.
* Save output

* Record execution time
## Result Analysis


| number of threads | time NSmooth=100 | time NSmooth=500 | time NSmooth=1000 |
| ----------------- |:---------------- |:---------------- |:----------------- |
| 1                 | 4s               | 29s              | 68s               |
| 2                 | 2s               | 13s              | 53s               |
| 4                 | 1s               | 8s               | 38s               |
| 8                 | 1s               | 6s               | 17s               |
| 16                | 0s               | 9s               | 11s               |
| 32                | 0s               | 9s               | 14s               |
