aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: e808bb04aec8eaf634398943905fab05bdd990c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#Task solution - matrix multiplication in fortran#
This repository contains the realization of the [first task](http://home.agh.edu.pl/~macwozni/fort/zadanie1.pdf) of the fortran programming language course at AGH in Cracov.  

##The directory structure##

    CMakeLists.txt
    README.md
    make_results.sh
    template.gnuplot
    src/
        blockmath.F90
        testing.F90
        naivemath.F90
        bettermath.F90
        main.F90
        dotmath.F90
        bettermath2.F90
    res/
        dot_16
        dot_8
        mat_8
        bett2_4
        bett_4
        bett2_8
        block_4
        naiv_8
        mat_16
        bett_8
        naiv_4
        block_8
        naiv_16
        mat_4
        dot_4
        bett_16
        block_16
        bett2_16
        wykres4.pdf
        wykres8.pdf
        wykres16.pdf

###CmakeLists.txt###
This file contains CMake definitions for building fortran sources. It does not, however, define the actions of running the program, generating results, nor plotting.   

###make_results.sh###
This script runs built program under different options and writes measured multiplication times in `res/{naiv,bett,dot,mat,bett2,block}_{4,8,16}` while also running gnuplot to generate their corresponding plots into `res/wykres{4,8,16}.pdf`.   

###template.gnuplot###
It's the gnuplot script for generating plots from text files in `res`. In this script `[kind]` has to be replaced with actual number (for example with the help of `sed`, see `make_results.sh` for how it's done).   

###src/###
This directory contains the fortran sources of the project, namely modules sources `*math.F90` and main program source `main.F90`.   

###res/###
This directory contains text results of matrix multiplication time measuring (files without extension) and their corresponding plots (pdf files).   

##Building##
As a prerequisite, CMake, make and a fortran compiler, either gfortran or ifort, are required (didn't want to support proprietary compiler :c but had to).   

`make_results.sh` assumes an out-of-source build in `build/` has been performed.   

    $ mkdir build
    $ cd build
    $ cmake ../
    $ make mull

The CMake configuration provided allows one to specify one of twosets of compiler flags.  The default is RELEASE and it can be changed to DEBUG using

    $ cmake .. -DCMAKE_BUILD_TYPE=DEBUG

##Running##
The executable is `mull`.   

     $ ./mull
     Usage: mull KIND IMPLEMENTATION
     where KIND is one of: 4, 8, 16
      IMPLEMENTATION is one of: naiv, bett, dot, mat, bett2, block

When ran with proper arguments, it prints matrix sizes and multiplication times in columns.   

Text files and plots in `res/` can be regenerated by issuing

    $ ./make_results.sh

from within the main project directory (may take up to several tens of minutes).