diff --git a/Project1/project_1_maggioni_claudio.pdf b/Project1/project_1_maggioni_claudio.pdf index 00744a3..31771d4 100644 Binary files a/Project1/project_1_maggioni_claudio.pdf and b/Project1/project_1_maggioni_claudio.pdf differ diff --git a/Project1/project_1_maggioni_claudio.tex b/Project1/project_1_maggioni_claudio.tex index 3d9c71b..0428648 100644 --- a/Project1/project_1_maggioni_claudio.tex +++ b/Project1/project_1_maggioni_claudio.tex @@ -320,12 +320,23 @@ In order to achieve a correct and fast execution, my implementation: hits are maximised. The copy operation is implemented with bulk copy \texttt{memcpy} calls. This optimization achieves an extra half of a percentage point in terms of CPU utilization (i.e. from the $6\%$ - discussed above to a final $6.5\%$). + discussed above to roughly $6.5\%$). + \item Exploits some compiler optimizations, namely using the compiler + optimizer at the \texttt{-O3} setting and using the \texttt{-ffast-math} + and \texttt{-march=haswell} to respectively apply some floating point + arithmetic optimizations and to set the compiler target to the exact ISA + of the cluster's processor. Note that these flags are applied to all + implementations used in the benchmark as the flags were added in the + \texttt{Makefile}. In addition, the \texttt{naivemm} algoritms was + inlined in the actual \texttt{dgemm-blocked.c} source code instead of + being separated into a function to be called to achieve better + performance and compiler optimizations. All these changes increased the + CPU utilization from $6.5\%$ to an average of $13.45\%$. \end{itemize} The chosen matrix block size for running the benchmark on the cluster is: -$$s = 26$$ +$$s = 32$$ as shown in the pseudocode. This value has been obtained by running an empirical binary search on the value using the benchmark as a metric, i.e. by running @@ -333,7 +344,7 @@ binary search on the value using the benchmark as a metric, i.e. by running blocks (i.e. the worst case) the total size for the matrix $A$ and $B$ sub-block and the \texttt{C\_temp} temporary matrix block for $C$ is: -$$\mathrm{Bytes} = \mathrm{cellSize} * s^2 * 3 = 8 * 26^2 * 3 = 16224$$ +$$\mathrm{Bytes} = \mathrm{cellSize} * s^2 * 3 = 8 * 32^2 * 3 = 24576$$ given that a double-precision floating point number, the data type used for matrix cells in the scope of this project, is 8 bytes long. The obtained total @@ -396,11 +407,9 @@ caches found on most processors. The results of the matrix multiplication benchmark for the naive, blocked, and BLAS implementations are shown in Figure \ref{fig:bench} as a graph of GFlop/s over matrix size or in Figure \ref{fig:benchtab} as a table. The blocked -implementation achieves on average 50\% more FLOPS than the naive -implementation thanks to the optimisations in space and temporal cache locality -described. However, the blocked implementation achives less than a tenth of -FLOPS compared to Intel MKL BLAS based one due to the microarchitecture -optimization the latter one is able to exploit. +implementation achieves up to 200\% more FLOPS than the naive implementation for +the largest matrix dimensions. However, the blocked implementation achives +roughly an eighth of the FLOPS the Intel MKL BLAS based implementation achieves. I was unable to run this benchmark suite on my personal machine due to Intel MKL installation issues that prevented the code to compile. @@ -423,32 +432,32 @@ installation issues that prevented the code to compile. \makecell{\% CPU} & \makecell{MFLOPS} & \makecell{\% CPU} \\ \midrule - 31 & 2393.33 & 6.50 & 2112.63 & 5.74 & 23449.20 & 63.72 \\ - 32 & 2400.13 & 6.52 & 2187.44 & 5.94 & 28198.90 & 76.63 \\ - 96 & 1998.74 & 5.43 & 2325.39 & 6.32 & 32542.30 & 88.43 \\ - 97 & 1996.01 & 5.42 & 2322.81 & 6.31 & 29801.30 & 80.98 \\ - 127 & 1923.81 & 5.23 & 2330.30 & 6.33 & 28557.80 & 77.60 \\ - 128 & 1731.98 & 4.71 & 2282.93 & 6.20 & 32643.30 & 88.70 \\ - 129 & 1903.31 & 5.17 & 2334.25 & 6.34 & 31198.20 & 84.78 \\ - 191 & 1736.78 & 4.72 & 2345.91 & 6.37 & 32247.30 & 87.63 \\ - 192 & 1694.44 & 4.60 & 2345.38 & 6.37 & 32830.60 & 89.21 \\ - 229 & 1715.10 & 4.66 & 2351.01 & 6.39 & 34360.90 & 93.37 \\ - 255 & 1720.39 & 4.67 & 2335.21 & 6.35 & 33477.70 & 90.97 \\ - 256 & 777.65 & 2.11 & 2306.48 & 6.27 & 33473.90 & 90.96 \\ - 257 & 1729.27 & 4.70 & 2330.68 & 6.33 & 33686.50 & 91.54 \\ - 319 & 1704.80 & 4.63 & 2360.03 & 6.41 & 34335.20 & 93.30 \\ - 320 & 1414.84 & 3.84 & 2364.53 & 6.43 & 36438.10 & 99.02 \\ - 321 & 1741.30 & 4.73 & 2366.38 & 6.43 & 35433.70 & 96.29 \\ - 417 & 1733.00 & 4.71 & 2378.34 & 6.46 & 36133.70 & 98.19 \\ - 479 & 1731.17 & 4.70 & 2233.05 & 6.07 & 32951.40 & 89.54 \\ - 480 & 1678.77 & 4.56 & 2187.87 & 5.95 & 37260.00 & 101.25 \\ - 511 & 1733.60 & 4.71 & 2224.61 & 6.05 & 34128.00 & 92.74 \\ - 512 & 782.96 & 2.13 & 2284.85 & 6.21 & 36526.40 & 99.26 \\ - 639 & 1714.42 & 4.66 & 2292.78 & 6.23 & 35249.20 & 95.79 \\ - 640 & 663.42 & 1.80 & 2264.70 & 6.15 & 36538.70 & 99.29 \\ - 767 & 1690.82 & 4.59 & 2324.83 & 6.32 & 35718.50 & 97.06 \\ - 768 & 792.04 & 2.15 & 2363.92 & 6.42 & 32116.80 & 87.27 \\ - 769 & 1696.95 & 4.61 & 2321.31 & 6.31 & 33033.90 & 89.77 \\ +31 & 3140.45 & 8.53 & 3844.56 & 10.45 & 25677.4 & 69.78 \\ +32 & 3364.78 & 9.14 & 5342.55 & 14.52 & 28952.1 & 78.67 \\ +96 & 2703.08 & 7.35 & 5620.08 & 15.27 & 32816.4 & 89.18 \\ +97 & 2729.68 & 7.42 & 4754.1 & 12.92 & 31699.2 & 86.14 \\ +127 & 2556.58 & 6.95 & 4977.82 & 13.53 & 30274.5 & 82.27 \\ +128 & 1803.41 & 4.90 & 4817.8 & 13.09 & 32721.7 & 88.92 \\ +129 & 2669.26 & 7.25 & 4594.25 & 12.48 & 31746.4 & 86.27 \\ +191 & 2290.09 & 6.22 & 4931.27 & 13.40 & 32263.1 & 87.67 \\ +192 & 1801.66 & 4.90 & 5549.67 & 15.08 & 35491.2 & 96.44 \\ +229 & 2218.61 & 6.03 & 4982.59 & 13.54 & 34557.2 & 93.91 \\ +255 & 2178.15 & 5.92 & 4528.43 & 12.31 & 33771.3 & 91.77 \\ +256 & 808.413 & 2.20 & 4652.68 & 12.64 & 35221.1 & 95.71 \\ +257 & 2238.93 & 6.08 & 4512.33 & 12.26 & 33807.9 & 91.87 \\ +319 & 2174.45 & 5.91 & 5093.38 & 13.84 & 34415.8 & 93.52 \\ +320 & 1612.13 & 4.38 & 5674.61 & 15.42 & 36500.2 & 99.19 \\ +321 & 2173.64 & 5.91 & 5111.09 & 13.89 & 35508.1 & 96.49 \\ +417 & 2125.36 & 5.78 & 5143.98 & 13.98 & 36157.6 & 98.25 \\ +479 & 2107.13 & 5.73 & 5152.51 & 14.00 & 36186.4 & 98.33 \\ +480 & 1848.43 & 5.02 & 5703 & 15.50 & 37971.3 & 103.18 \\ +511 & 2112.99 & 5.74 & 4479.96 & 12.17 & 35144 & 95.50 \\ +512 & 801.127 & 2.18 & 4596.26 & 12.49 & 37362.5 & 101.53 \\ +639 & 1881.94 & 5.11 & 5168.59 & 14.05 & 36989.1 & 100.51 \\ +640 & 815.847 & 2.22 & 5232.97 & 14.22 & 38267.8 & 103.99 \\ +767 & 1825.75 & 4.96 & 4701.09 & 12.77 & 37220.8 & 101.14 \\ +768 & 812.933 & 2.21 & 4826.12 & 13.11 & 38744 & 105.28 \\ +769 & 1825.38 & 4.96 & 4686.21 & 12.73 & 37076.1 & 100.75 \\ \bottomrule \end{tabular} \end{center} diff --git a/Project1/timing.pdf b/Project1/timing.pdf index ffcc0b6..c77fe0f 100644 --- a/Project1/timing.pdf +++ b/Project1/timing.pdf @@ -2,7 +2,7 @@ %âãÏÓ 2 0 obj << -/Length 12476 +/Length 12472 >> stream 0 0 0 RG @@ -371,137 +371,137 @@ S 0.58 0 0.83 RG 105.4 688 m 105.4 727.9 l -317.5 167.1 m -317.3 167.8 l -328.4 215.9 l -328.4 216.7 l -330.7 239.2 l -337 239.9 l -331.3 240.7 l -336.8 287.3 l -338.3 288 l -337.6 315.8 l -337.4 335.3 l -385.4 336.1 l -337.1 336.8 l -338 383.4 l -349.2 384.2 l -336.7 384.9 l -337 457 l -337 503.6 l -338.9 504.3 l -336.9 527.6 l -384.9 528.4 l -337.6 623.8 l -394.9 624.5 l -338.5 719.9 l -384.2 720.7 l -338.2 721.4 l -320.65 167.1 m -314.35 167.1 l -317.5 163.95 m -317.5 170.25 l -320.45 167.8 m -314.15 167.8 l -317.3 164.65 m -317.3 170.95 l -331.55 215.9 m -325.25 215.9 l -328.4 212.75 m -328.4 219.05 l -331.55 216.7 m -325.25 216.7 l -328.4 213.55 m -328.4 219.85 l -333.85 239.2 m -327.55 239.2 l -330.7 236.05 m -330.7 242.35 l -340.15 239.9 m -333.85 239.9 l -337 236.75 m -337 243.05 l -334.45 240.7 m -328.15 240.7 l -331.3 237.55 m -331.3 243.85 l -339.95 287.3 m -333.65 287.3 l -336.8 284.15 m -336.8 290.45 l -341.45 288 m -335.15 288 l -338.3 284.85 m -338.3 291.15 l -340.75 315.8 m -334.45 315.8 l -337.6 312.65 m -337.6 318.95 l -340.55 335.3 m -334.25 335.3 l -337.4 332.15 m -337.4 338.45 l -388.55 336.1 m -382.25 336.1 l -385.4 332.95 m -385.4 339.25 l -340.25 336.8 m -333.95 336.8 l -337.1 333.65 m -337.1 339.95 l -341.15 383.4 m -334.85 383.4 l -338 380.25 m -338 386.55 l -352.35 384.2 m -346.05 384.2 l -349.2 381.05 m -349.2 387.35 l -339.85 384.9 m -333.55 384.9 l -336.7 381.75 m -336.7 388.05 l -340.15 457 m -333.85 457 l -337 453.85 m -337 460.15 l -340.15 503.6 m -333.85 503.6 l -337 500.45 m -337 506.75 l -342.05 504.3 m -335.75 504.3 l -338.9 501.15 m -338.9 507.45 l -340.05 527.6 m -333.75 527.6 l -336.9 524.45 m -336.9 530.75 l -388.05 528.4 m -381.75 528.4 l -384.9 525.25 m -384.9 531.55 l -340.75 623.8 m -334.45 623.8 l -337.6 620.65 m -337.6 626.95 l -398.05 624.5 m -391.75 624.5 l -394.9 621.35 m -394.9 627.65 l -341.65 719.9 m -335.35 719.9 l -338.5 716.75 m -338.5 723.05 l -387.35 720.7 m -381.05 720.7 l -384.2 717.55 m -384.2 723.85 l +301.1 167.1 m +296.9 167.8 l +310.1 215.9 l +309.5 216.7 l +313.5 239.2 l +334.6 239.9 l +310.9 240.7 l +320.1 287.3 l +334.6 288 l +322 315.8 l +323.2 335.3 l +383 336.1 l +321.5 336.8 l +323.3 383.4 l +341.3 384.2 l +323.3 384.9 l +324.6 457 l +325.2 503.6 l +333.1 504.3 l +325 527.6 l +383.6 528.4 l +332 623.8 l +382.5 624.5 l +333.8 719.9 l +382.7 720.7 l +333.8 721.4 l +304.25 167.1 m +297.95 167.1 l +301.1 163.95 m +301.1 170.25 l +300.05 167.8 m +293.75 167.8 l +296.9 164.65 m +296.9 170.95 l +313.25 215.9 m +306.95 215.9 l +310.1 212.75 m +310.1 219.05 l +312.65 216.7 m +306.35 216.7 l +309.5 213.55 m +309.5 219.85 l +316.65 239.2 m +310.35 239.2 l +313.5 236.05 m +313.5 242.35 l +337.75 239.9 m +331.45 239.9 l +334.6 236.75 m +334.6 243.05 l +314.05 240.7 m +307.75 240.7 l +310.9 237.55 m +310.9 243.85 l +323.25 287.3 m +316.95 287.3 l +320.1 284.15 m +320.1 290.45 l +337.75 288 m +331.45 288 l +334.6 284.85 m +334.6 291.15 l +325.15 315.8 m +318.85 315.8 l +322 312.65 m +322 318.95 l +326.35 335.3 m +320.05 335.3 l +323.2 332.15 m +323.2 338.45 l +386.15 336.1 m +379.85 336.1 l +383 332.95 m +383 339.25 l +324.65 336.8 m +318.35 336.8 l +321.5 333.65 m +321.5 339.95 l +326.45 383.4 m +320.15 383.4 l +323.3 380.25 m +323.3 386.55 l +344.45 384.2 m +338.15 384.2 l +341.3 381.05 m +341.3 387.35 l +326.45 384.9 m +320.15 384.9 l +323.3 381.75 m +323.3 388.05 l +327.75 457 m +321.45 457 l +324.6 453.85 m +324.6 460.15 l +328.35 503.6 m +322.05 503.6 l +325.2 500.45 m +325.2 506.75 l +336.25 504.3 m +329.95 504.3 l +333.1 501.15 m +333.1 507.45 l +328.15 527.6 m +321.85 527.6 l +325 524.45 m +325 530.75 l +386.75 528.4 m +380.45 528.4 l +383.6 525.25 m +383.6 531.55 l +335.15 623.8 m +328.85 623.8 l +332 620.65 m +332 626.95 l +385.65 624.5 m +379.35 624.5 l +382.5 621.35 m +382.5 627.65 l +336.95 719.9 m +330.65 719.9 l +333.8 716.75 m +333.8 723.05 l +385.85 720.7 m +379.55 720.7 l +382.7 717.55 m +382.7 723.85 l S -341.35 721.4 m -335.05 721.4 l -338.2 718.25 m -338.2 724.55 l +336.95 721.4 m +330.65 721.4 l +333.8 718.25 m +333.8 724.55 l 108.55 707.9 m 102.25 707.9 l 105.4 704.75 m @@ -519,137 +519,137 @@ S 0 0.62 0.45 RG 119.4 688 m 119.4 727.9 l -325 167.1 m -322.9 167.8 l -319.2 215.9 l -319.3 216.7 l -319.1 239.2 l -320.3 239.9 l -319 240.7 l -318.7 287.3 l -318.7 288 l -318.5 315.8 l -319 335.3 l -319.7 336.1 l -319.1 336.8 l -318.3 383.4 l -318.2 384.2 l -318.2 384.9 l -317.9 457 l -321.7 503.6 l -322.9 504.3 l -321.9 527.6 l -320.3 528.4 l -320.1 623.8 l -320.8 624.5 l -319.2 719.9 l -318.2 720.7 l -319.3 721.4 l -321.85 163.95 m -328.15 170.25 l -328.15 163.95 m -321.85 170.25 l -319.75 164.65 m -326.05 170.95 l -326.05 164.65 m -319.75 170.95 l -316.05 212.75 m -322.35 219.05 l -322.35 212.75 m -316.05 219.05 l -316.15 213.55 m -322.45 219.85 l -322.45 213.55 m -316.15 219.85 l -315.95 236.05 m -322.25 242.35 l -322.25 236.05 m -315.95 242.35 l -317.15 236.75 m -323.45 243.05 l -323.45 236.75 m -317.15 243.05 l -315.85 237.55 m -322.15 243.85 l -322.15 237.55 m -315.85 243.85 l -315.55 284.15 m -321.85 290.45 l -321.85 284.15 m -315.55 290.45 l -315.55 284.85 m -321.85 291.15 l -321.85 284.85 m -315.55 291.15 l -315.35 312.65 m -321.65 318.95 l -321.65 312.65 m -315.35 318.95 l -315.85 332.15 m -322.15 338.45 l -322.15 332.15 m -315.85 338.45 l -316.55 332.95 m -322.85 339.25 l -322.85 332.95 m -316.55 339.25 l -315.95 333.65 m -322.25 339.95 l -322.25 333.65 m -315.95 339.95 l -315.15 380.25 m -321.45 386.55 l -321.45 380.25 m -315.15 386.55 l -315.05 381.05 m -321.35 387.35 l -321.35 381.05 m -315.05 387.35 l -315.05 381.75 m -321.35 388.05 l -321.35 381.75 m -315.05 388.05 l -314.75 453.85 m -321.05 460.15 l -321.05 453.85 m -314.75 460.15 l -318.55 500.45 m -324.85 506.75 l -324.85 500.45 m -318.55 506.75 l -319.75 501.15 m -326.05 507.45 l -326.05 501.15 m -319.75 507.45 l -318.75 524.45 m -325.05 530.75 l -325.05 524.45 m -318.75 530.75 l -317.15 525.25 m -323.45 531.55 l -323.45 525.25 m -317.15 531.55 l -316.95 620.65 m -323.25 626.95 l -323.25 620.65 m -316.95 626.95 l -317.65 621.35 m -323.95 627.65 l -323.95 621.35 m -317.65 627.65 l -316.05 716.75 m -322.35 723.05 l -322.35 716.75 m -316.05 723.05 l -315.05 717.55 m -321.35 723.85 l -321.35 717.55 m -315.05 723.85 l +288.9 167.1 m +269 167.8 l +265.9 215.9 l +276 216.7 l +273.3 239.2 l +275.2 239.9 l +278.1 240.7 l +273.8 287.3 l +266.7 288 l +273.2 315.8 l +279 335.3 l +277.3 336.1 l +279.2 336.8 l +271.9 383.4 l +265.3 384.2 l +271.7 384.9 l +271.3 457 l +271.2 503.6 l +265 504.3 l +279.6 527.6 l +278.1 528.4 l +271 623.8 l +270.2 624.5 l +276.7 719.9 l +275.1 720.7 l +276.9 721.4 l +285.75 163.95 m +292.05 170.25 l +292.05 163.95 m +285.75 170.25 l +265.85 164.65 m +272.15 170.95 l +272.15 164.65 m +265.85 170.95 l +262.75 212.75 m +269.05 219.05 l +269.05 212.75 m +262.75 219.05 l +272.85 213.55 m +279.15 219.85 l +279.15 213.55 m +272.85 219.85 l +270.15 236.05 m +276.45 242.35 l +276.45 236.05 m +270.15 242.35 l +272.05 236.75 m +278.35 243.05 l +278.35 236.75 m +272.05 243.05 l +274.95 237.55 m +281.25 243.85 l +281.25 237.55 m +274.95 243.85 l +270.65 284.15 m +276.95 290.45 l +276.95 284.15 m +270.65 290.45 l +263.55 284.85 m +269.85 291.15 l +269.85 284.85 m +263.55 291.15 l +270.05 312.65 m +276.35 318.95 l +276.35 312.65 m +270.05 318.95 l +275.85 332.15 m +282.15 338.45 l +282.15 332.15 m +275.85 338.45 l +274.15 332.95 m +280.45 339.25 l +280.45 332.95 m +274.15 339.25 l +276.05 333.65 m +282.35 339.95 l +282.35 333.65 m +276.05 339.95 l +268.75 380.25 m +275.05 386.55 l +275.05 380.25 m +268.75 386.55 l +262.15 381.05 m +268.45 387.35 l +268.45 381.05 m +262.15 387.35 l +268.55 381.75 m +274.85 388.05 l +274.85 381.75 m +268.55 388.05 l +268.15 453.85 m +274.45 460.15 l +274.45 453.85 m +268.15 460.15 l +268.05 500.45 m +274.35 506.75 l +274.35 500.45 m +268.05 506.75 l +261.85 501.15 m +268.15 507.45 l +268.15 501.15 m +261.85 507.45 l +276.45 524.45 m +282.75 530.75 l +282.75 524.45 m +276.45 530.75 l +274.95 525.25 m +281.25 531.55 l +281.25 525.25 m +274.95 531.55 l +267.85 620.65 m +274.15 626.95 l +274.15 620.65 m +267.85 626.95 l +267.05 621.35 m +273.35 627.65 l +273.35 621.35 m +267.05 627.65 l +273.55 716.75 m +279.85 723.05 l +279.85 716.75 m +273.55 723.05 l +271.95 717.55 m +278.25 723.85 l +278.25 717.55 m +271.95 723.85 l S -316.15 718.25 m -322.45 724.55 l -322.45 718.25 m -316.15 724.55 l +273.75 718.25 m +280.05 724.55 l +280.05 718.25 m +273.75 724.55 l 116.25 704.75 m 122.55 711.05 l 122.55 704.75 m @@ -667,88 +667,88 @@ S 0.34 0.71 0.91 RG 133.4 688 m 133.4 727.9 l -179.7 167.1 m -168.5 167.8 l -159.9 215.9 l -165.2 216.7 l -167.8 239.2 l -159.7 239.9 l -162.4 240.7 l +174.2 167.1 m +166.9 167.8 l +159.4 215.9 l +161.5 216.7 l +164.2 239.2 l +159.6 239.9 l +161.4 240.7 l 160.4 287.3 l -159.4 288 l -156.6 315.8 l -158.2 335.3 l -158.2 336.1 l -157.8 336.8 l -156.6 383.4 l -153.1 384.2 l -154.7 384.9 l -153.6 457 l -159.1 503.6 l -151.7 504.3 l -157 527.6 l -152.9 528.4 l -155.1 623.8 l -152.9 624.5 l -154.3 719.9 l -160.7 720.7 l -159 721.4 l -182.85 167.1 m -176.55 167.1 l -179.7 163.95 m -179.7 170.25 l -176.55 163.95 m -182.85 170.25 l -182.85 163.95 m -176.55 170.25 l -171.65 167.8 m -165.35 167.8 l -168.5 164.65 m -168.5 170.95 l -165.35 164.65 m -171.65 170.95 l -171.65 164.65 m -165.35 170.95 l -163.05 215.9 m -156.75 215.9 l -159.9 212.75 m -159.9 219.05 l -156.75 212.75 m -163.05 219.05 l -163.05 212.75 m -156.75 219.05 l -168.35 216.7 m -162.05 216.7 l -165.2 213.55 m -165.2 219.85 l -162.05 213.55 m -168.35 219.85 l -168.35 213.55 m -162.05 219.85 l -170.95 239.2 m -164.65 239.2 l -167.8 236.05 m -167.8 242.35 l -164.65 236.05 m -170.95 242.35 l -170.95 236.05 m -164.65 242.35 l -162.85 239.9 m -156.55 239.9 l -159.7 236.75 m -159.7 243.05 l -156.55 236.75 m -162.85 243.05 l -162.85 236.75 m -156.55 243.05 l -165.55 240.7 m -159.25 240.7 l -162.4 237.55 m -162.4 243.85 l -159.25 237.55 m -165.55 243.85 l -165.55 237.55 m -159.25 243.85 l +154.6 288 l +156.3 315.8 l +157.6 335.3 l +155.1 336.1 l +157.6 336.8 l +156.5 383.4 l +153 384.2 l +154.6 384.9 l +153.5 457 l +153.5 503.6 l +150.6 504.3 l +155.2 527.6 l +151.5 528.4 l +152.2 623.8 l +150.1 624.5 l +151.8 719.9 l +149.4 720.7 l +152 721.4 l +177.35 167.1 m +171.05 167.1 l +174.2 163.95 m +174.2 170.25 l +171.05 163.95 m +177.35 170.25 l +177.35 163.95 m +171.05 170.25 l +170.05 167.8 m +163.75 167.8 l +166.9 164.65 m +166.9 170.95 l +163.75 164.65 m +170.05 170.95 l +170.05 164.65 m +163.75 170.95 l +162.55 215.9 m +156.25 215.9 l +159.4 212.75 m +159.4 219.05 l +156.25 212.75 m +162.55 219.05 l +162.55 212.75 m +156.25 219.05 l +164.65 216.7 m +158.35 216.7 l +161.5 213.55 m +161.5 219.85 l +158.35 213.55 m +164.65 219.85 l +164.65 213.55 m +158.35 219.85 l +167.35 239.2 m +161.05 239.2 l +164.2 236.05 m +164.2 242.35 l +161.05 236.05 m +167.35 242.35 l +167.35 236.05 m +161.05 242.35 l +162.75 239.9 m +156.45 239.9 l +159.6 236.75 m +159.6 243.05 l +156.45 236.75 m +162.75 243.05 l +162.75 236.75 m +156.45 243.05 l +164.55 240.7 m +158.25 240.7 l +161.4 237.55 m +161.4 243.85 l +158.25 237.55 m +164.55 243.85 l +164.55 237.55 m +158.25 243.85 l 163.55 287.3 m 157.25 287.3 l 160.4 284.15 m @@ -757,151 +757,151 @@ S 163.55 290.45 l 163.55 284.15 m 157.25 290.45 l -162.55 288 m -156.25 288 l -159.4 284.85 m -159.4 291.15 l -156.25 284.85 m -162.55 291.15 l -162.55 284.85 m -156.25 291.15 l -159.75 315.8 m -153.45 315.8 l -156.6 312.65 m -156.6 318.95 l -153.45 312.65 m -159.75 318.95 l -159.75 312.65 m -153.45 318.95 l -161.35 335.3 m -155.05 335.3 l -158.2 332.15 m -158.2 338.45 l -155.05 332.15 m -161.35 338.45 l -161.35 332.15 m -155.05 338.45 l -161.35 336.1 m -155.05 336.1 l -158.2 332.95 m -158.2 339.25 l -155.05 332.95 m -161.35 339.25 l -161.35 332.95 m -155.05 339.25 l -160.95 336.8 m -154.65 336.8 l -157.8 333.65 m -157.8 339.95 l +157.75 288 m +151.45 288 l +154.6 284.85 m +154.6 291.15 l +151.45 284.85 m +157.75 291.15 l +157.75 284.85 m +151.45 291.15 l +159.45 315.8 m +153.15 315.8 l +156.3 312.65 m +156.3 318.95 l +153.15 312.65 m +159.45 318.95 l +159.45 312.65 m +153.15 318.95 l +160.75 335.3 m +154.45 335.3 l +157.6 332.15 m +157.6 338.45 l +154.45 332.15 m +160.75 338.45 l +160.75 332.15 m +154.45 338.45 l +158.25 336.1 m +151.95 336.1 l +155.1 332.95 m +155.1 339.25 l +151.95 332.95 m +158.25 339.25 l +158.25 332.95 m +151.95 339.25 l +160.75 336.8 m +154.45 336.8 l +157.6 333.65 m +157.6 339.95 l S -154.65 333.65 m -160.95 339.95 l -160.95 333.65 m -154.65 339.95 l -159.75 383.4 m -153.45 383.4 l -156.6 380.25 m -156.6 386.55 l -153.45 380.25 m -159.75 386.55 l -159.75 380.25 m -153.45 386.55 l -156.25 384.2 m -149.95 384.2 l -153.1 381.05 m -153.1 387.35 l -149.95 381.05 m -156.25 387.35 l -156.25 381.05 m -149.95 387.35 l -157.85 384.9 m -151.55 384.9 l -154.7 381.75 m -154.7 388.05 l -151.55 381.75 m -157.85 388.05 l -157.85 381.75 m -151.55 388.05 l -156.75 457 m -150.45 457 l -153.6 453.85 m -153.6 460.15 l -150.45 453.85 m -156.75 460.15 l -156.75 453.85 m -150.45 460.15 l -162.25 503.6 m -155.95 503.6 l -159.1 500.45 m -159.1 506.75 l -155.95 500.45 m -162.25 506.75 l -162.25 500.45 m -155.95 506.75 l -154.85 504.3 m -148.55 504.3 l -151.7 501.15 m -151.7 507.45 l -148.55 501.15 m -154.85 507.45 l -154.85 501.15 m -148.55 507.45 l -160.15 527.6 m -153.85 527.6 l -157 524.45 m -157 530.75 l -153.85 524.45 m -160.15 530.75 l -160.15 524.45 m -153.85 530.75 l -156.05 528.4 m -149.75 528.4 l -152.9 525.25 m -152.9 531.55 l -149.75 525.25 m -156.05 531.55 l -156.05 525.25 m -149.75 531.55 l -158.25 623.8 m -151.95 623.8 l -155.1 620.65 m -155.1 626.95 l -151.95 620.65 m -158.25 626.95 l -158.25 620.65 m -151.95 626.95 l -156.05 624.5 m -149.75 624.5 l -152.9 621.35 m -152.9 627.65 l -149.75 621.35 m -156.05 627.65 l -156.05 621.35 m -149.75 627.65 l -157.45 719.9 m -151.15 719.9 l -154.3 716.75 m -154.3 723.05 l -151.15 716.75 m -157.45 723.05 l -157.45 716.75 m -151.15 723.05 l -163.85 720.7 m -157.55 720.7 l -160.7 717.55 m -160.7 723.85 l -157.55 717.55 m -163.85 723.85 l -163.85 717.55 m -157.55 723.85 l -162.15 721.4 m -155.85 721.4 l -159 718.25 m -159 724.55 l -155.85 718.25 m -162.15 724.55 l -162.15 718.25 m -155.85 724.55 l +154.45 333.65 m +160.75 339.95 l +160.75 333.65 m +154.45 339.95 l +159.65 383.4 m +153.35 383.4 l +156.5 380.25 m +156.5 386.55 l +153.35 380.25 m +159.65 386.55 l +159.65 380.25 m +153.35 386.55 l +156.15 384.2 m +149.85 384.2 l +153 381.05 m +153 387.35 l +149.85 381.05 m +156.15 387.35 l +156.15 381.05 m +149.85 387.35 l +157.75 384.9 m +151.45 384.9 l +154.6 381.75 m +154.6 388.05 l +151.45 381.75 m +157.75 388.05 l +157.75 381.75 m +151.45 388.05 l +156.65 457 m +150.35 457 l +153.5 453.85 m +153.5 460.15 l +150.35 453.85 m +156.65 460.15 l +156.65 453.85 m +150.35 460.15 l +156.65 503.6 m +150.35 503.6 l +153.5 500.45 m +153.5 506.75 l +150.35 500.45 m +156.65 506.75 l +156.65 500.45 m +150.35 506.75 l +153.75 504.3 m +147.45 504.3 l +150.6 501.15 m +150.6 507.45 l +147.45 501.15 m +153.75 507.45 l +153.75 501.15 m +147.45 507.45 l +158.35 527.6 m +152.05 527.6 l +155.2 524.45 m +155.2 530.75 l +152.05 524.45 m +158.35 530.75 l +158.35 524.45 m +152.05 530.75 l +154.65 528.4 m +148.35 528.4 l +151.5 525.25 m +151.5 531.55 l +148.35 525.25 m +154.65 531.55 l +154.65 525.25 m +148.35 531.55 l +155.35 623.8 m +149.05 623.8 l +152.2 620.65 m +152.2 626.95 l +149.05 620.65 m +155.35 626.95 l +155.35 620.65 m +149.05 626.95 l +153.25 624.5 m +146.95 624.5 l +150.1 621.35 m +150.1 627.65 l +146.95 621.35 m +153.25 627.65 l +153.25 621.35 m +146.95 627.65 l +154.95 719.9 m +148.65 719.9 l +151.8 716.75 m +151.8 723.05 l +148.65 716.75 m +154.95 723.05 l +154.95 716.75 m +148.65 723.05 l +152.55 720.7 m +146.25 720.7 l +149.4 717.55 m +149.4 723.85 l +146.25 717.55 m +152.55 723.85 l +152.55 717.55 m +146.25 723.85 l +155.15 721.4 m +148.85 721.4 l +152 718.25 m +152 724.55 l +148.85 718.25 m +155.15 724.55 l +155.15 718.25 m +148.85 724.55 l 136.55 707.9 m 130.25 707.9 l 133.4 704.75 m @@ -1003,8 +1003,8 @@ endobj endobj 10 0 obj << -/CreationDate (D:20221005095851+02'00') -/ModDate (D:20221005095851+02'00') +/CreationDate (D:20221012111655+02'00') +/ModDate (D:20221012111655+02'00') /Producer (PSNormalizer.framework) >> endobj @@ -1018,42 +1018,61 @@ endobj xref 0 12 0000000000 65535 f -0000013424 00000 n +0000013420 00000 n 0000000016 00000 n -0000012545 00000 n -0000012974 00000 n -0000012640 00000 n -0000013569 00000 n -0000012780 00000 n -0000013504 00000 n -0000013531 00000 n -0000013661 00000 n -0000013793 00000 n +0000012541 00000 n +0000012970 00000 n +0000012636 00000 n +0000013565 00000 n +0000012776 00000 n +0000013500 00000 n +0000013527 00000 n +0000013657 00000 n +0000013789 00000 n trailer << /Size 12 /Root 11 0 R /Info 10 0 R -/ID [<963afae776c682a40505ca8923ba08a0><963afae776c682a40505ca8923ba08a0>] +/ID [] >> startxref -13861 +13857 %%EOF 1 0 obj << /Resources 3 0 R /Type /Page /Contents 2 0 R /Rotate 90 /Parent 6 0 R >> endobj 10 0 obj -<< /ModDate (D:20221005075912Z00'00') /Producer (macOS Version 12.5.1 \(Build 21G83\) Quartz PDFContext, AppendMode 1.1) -/CreationDate (D:20221005075851Z00'00') >> +<< /ModDate (D:20221012091746Z00'00') /Producer (macOS Version 12.5.1 \(Build 21G83\) Quartz PDFContext, AppendMode 1.1) +/CreationDate (D:20221012091655Z00'00') >> endobj xref 0 2 0000000000 65535 f -0000014257 00000 n +0000014253 00000 n 10 1 -0000014348 00000 n +0000014344 00000 n trailer -<< /ID [<963AFAE776C682A40505CA8923BA08A0> ] /Root 11 0 R /Size 12 /Prev 13861 /Info 10 0 R >> +<< /ID [<93F4EF582C36CB97494CEA6DB8F4AE5C> ] /Root 11 0 R /Size 12 /Prev 13857 /Info 10 0 R >> startxref -14528 +14524 +%%EOF +1 0 obj +<< /Resources 3 0 R /Type /Page /Rotate 90 /Parent 6 0 R /Contents 2 0 R >> +endobj +10 0 obj +<< /Producer (macOS Version 12.5.1 \(Build 21G83\) Quartz PDFContext, AppendMode 1.1) +/CreationDate (D:20221012091655Z00'00') /ModDate (D:20221012091758Z00'00') +>> +endobj +xref +0 2 +0000000000 65535 f +0000014758 00000 n +10 1 +0000014849 00000 n +trailer +<< /ID [<592C07724370AEA73C6CF788802F0744> ] /Root 11 0 R /Size 12 /Prev 14524 /Info 10 0 R >> +startxref +15029 %%EOF diff --git a/project_1_maggioni_claudio.zip b/project_1_maggioni_claudio.zip index 95137bb..5be1ce6 100644 Binary files a/project_1_maggioni_claudio.zip and b/project_1_maggioni_claudio.zip differ