CPAR-FEUP

Instructions

Compiling

Prerequisites

Compile

    gcc matrixprod.cpp -O2 -lstdc++ -lpapi -fopenmp -o matrixprod 

Problem Description

Algorithms Explanation

Performanc Metrics and evaluation methodology

Results and analysis

Personal Computer

System Specs

  • Processor:Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz 2.59GHz
  • RAM:16.0 GB
  • Native OS:Windows 10 64-bit
  • System Type: Laptop

Ambient

  • OS: Lubuntu 16.10 64-bit emulated using VMware Workstation 12 Player
  • Number of cores available: 4
    • With "Virtualize CPU Performance Counters"
  • RAM:3072 MB

Exercise 1

Language Lines Columns Time (seconds) Result L1 DCM L2 DCM
C++ 600 600 0.442 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 245705939 45989280
C++ 1000 1000 3.182 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 1310776566 284360892
C++ 1400 1400 6.856 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 3533630320 1726785940
C++ 1800 1800 43.130 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 9923648923 12362871028
C++ 2200 2200 93.097 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 18904204751 31231870843
C++ 2600 2600 260.343 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 50700490008 114860172924
C++ 3000 3000 448.414 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 86286928932 198167531673
Java 600 600 0.379953907 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 - -
Java 1000 1000 3.414137921 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 - -
Java 1400 1400 10.545934405 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 - -
Java 1800 1800 74.701534915 1620900 1620900 1620900 1620900 1620900 1620900 1620900 1620900 1620900 1620900 - -
Java 2200 2200 169.40223858 2421100 2421100 2421100 2421100 2421100 2421100 2421100 2421100 2421100 2421100 - -
Java 2600 2600 303.229170491 3381300 3381300 3381300 3381300 3381300 3381300 3381300 3381300 3381300 3381300 - -
Java 3000 3000 480.991397112 4501500 4501500 4501500 4501500 4501500 4501500 4501500 4501500 4501500 4501500 - -

Exercise 2

600x600 to 3000x3000 (increments 400)
Language Lines Columns Time (seconds) Result L1 DCM L2 DCM
C++ 600 600 0.789 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 28201278 62801090
C++ 1000 1000 0.812 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 129344397 264177556
C++ 1400 1400 2.382 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 356880114 717719028
C++ 1800 1800 5.264 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 795132399 1531969745
C++ 2200 2200 9.856 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2187010572 2764456582
C++ 2600 2600 16.087 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 4460226209 4491927395
C++ 3000 3000 23.437 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 6832972504 6843859306
Java 600 600 0.221115913 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 - -
Java 1000 1000 1.023655557 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 - -
Java 1400 1400 2.720531016 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 - -
Java 1800 1800 5.720939922 1620900 1620900 1620900 1620900 1620900 1620900 1620900 1620900 1620900 1620900 - -
Java 2200 2200 10.585751775 2421100 2421100 2421100 2421100 2421100 2421100 2421100 2421100 2421100 2421100 - -
Java 2600 2600 20.659955488 3381300 3381300 3381300 3381300 3381300 3381300 3381300 3381300 3381300 3381300 - -
Java 3000 3000 27.224210437 4501500 4501500 4501500 4501500 4501500 4501500 4501500 4501500 4501500 4501500 - -
4000x4000 to 10000x10000 (increments 2000)
Language Lines Columns Time (seconds) Result L1 DCM L2 DCM
C++ 4000 4000 240.562 8.002e+06 8.002e+06 8.002e+06 8.002e+06 8.002e+06 8.002e+06 8.002e+06 8.002e+06 8.002e+06 8.002e+06 16154430655 18486099979
C++ 6000 6000 794.667 1.8003e+07 1.8003e+07 1.8003e+07 1.8003e+07 1.8003e+07 1.8003e+07 1.8003e+07 1.8003e+07 1.8003e+07 1.8003e+07 54586272255 64360460770
C++ 8000 8000 1876.256 3.2004e+07 3.2004e+07 3.2004e+07 3.2004e+07 3.2004e+07 3.2004e+07 3.2004e+07 3.2004e+07 3.2004e+07 3.2004e+07
C++ 10000 10000
Java 4000 4000 74.958529341 8002000 8002000 8002000 8002000 8002000 8002000 8002000 8002000 8002000 8002000 - -
Java 6000 6000 ----------- Unable to do test: Java Heap space error (not enough memory to do test) - -

Exercise 3

Normal Matrix Multiplication
Threads Lines Columns Time (seconds) Result L1 DCM L2 DCM
1 600 600 0.454 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 245285593 47056220
1 1000 1000 2.769 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 1284504013 294879627
1 1400 1400 7.010 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 3532723835 1346003417
1 1800 1800 39.694 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 9288912450 9141009766
1 2200 2200 91.970 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 18944057792 30683666985
1 2600 2600 156.445 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 31804919833 61734979438
1 3000 3000 252.560 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 51285921496 109428947061
2 600 600 0.427 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 123688773 35244947
2 1000 1000 3.497 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 678764841 241806176
2 1400 1400 7.748 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 1863443063 1084825963
2 1800 1800 41.532 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 5084268132 7018023827
2 2200 2200 92.797 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 10101784568 17888164907
2 2600 2600 159.129 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 17043121440 34862655639
2 3000 3000 258.772 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 27931740797 62402241713
3 600 600 0.357 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 83256508 20904260
3 1000 1000 3.503 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 446901666 144091927
3 1400 1400 7.667 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 1236733289 759687249
3 1800 1800 43.408 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 3451325157 4476634121
3 2200 2200 95.783 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 6643482581 11936378241
3 2600 2600 160.249 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 11227866456 23000788570
3 3000 3000 261.112 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 18357089733 41146569141
4 600 600 0.352 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 62325118 15172082
4 1000 1000 4.210 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 340981308 136612347
4 1400 1400 10.636 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 941632839 734922506
4 1800 1800 50.103 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 2504221855 3378714641
4 2200 2200 104.230 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 4911028438 9098554246
4 2600 2600 187.151 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 8250244764 17235248852
4 3000 3000 298.406 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 13436389312 30241321250
Line Multiplication
Threads Lines Columns Time (seconds) Result L1 DCM L2 DCM
1 600 600 0.701 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 28155851 62806742
1 1000 1000 0.836 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 126962929 256341973
1 1400 1400 2.345 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 352058448 708653011
1 1800 1800 4.956 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 763978112 1498772308
1 2200 2200 9.277 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2089657443 2691922926
1 2600 2600 15.184 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 4399120729 4496924697
1 3000 3000 23.520 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 6765144156 6872052719
2 600 600 0.722 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 13930983 29954613
2 1000 1000 2.034 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 63446845 129465769
2 1400 1400 5.585 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 175673388 354602336
2 1800 1800 11.989 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 383529931 748132669
2 2200 2200 21.905 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 1045933073 1359558889
2 2600 2600 36.213 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 2200095277 2235069687
2 3000 3000 57.061 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 3383859284 3424184313
3 600 600 0.350 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 9255372 19870823
3 1000 1000 1.685 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 42946747 86877098
3 1400 1400 4.638 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 126130738 238711331
3 1800 1800 9.780 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 261695834 499034226
3 2200 2200 17.886 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 703208837 892533647
3 2600 2600 30.861 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 1468250307 1470635213
3 3000 3000 86.667 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 2264756023 2543679918
4 600 600 0.462 180300 180300 180300 180300 180300 180300 180300 180300 180300 180300 6929614 14915177
4 1000 1000 2.053 500500 500500 500500 500500 500500 500500 500500 500500 500500 500500 32150353 67302602
4 1400 1400 5.822 980700 980700 980700 980700 980700 980700 980700 980700 980700 980700 92389279 170984723
4 1800 1800 12.244 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 1.6209e+06 220187170 379436438
4 2200 2200 22.847 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 2.4211e+06 555314390 671747389
4 2600 2600 37.429 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 3.3813e+06 1101556792 1100832232
4 3000 3000 59.710 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 4.5015e+06 1693914279 1712132376

Conclusion

In the tests made in a personal computer, inside a virtual machine and with other programs in the background, despite some predictability in the results, they were not fully conclusive and there were some unexpected results. The main cause might have been the noise in the background made by the other programs together with the limitations of a virtualized environment. This proved that a more sterilized environment was needed in order to reach the expected results