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 |