#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).