71 lines
3.7 KiB
Markdown
71 lines
3.7 KiB
Markdown
|
---
|
||
|
geometry: margin=2cm
|
||
|
output: pdf_document
|
||
|
title: CSCI 5451 Assignment 1
|
||
|
date: \today
|
||
|
|
||
|
author: |
|
||
|
| Michael Zhang \<zhan4854@umn.edu\> $\cdot$ ID: 5289259
|
||
|
---
|
||
|
|
||
|
1. _A short description of how you went about parallelizing the classification algorithm. You should include how you decomposed the problem and why, i.e., what were the tasks being parallelized._
|
||
|
|
||
|
The parallelization I used was incredibly simple, just parallelizing outer iterations. I used this same trick for both the OpenMP and the pthreads implementations.
|
||
|
|
||
|
The reason I didn't go further was that further breaking down of the for loops incurred more overhead from managing the parallelization than was actually gained. I have run this several times and the gains were either neglient, or it actually ran slower than the serial version.
|
||
|
|
||
|
This also had to do with the fact that I had already inlined most of the calculations to require as few loops as possible, moved all allocations to the top level, and arranged my data buffer in column-major order instead since the iteration pattern was by dimension rather than by row.
|
||
|
|
||
|
2. _Timing results for 1, 2, 4, 8, and 16 threads for the classification. You should include results with outer iterations set to 10._
|
||
|
|
||
|
```
|
||
|
./lc_pthreads ./dataset/small_data.csv ./dataset/small_data.csv 10 1
|
||
|
Program time (compute): 0.0069s
|
||
|
./lc_pthreads ./dataset/small_data.csv ./dataset/small_data.csv 10 2
|
||
|
Program time (compute): 0.0027s
|
||
|
./lc_pthreads ./dataset/small_data.csv ./dataset/small_data.csv 10 4
|
||
|
Program time (compute): 0.0027s
|
||
|
./lc_pthreads ./dataset/small_data.csv ./dataset/small_data.csv 10 8
|
||
|
Program time (compute): 0.0033s
|
||
|
./lc_pthreads ./dataset/small_data.csv ./dataset/small_data.csv 10 16
|
||
|
Program time (compute): 0.0031s
|
||
|
./lc_pthreads ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 1
|
||
|
Program time (compute): 21.5287s
|
||
|
./lc_pthreads ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 2
|
||
|
Program time (compute): 10.6175s
|
||
|
./lc_pthreads ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 4
|
||
|
Program time (compute): 5.2198s
|
||
|
./lc_pthreads ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 8
|
||
|
Program time (compute): 4.5690s
|
||
|
./lc_pthreads ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 16
|
||
|
Program time (compute): 3.6433s
|
||
|
./lc_openmp ./dataset/small_data.csv ./dataset/small_data.csv 10 1
|
||
|
Program time (compute): 0.0033s
|
||
|
./lc_openmp ./dataset/small_data.csv ./dataset/small_data.csv 10 2
|
||
|
Program time (compute): 0.0017s
|
||
|
./lc_openmp ./dataset/small_data.csv ./dataset/small_data.csv 10 4
|
||
|
Program time (compute): 0.0011s
|
||
|
./lc_openmp ./dataset/small_data.csv ./dataset/small_data.csv 10 8
|
||
|
Program time (compute): 0.0020s
|
||
|
./lc_openmp ./dataset/small_data.csv ./dataset/small_data.csv 10 16
|
||
|
Program time (compute): 0.0032s
|
||
|
./lc_openmp ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 1
|
||
|
Program time (compute): 21.7196s
|
||
|
./lc_openmp ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 2
|
||
|
Program time (compute): 10.4035s
|
||
|
./lc_openmp ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 4
|
||
|
Program time (compute): 5.2449s
|
||
|
./lc_openmp ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 8
|
||
|
Program time (compute): 4.1550s
|
||
|
./lc_openmp ./dataset/MNIST_data.csv ./dataset/MNIST_label.csv 10 16
|
||
|
Program time (compute): 3.5328s
|
||
|
```
|
||
|
|
||
|
This data was generated using the `run_benchmark.sh > out.txt` script.
|
||
|
|
||
|
Small note: There's a part in the end of the program that performs validation on the trained model by using a train/test data set split. I didn't count this towards execution time but felt that it was important enough to keep since it ensured that my program was still behaving correctly.
|
||
|
|
||
|
```
|
||
|
|
||
|
```
|