Chapter 7.2 : La compilation

Comme toujours, on créer un dossier build, dans notre projet, puis on va dedans :

1
2
mkdir build
cd build


On appelle cmake :

cmake ..

-- The C compiler identification is GNU 11.3.0

-- The CXX compiler identification is GNU 11.3.0

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Check for working C compiler: /usr/bin/gcc - skipped

-- Detecting C compile features

-- Detecting C compile features - done

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Check for working CXX compiler: /usr/bin/g++ - skipped

-- Detecting CXX compile features

-- Detecting CXX compile features - done

-- Configuring done

-- Generating done

-- Build files have been written to: XXX/FullHadamardProduct/build



On appelle make :

make

[ 2%] Building CXX object AstericsHPC/CMakeFiles/asterics_hpc.dir/asterics_alloc.cpp.o

[ 5%] Building CXX object AstericsHPC/CMakeFiles/asterics_hpc.dir/timer.cpp.o

[ 8%] Linking CXX shared library libasterics_hpc.so

[ 8%] Built target asterics_hpc

[ 11%] Building CXX object CMakeFiles/hadamard_product_cpp20_seq_O0.dir/main_cpp20.cpp.o

[ 14%] Linking CXX executable hadamard_product_cpp20_seq_O0

[ 14%] Built target hadamard_product_cpp20_seq_O0

[ 17%] Building CXX object CMakeFiles/hadamard_product_cpp20_seq_O1.dir/main_cpp20.cpp.o

[ 20%] Linking CXX executable hadamard_product_cpp20_seq_O1

[ 20%] Built target hadamard_product_cpp20_seq_O1

[ 22%] Building CXX object CMakeFiles/hadamard_product_cpp20_seq_O2.dir/main_cpp20.cpp.o

[ 25%] Linking CXX executable hadamard_product_cpp20_seq_O2

[ 25%] Built target hadamard_product_cpp20_seq_O2

[ 28%] Building CXX object CMakeFiles/hadamard_product_cpp20_unseq_O1.dir/main_cpp20.cpp.o

[ 31%] Linking CXX executable hadamard_product_cpp20_unseq_O1

[ 31%] Built target hadamard_product_cpp20_unseq_O1

[ 34%] Building CXX object CMakeFiles/hadamard_product_cpp20_unseq_O2.dir/main_cpp20.cpp.o

[ 37%] Linking CXX executable hadamard_product_cpp20_unseq_O2

[ 37%] Built target hadamard_product_cpp20_unseq_O2

[ 40%] Building CXX object CMakeFiles/hadamard_product_cpp20_unseq_O3.dir/main_cpp20.cpp.o

[ 42%] Linking CXX executable hadamard_product_cpp20_unseq_O3

[ 42%] Built target hadamard_product_cpp20_unseq_O3

[ 45%] Building CXX object CMakeFiles/hadamard_product_cpp20_unseq_vectorize.dir/main_cpp20.cpp.o

[ 48%] Linking CXX executable hadamard_product_cpp20_unseq_vectorize

[ 48%] Built target hadamard_product_cpp20_unseq_vectorize

[ 51%] Building CXX object CMakeFiles/hadamard_product_cpp20_unseq_vectorize_align.dir/main_cpp20_vectorize.cpp.o

[ 54%] Linking CXX executable hadamard_product_cpp20_unseq_vectorize_align

[ 54%] Built target hadamard_product_cpp20_unseq_vectorize_align

[ 57%] Building CXX object CMakeFiles/hadamard_product_O0.dir/main.cpp.o

[ 60%] Linking CXX executable hadamard_product_O0

[ 60%] Built target hadamard_product_O0

[ 62%] Building CXX object CMakeFiles/hadamard_product_O1.dir/main.cpp.o

[ 65%] Linking CXX executable hadamard_product_O1

[ 65%] Built target hadamard_product_O1

[ 68%] Building CXX object CMakeFiles/hadamard_product_O2.dir/main.cpp.o

[ 71%] Linking CXX executable hadamard_product_O2

[ 71%] Built target hadamard_product_O2

[ 74%] Building CXX object CMakeFiles/hadamard_product_O3.dir/main.cpp.o

[ 77%] Linking CXX executable hadamard_product_O3

[ 77%] Built target hadamard_product_O3

[ 80%] Building CXX object CMakeFiles/hadamard_product_Ofast.dir/main.cpp.o

[ 82%] Linking CXX executable hadamard_product_Ofast

[ 82%] Built target hadamard_product_Ofast

[ 85%] Building CXX object CMakeFiles/hadamard_product_vectorize.dir/main_vectorize.cpp.o

[ 88%] Linking CXX executable hadamard_product_vectorize

[ 88%] Built target hadamard_product_vectorize

[ 91%] Building CXX object CMakeFiles/hadamard_product_intrinsics.dir/main_intrinsics.cpp.o

[ 94%] Linking CXX executable hadamard_product_intrinsics

[ 94%] Built target hadamard_product_intrinsics

[ 97%] Building CXX object CMakeFiles/hadamard_product_intrinsics_interleaved2.dir/main_intrinsics_interleaved2.cpp.o

[100%] Linking CXX executable hadamard_product_intrinsics_interleaved2

[100%] Built target hadamard_product_intrinsics_interleaved2



On lance les tests de performance et on fait les plots :

make plot_all

Consolidate compiler generated dependencies of target asterics_hpc

[ 3%] Built target asterics_hpc

Consolidate compiler generated dependencies of target hadamard_product_intrinsics_interleaved2

[ 5%] Built target hadamard_product_intrinsics_interleaved2

[ 6%] Run hadamard_product_intrinsics_interleaved2 program

Hadamard product intrinsics interleaved 2

evaluateHadamardProduct : nbElement = 1008, cyclePerElement = 0.0714286 cy/el, elapsedTime = 72 cy

evaluateHadamardProduct : nbElement = 1600, cyclePerElement = 0.0675 cy/el, elapsedTime = 108 cy

evaluateHadamardProduct : nbElement = 2000, cyclePerElement = 0.071 cy/el, elapsedTime = 142 cy

evaluateHadamardProduct : nbElement = 2400, cyclePerElement = 0.07125 cy/el, elapsedTime = 171 cy

evaluateHadamardProduct : nbElement = 2656, cyclePerElement = 0.0715361 cy/el, elapsedTime = 190 cy

evaluateHadamardProduct : nbElement = 3008, cyclePerElement = 0.0701463 cy/el, elapsedTime = 211 cy

evaluateHadamardProduct : nbElement = 4000, cyclePerElement = 0.06775 cy/el, elapsedTime = 271 cy

evaluateHadamardProduct : nbElement = 5008, cyclePerElement = 0.177915 cy/el, elapsedTime = 891 cy

evaluateHadamardProduct : nbElement = 10000, cyclePerElement = 0.1769 cy/el, elapsedTime = 1769 cy

[ 6%] Built target run_hadamard_product_intrinsics_interleaved2

Consolidate compiler generated dependencies of target hadamard_product_vectorize

[ 8%] Built target hadamard_product_vectorize

[ 9%] Run hadamard_product_vectorize program

Hadamard product vectorized

evaluateHadamardProduct : nbElement = 1000, cyclePerElement = 0.112 cy/el, elapsedTime = 112 cy, res = 0

evaluateHadamardProduct : nbElement = 1500, cyclePerElement = 0.0866667 cy/el, elapsedTime = 130 cy, res = 0

evaluateHadamardProduct : nbElement = 2000, cyclePerElement = 0.27 cy/el, elapsedTime = 540 cy, res = 0

evaluateHadamardProduct : nbElement = 2500, cyclePerElement = 0.0772 cy/el, elapsedTime = 193 cy, res = 0

evaluateHadamardProduct : nbElement = 2666, cyclePerElement = 0.0851463 cy/el, elapsedTime = 227 cy, res = 0

evaluateHadamardProduct : nbElement = 3000, cyclePerElement = 0.0776667 cy/el, elapsedTime = 233 cy, res = 0

evaluateHadamardProduct : nbElement = 4000, cyclePerElement = 0.07325 cy/el, elapsedTime = 293 cy, res = 0

evaluateHadamardProduct : nbElement = 5000, cyclePerElement = 0.1778 cy/el, elapsedTime = 889 cy, res = 0

evaluateHadamardProduct : nbElement = 10000, cyclePerElement = 0.1784 cy/el, elapsedTime = 1784 cy, res = 0

[ 9%] Built target run_hadamard_product_vectorize

Consolidate compiler generated dependencies of target hadamard_product_intrinsics

[ 12%] Built target hadamard_product_intrinsics

[ 13%] Run hadamard_product_intrinsics program

Hadamard product intrinsics

evaluateHadamardProduct : nbElement = 1000, cyclePerElement = 0.086 cy/el, elapsedTime = 86 cy

evaluateHadamardProduct : nbElement = 1600, cyclePerElement = 0.07625 cy/el, elapsedTime = 122 cy

evaluateHadamardProduct : nbElement = 2000, cyclePerElement = 0.074 cy/el, elapsedTime = 148 cy

evaluateHadamardProduct : nbElement = 2400, cyclePerElement = 0.0729167 cy/el, elapsedTime = 175 cy

evaluateHadamardProduct : nbElement = 2664, cyclePerElement = 0.0713213 cy/el, elapsedTime = 190 cy

evaluateHadamardProduct : nbElement = 3000, cyclePerElement = 0.071 cy/el, elapsedTime = 213 cy

evaluateHadamardProduct : nbElement = 4000, cyclePerElement = 0.06975 cy/el, elapsedTime = 279 cy

evaluateHadamardProduct : nbElement = 5000, cyclePerElement = 0.1784 cy/el, elapsedTime = 892 cy

evaluateHadamardProduct : nbElement = 10000, cyclePerElement = 0.1783 cy/el, elapsedTime = 1783 cy

[ 13%] Built target run_hadamard_product_intrinsics

[ 14%] Call gnuplot hadamardIntrinsicsInterleaved2

[ 17%] Built target plot_hadamardIntrinsicsInterleaved2

Consolidate compiler generated dependencies of target hadamard_product_cpp20_seq_O0

[ 19%] Built target hadamard_product_cpp20_seq_O0

[ 20%] Run hadamard_product_cpp20_seq_O0 program

Hadamard product C++ 20

evaluateHadamardProduct C++20 : nbElement = 1000, cyclePerElement = 21.584 cy/el, elapsedTime = 21584 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 2000, cyclePerElement = 21.397 cy/el, elapsedTime = 42794 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 3000, cyclePerElement = 21.442 cy/el, elapsedTime = 64326 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 5000, cyclePerElement = 21.3828 cy/el, elapsedTime = 106914 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 10000, cyclePerElement = 21.4693 cy/el, elapsedTime = 214693 cy, res = 0

[ 20%] Built target run_hadamard_product_cpp20_seq_O0

Consolidate compiler generated dependencies of target hadamard_product_cpp20_seq_O1

[ 23%] Built target hadamard_product_cpp20_seq_O1

[ 24%] Run hadamard_product_cpp20_seq_O1 program

Hadamard product C++ 20

evaluateHadamardProduct C++20 : nbElement = 1000, cyclePerElement = 0.493 cy/el, elapsedTime = 493 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 2000, cyclePerElement = 0.4775 cy/el, elapsedTime = 955 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 3000, cyclePerElement = 0.469667 cy/el, elapsedTime = 1409 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 5000, cyclePerElement = 0.5568 cy/el, elapsedTime = 2784 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 10000, cyclePerElement = 0.585 cy/el, elapsedTime = 5850 cy, res = 0

[ 24%] Built target run_hadamard_product_cpp20_seq_O1

Consolidate compiler generated dependencies of target hadamard_product_cpp20_seq_O2

[ 26%] Built target hadamard_product_cpp20_seq_O2

[ 27%] Run hadamard_product_cpp20_seq_O2 program

Hadamard product C++ 20

evaluateHadamardProduct C++20 : nbElement = 1000, cyclePerElement = 0.743 cy/el, elapsedTime = 743 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 2000, cyclePerElement = 0.657 cy/el, elapsedTime = 1314 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 3000, cyclePerElement = 0.67 cy/el, elapsedTime = 2010 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 5000, cyclePerElement = 0.695 cy/el, elapsedTime = 3475 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 10000, cyclePerElement = 0.5566 cy/el, elapsedTime = 5566 cy, res = 0

[ 27%] Built target run_hadamard_product_cpp20_seq_O2

Consolidate compiler generated dependencies of target hadamard_product_cpp20_unseq_O1

[ 29%] Built target hadamard_product_cpp20_unseq_O1

[ 30%] Run hadamard_product_cpp20_unseq_O1 program

Hadamard product C++ 20

evaluateHadamardProduct C++20 : nbElement = 1000, cyclePerElement = 0.564 cy/el, elapsedTime = 564 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 2000, cyclePerElement = 0.5515 cy/el, elapsedTime = 1103 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 3000, cyclePerElement = 0.536333 cy/el, elapsedTime = 1609 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 5000, cyclePerElement = 0.5798 cy/el, elapsedTime = 2899 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 10000, cyclePerElement = 0.6147 cy/el, elapsedTime = 6147 cy, res = 0

[ 30%] Built target run_hadamard_product_cpp20_unseq_O1

Consolidate compiler generated dependencies of target hadamard_product_cpp20_unseq_O2

[ 32%] Built target hadamard_product_cpp20_unseq_O2

[ 34%] Run hadamard_product_cpp20_unseq_O2 program

Hadamard product C++ 20

evaluateHadamardProduct C++20 : nbElement = 1000, cyclePerElement = 0.486 cy/el, elapsedTime = 486 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 2000, cyclePerElement = 0.4605 cy/el, elapsedTime = 921 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 3000, cyclePerElement = 0.457 cy/el, elapsedTime = 1371 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 5000, cyclePerElement = 0.5558 cy/el, elapsedTime = 2779 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 10000, cyclePerElement = 0.5802 cy/el, elapsedTime = 5802 cy, res = 0

[ 34%] Built target run_hadamard_product_cpp20_unseq_O2

Consolidate compiler generated dependencies of target hadamard_product_cpp20_unseq_O3

[ 36%] Built target hadamard_product_cpp20_unseq_O3

[ 37%] Run hadamard_product_cpp20_unseq_O3 program

Hadamard product C++ 20

evaluateHadamardProduct C++20 : nbElement = 1000, cyclePerElement = 0.156 cy/el, elapsedTime = 156 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 2000, cyclePerElement = 0.1395 cy/el, elapsedTime = 279 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 3000, cyclePerElement = 0.136333 cy/el, elapsedTime = 409 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 5000, cyclePerElement = 0.175 cy/el, elapsedTime = 875 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 10000, cyclePerElement = 0.1845 cy/el, elapsedTime = 1845 cy, res = 0

[ 37%] Built target run_hadamard_product_cpp20_unseq_O3

Consolidate compiler generated dependencies of target hadamard_product_cpp20_unseq_vectorize

[ 39%] Built target hadamard_product_cpp20_unseq_vectorize

[ 40%] Run hadamard_product_cpp20_unseq_vectorize program

Hadamard product C++ 20

evaluateHadamardProduct C++20 : nbElement = 1000, cyclePerElement = 0.119 cy/el, elapsedTime = 119 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 2000, cyclePerElement = 0.112 cy/el, elapsedTime = 224 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 3000, cyclePerElement = 0.116 cy/el, elapsedTime = 348 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 5000, cyclePerElement = 0.2238 cy/el, elapsedTime = 1119 cy, res = 0

evaluateHadamardProduct C++20 : nbElement = 10000, cyclePerElement = 0.2146 cy/el, elapsedTime = 2146 cy, res = 0

[ 40%] Built target run_hadamard_product_cpp20_unseq_vectorize

Consolidate compiler generated dependencies of target hadamard_product_cpp20_unseq_vectorize_align

[ 42%] Built target hadamard_product_cpp20_unseq_vectorize_align

[ 43%] Run hadamard_product_cpp20_unseq_vectorize_align program

Hadamard product vectorized

evaluateHadamardProduct : nbElement = 1000, cyclePerElement = 0.095 cy/el, elapsedTime = 95 cy, res = 0

evaluateHadamardProduct : nbElement = 1500, cyclePerElement = 0.0793333 cy/el, elapsedTime = 119 cy, res = 0

evaluateHadamardProduct : nbElement = 2000, cyclePerElement = 0.0745 cy/el, elapsedTime = 149 cy, res = 0

evaluateHadamardProduct : nbElement = 2500, cyclePerElement = 0.0728 cy/el, elapsedTime = 182 cy, res = 0

evaluateHadamardProduct : nbElement = 2666, cyclePerElement = 0.0735184 cy/el, elapsedTime = 196 cy, res = 0

evaluateHadamardProduct : nbElement = 3000, cyclePerElement = 0.0716667 cy/el, elapsedTime = 215 cy, res = 0

evaluateHadamardProduct : nbElement = 4000, cyclePerElement = 0.06975 cy/el, elapsedTime = 279 cy, res = 0

evaluateHadamardProduct : nbElement = 5000, cyclePerElement = 0.1784 cy/el, elapsedTime = 892 cy, res = 0

evaluateHadamardProduct : nbElement = 10000, cyclePerElement = 0.178 cy/el, elapsedTime = 1780 cy, res = 0

[ 43%] Built target run_hadamard_product_cpp20_unseq_vectorize_align

Consolidate compiler generated dependencies of target hadamard_product_O0

[ 46%] Built target hadamard_product_O0

[ 47%] Run hadamard_product_O0 program

Hadamard product

evaluateHadamardProduct : nbElement = 1000, cyclePerElement = 1.963 cy/el, elapsedTime = 1963 cy, res = 0

evaluateHadamardProduct : nbElement = 2000, cyclePerElement = 1.944 cy/el, elapsedTime = 3888 cy, res = 0

evaluateHadamardProduct : nbElement = 3000, cyclePerElement = 1.93233 cy/el, elapsedTime = 5797 cy, res = 0

evaluateHadamardProduct : nbElement = 5000, cyclePerElement = 1.9906 cy/el, elapsedTime = 9953 cy, res = 0

evaluateHadamardProduct : nbElement = 10000, cyclePerElement = 1.9927 cy/el, elapsedTime = 19927 cy, res = 0

[ 47%] Built target run_hadamard_product_O0

Consolidate compiler generated dependencies of target hadamard_product_O1

[ 49%] Built target hadamard_product_O1

[ 50%] Run hadamard_product_O1 program

Hadamard product

evaluateHadamardProduct : nbElement = 1000, cyclePerElement = 0.5 cy/el, elapsedTime = 500 cy, res = 0

evaluateHadamardProduct : nbElement = 2000, cyclePerElement = 0.468 cy/el, elapsedTime = 936 cy, res = 0

evaluateHadamardProduct : nbElement = 3000, cyclePerElement = 0.464667 cy/el, elapsedTime = 1394 cy, res = 0

evaluateHadamardProduct : nbElement = 5000, cyclePerElement = 0.5694 cy/el, elapsedTime = 2847 cy, res = 0

evaluateHadamardProduct : nbElement = 10000, cyclePerElement = 0.578 cy/el, elapsedTime = 5780 cy, res = 0

[ 50%] Built target run_hadamard_product_O1

Consolidate compiler generated dependencies of target hadamard_product_O2

[ 52%] Built target hadamard_product_O2

[ 53%] Run hadamard_product_O2 program

Hadamard product

evaluateHadamardProduct : nbElement = 1000, cyclePerElement = 0.481 cy/el, elapsedTime = 481 cy, res = 0

evaluateHadamardProduct : nbElement = 2000, cyclePerElement = 0.4625 cy/el, elapsedTime = 925 cy, res = 0

evaluateHadamardProduct : nbElement = 3000, cyclePerElement = 0.461 cy/el, elapsedTime = 1383 cy, res = 0

evaluateHadamardProduct : nbElement = 5000, cyclePerElement = 0.5578 cy/el, elapsedTime = 2789 cy, res = 0

evaluateHadamardProduct : nbElement = 10000, cyclePerElement = 0.5687 cy/el, elapsedTime = 5687 cy, res = 0

[ 53%] Built target run_hadamard_product_O2

Consolidate compiler generated dependencies of target hadamard_product_O3

[ 56%] Built target hadamard_product_O3

[ 57%] Run hadamard_product_O3 program

Hadamard product

evaluateHadamardProduct : nbElement = 1000, cyclePerElement = 0.174 cy/el, elapsedTime = 174 cy, res = 0

evaluateHadamardProduct : nbElement = 2000, cyclePerElement = 0.1405 cy/el, elapsedTime = 281 cy, res = 0

evaluateHadamardProduct : nbElement = 3000, cyclePerElement = 0.137 cy/el, elapsedTime = 411 cy, res = 0

evaluateHadamardProduct : nbElement = 5000, cyclePerElement = 0.1942 cy/el, elapsedTime = 971 cy, res = 0

evaluateHadamardProduct : nbElement = 10000, cyclePerElement = 0.1847 cy/el, elapsedTime = 1847 cy, res = 0

[ 57%] Built target run_hadamard_product_O3

Consolidate compiler generated dependencies of target hadamard_product_Ofast

[ 59%] Built target hadamard_product_Ofast

[ 60%] Run hadamard_product_Ofast program

Hadamard product

evaluateHadamardProduct : nbElement = 1000, cyclePerElement = 0.158 cy/el, elapsedTime = 158 cy, res = 0

evaluateHadamardProduct : nbElement = 2000, cyclePerElement = 0.141 cy/el, elapsedTime = 282 cy, res = 0

evaluateHadamardProduct : nbElement = 3000, cyclePerElement = 0.137 cy/el, elapsedTime = 411 cy, res = 0

evaluateHadamardProduct : nbElement = 5000, cyclePerElement = 0.1904 cy/el, elapsedTime = 952 cy, res = 0

evaluateHadamardProduct : nbElement = 10000, cyclePerElement = 0.1839 cy/el, elapsedTime = 1839 cy, res = 0

[ 60%] Built target run_hadamard_product_Ofast

[ 60%] Built target run_all

[ 61%] Call gnuplot hadamardBase

[ 67%] Built target plot_hadamardBase

[ 68%] Call gnuplot hadamardCpp20seq

[ 71%] Built target plot_hadamardCpp20seq

[ 72%] Call gnuplot hadamardCpp20unseq

[ 78%] Built target plot_hadamardCpp20unseq

[ 79%] Call gnuplot hadamardBaseCpp20

[ 84%] Built target plot_hadamardBaseCpp20

[ 85%] Call gnuplot hadamardVectorize

[ 90%] Built target plot_hadamardVectorize

[ 91%] Call gnuplot hadamardIntrinsics

[ 94%] Built target plot_hadamardIntrinsics

[ 95%] Call gnuplot hadamardSummary

[100%] Built target plot_hadamardSummary

[100%] Built target plot_all