diff --git a/build/CMakeFiles/CMakeConfigureLog.yaml b/build/CMakeFiles/CMakeConfigureLog.yaml index ae25ccc..05392f8 100644 --- a/build/CMakeFiles/CMakeConfigureLog.yaml +++ b/build/CMakeFiles/CMakeConfigureLog.yaml @@ -39,8 +39,8 @@ events: checks: - "Detecting CXX compiler ABI info" directories: - source: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-6fQL2C" - binary: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-6fQL2C" + source: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-9KJdFc" + binary: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-9KJdFc" cmakeVariables: CMAKE_CXX_FLAGS: "" CMAKE_CXX_FLAGS_DEBUG: "-g" @@ -49,13 +49,13 @@ events: variable: "CMAKE_CXX_ABI_COMPILED" cached: true stdout: | - Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-6fQL2C' + Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-9KJdFc' - Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_21458/fast - /usr/bin/gmake -f CMakeFiles/cmTC_21458.dir/build.make CMakeFiles/cmTC_21458.dir/build - gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-6fQL2C' - Building CXX object CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o - /usr/bin/c++ -v -o CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_0e288/fast + /usr/bin/gmake -f CMakeFiles/cmTC_0e288.dir/build.make CMakeFiles/cmTC_0e288.dir/build + gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-9KJdFc' + Building CXX object CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o + /usr/bin/c++ -v -o CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp Using built-in specs. COLLECT_GCC=/usr/bin/c++ OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa @@ -65,8 +65,8 @@ events: Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1) - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_21458.dir/' - /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_21458.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccuSiKHJ.s + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e288.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_0e288.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cciEtBVP.s GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04.1) version 13.3.0 (x86_64-linux-gnu) compiled by GNU C version 13.3.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP @@ -87,15 +87,15 @@ events: /usr/include End of search list. Compiler executable checksum: 7896445e4990772fdae9dc0659a99266 - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_21458.dir/' - as -v --64 -o CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccuSiKHJ.s + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e288.dir/' + as -v --64 -o CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o /tmp/cciEtBVP.s GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42 COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.' - Linking CXX executable cmTC_21458 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_21458.dir/link.txt --verbose=1 - /usr/bin/c++ -v CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_21458 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.' + Linking CXX executable cmTC_0e288 + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0e288.dir/link.txt --verbose=1 + /usr/bin/c++ -v CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_0e288 Using built-in specs. COLLECT_GCC=/usr/bin/c++ COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper @@ -108,10 +108,10 @@ events: gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1) COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_21458' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_21458.' - /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccR4K2gF.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_21458 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o - COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_21458' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_21458.' - gmake[1]: Leaving directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-6fQL2C' + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_0e288' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0e288.' + /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccJwGfaM.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_0e288 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_0e288' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0e288.' + gmake[1]: Leaving directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-9KJdFc' exitCode: 0 - @@ -151,13 +151,13 @@ events: message: | Parsed CXX implicit link information: link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - ignore line: [Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-6fQL2C'] + ignore line: [Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-9KJdFc'] ignore line: [] - ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_21458/fast] - ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_21458.dir/build.make CMakeFiles/cmTC_21458.dir/build] - ignore line: [gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-6fQL2C'] - ignore line: [Building CXX object CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o] - ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_0e288/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_0e288.dir/build.make CMakeFiles/cmTC_0e288.dir/build] + ignore line: [gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-9KJdFc'] + ignore line: [Building CXX object CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/usr/bin/c++] ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] @@ -167,8 +167,8 @@ events: ignore line: [Thread model: posix] ignore line: [Supported LTO compression algorithms: zlib zstd] ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_21458.dir/'] - ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_21458.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccuSiKHJ.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e288.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_0e288.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cciEtBVP.s] ignore line: [GNU C++17 (Ubuntu 13.3.0-6ubuntu2~24.04.1) version 13.3.0 (x86_64-linux-gnu)] ignore line: [ compiled by GNU C version 13.3.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP] ignore line: [] @@ -189,15 +189,15 @@ events: ignore line: [ /usr/include] ignore line: [End of search list.] ignore line: [Compiler executable checksum: 7896445e4990772fdae9dc0659a99266] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_21458.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccuSiKHJ.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e288.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o /tmp/cciEtBVP.s] ignore line: [GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42] ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.'] - ignore line: [Linking CXX executable cmTC_21458] - ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_21458.dir/link.txt --verbose=1] - ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_21458 ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_0e288] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0e288.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_0e288 ] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/usr/bin/c++] ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] @@ -210,13 +210,13 @@ events: ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1) ] ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_21458' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_21458.'] - link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccR4K2gF.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_21458 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_0e288' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0e288.'] + link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/ccJwGfaM.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_0e288 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o] arg [/usr/libexec/gcc/x86_64-linux-gnu/13/collect2] ==> ignore arg [-plugin] ==> ignore arg [/usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so] ==> ignore arg [-plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccR4K2gF.res] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccJwGfaM.res] ==> ignore arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore arg [-plugin-opt=-pass-through=-lgcc] ==> ignore arg [-plugin-opt=-pass-through=-lc] ==> ignore @@ -234,7 +234,7 @@ events: arg [-znow] ==> ignore arg [-zrelro] ==> ignore arg [-o] ==> ignore - arg [cmTC_21458] ==> ignore + arg [cmTC_0e288] ==> ignore arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o] arg [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o] arg [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] ==> obj [/usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o] @@ -246,7 +246,7 @@ events: arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] - arg [CMakeFiles/cmTC_21458.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [CMakeFiles/cmTC_0e288.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore arg [-lstdc++] ==> lib [stdc++] arg [-lm] ==> lib [m] arg [-lgcc_s] ==> lib [gcc_s] @@ -281,8 +281,8 @@ events: - "CMakeLists.txt:8 (find_package)" description: "Detecting CXX OpenMP compiler info" directories: - source: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS" - binary: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS" + source: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac" + binary: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac" cmakeVariables: CMAKE_CXX_FLAGS: "" CMAKE_CXX_FLAGS_DEBUG: "-g" @@ -291,13 +291,13 @@ events: variable: "OpenMP_COMPILE_RESULT_CXX_fopenmp" cached: true stdout: | - Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS' + Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac' - Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_b23e5/fast - /usr/bin/gmake -f CMakeFiles/cmTC_b23e5.dir/build.make CMakeFiles/cmTC_b23e5.dir/build - gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS' - Building CXX object CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o - /usr/bin/c++ -fopenmp -v -std=gnu++14 -o CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o -c /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS/OpenMPTryFlag.cpp + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_1afa4/fast + /usr/bin/gmake -f CMakeFiles/cmTC_1afa4.dir/build.make CMakeFiles/cmTC_1afa4.dir/build + gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac' + Building CXX object CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o + /usr/bin/c++ -fopenmp -v -std=gnu++14 -o CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o -c /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac/OpenMPTryFlag.cpp Using built-in specs. COLLECT_GCC=/usr/bin/c++ OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa @@ -307,8 +307,8 @@ events: Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1) - COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_b23e5.dir/' - /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D_REENTRANT /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS/OpenMPTryFlag.cpp -quiet -dumpdir CMakeFiles/cmTC_b23e5.dir/ -dumpbase OpenMPTryFlag.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -std=gnu++14 -version -fopenmp -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccpB51rF.s + COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_1afa4.dir/' + /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D_REENTRANT /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac/OpenMPTryFlag.cpp -quiet -dumpdir CMakeFiles/cmTC_1afa4.dir/ -dumpbase OpenMPTryFlag.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -std=gnu++14 -version -fopenmp -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccvq5etP.s GNU C++14 (Ubuntu 13.3.0-6ubuntu2~24.04.1) version 13.3.0 (x86_64-linux-gnu) compiled by GNU C version 13.3.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.26-GMP @@ -329,15 +329,15 @@ events: /usr/include End of search list. Compiler executable checksum: 7896445e4990772fdae9dc0659a99266 - COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_b23e5.dir/' - as -v --64 -o CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o /tmp/ccpB51rF.s + COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_1afa4.dir/' + as -v --64 -o CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o /tmp/ccvq5etP.s GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42 COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.' - Linking CXX executable cmTC_b23e5 - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b23e5.dir/link.txt --verbose=1 - /usr/bin/c++ -fopenmp -v CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o -o cmTC_b23e5 -v + COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.' + Linking CXX executable cmTC_1afa4 + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1afa4.dir/link.txt --verbose=1 + /usr/bin/c++ -fopenmp -v CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o -o cmTC_1afa4 -v Using built-in specs. COLLECT_GCC=/usr/bin/c++ COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper @@ -351,10 +351,10 @@ events: COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/ LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/ Reading specs from /usr/lib/gcc/x86_64-linux-gnu/13/libgomp.spec - COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-o' 'cmTC_b23e5' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'cmTC_b23e5.' - /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cczYiwNl.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b23e5 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o /usr/lib/gcc/x86_64-linux-gnu/13/crtoffloadbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o -lstdc++ -lm -lgomp -lgcc_s -lgcc -lpthread -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o /usr/lib/gcc/x86_64-linux-gnu/13/crtoffloadend.o - COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-o' 'cmTC_b23e5' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'cmTC_b23e5.' - gmake[1]: Leaving directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS' + COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-o' 'cmTC_1afa4' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'cmTC_1afa4.' + /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4kg3jz.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_1afa4 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o /usr/lib/gcc/x86_64-linux-gnu/13/crtoffloadbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o -lstdc++ -lm -lgomp -lgcc_s -lgcc -lpthread -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o /usr/lib/gcc/x86_64-linux-gnu/13/crtoffloadend.o + COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-o' 'cmTC_1afa4' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'cmTC_1afa4.' + gmake[1]: Leaving directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac' exitCode: 0 - @@ -366,13 +366,13 @@ events: message: | Parsed CXX OpenMP implicit link information from above output: link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - ignore line: [Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS'] + ignore line: [Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac'] ignore line: [] - ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_b23e5/fast] - ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_b23e5.dir/build.make CMakeFiles/cmTC_b23e5.dir/build] - ignore line: [gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS'] - ignore line: [Building CXX object CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o] - ignore line: [/usr/bin/c++ -fopenmp -v -std=gnu++14 -o CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o -c /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS/OpenMPTryFlag.cpp] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_1afa4/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_1afa4.dir/build.make CMakeFiles/cmTC_1afa4.dir/build] + ignore line: [gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac'] + ignore line: [Building CXX object CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o] + ignore line: [/usr/bin/c++ -fopenmp -v -std=gnu++14 -o CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o -c /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac/OpenMPTryFlag.cpp] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/usr/bin/c++] ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] @@ -382,8 +382,8 @@ events: ignore line: [Thread model: posix] ignore line: [Supported LTO compression algorithms: zlib zstd] ignore line: [gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04.1) ] - ignore line: [COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_b23e5.dir/'] - ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D_REENTRANT /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-GvspNS/OpenMPTryFlag.cpp -quiet -dumpdir CMakeFiles/cmTC_b23e5.dir/ -dumpbase OpenMPTryFlag.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -std=gnu++14 -version -fopenmp -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccpB51rF.s] + ignore line: [COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_1afa4.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE -D_REENTRANT /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-Pzeiac/OpenMPTryFlag.cpp -quiet -dumpdir CMakeFiles/cmTC_1afa4.dir/ -dumpbase OpenMPTryFlag.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -std=gnu++14 -version -fopenmp -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/ccvq5etP.s] ignore line: [GNU C++14 (Ubuntu 13.3.0-6ubuntu2~24.04.1) version 13.3.0 (x86_64-linux-gnu)] ignore line: [ compiled by GNU C version 13.3.0 GMP version 6.3.0 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.26-GMP] ignore line: [] @@ -404,15 +404,15 @@ events: ignore line: [ /usr/include] ignore line: [End of search list.] ignore line: [Compiler executable checksum: 7896445e4990772fdae9dc0659a99266] - ignore line: [COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_b23e5.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o /tmp/ccpB51rF.s] + ignore line: [COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_1afa4.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o /tmp/ccvq5etP.s] ignore line: [GNU assembler version 2.42 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.42] ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.'] - ignore line: [Linking CXX executable cmTC_b23e5] - ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b23e5.dir/link.txt --verbose=1] - ignore line: [/usr/bin/c++ -fopenmp -v CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o -o cmTC_b23e5 -v ] + ignore line: [COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-std=gnu++14' '-o' 'CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.'] + ignore line: [Linking CXX executable cmTC_1afa4] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1afa4.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -fopenmp -v CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o -o cmTC_1afa4 -v ] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/usr/bin/c++] ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] @@ -426,13 +426,13 @@ events: ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/13/:/usr/libexec/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/] ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/13/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/13/../../../:/lib/:/usr/lib/] ignore line: [Reading specs from /usr/lib/gcc/x86_64-linux-gnu/13/libgomp.spec] - ignore line: [COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-o' 'cmTC_b23e5' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'cmTC_b23e5.'] - link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cczYiwNl.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_b23e5 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o /usr/lib/gcc/x86_64-linux-gnu/13/crtoffloadbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o -lstdc++ -lm -lgomp -lgcc_s -lgcc -lpthread -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o /usr/lib/gcc/x86_64-linux-gnu/13/crtoffloadend.o] + ignore line: [COLLECT_GCC_OPTIONS='-fopenmp' '-v' '-o' 'cmTC_1afa4' '-v' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread' '-dumpdir' 'cmTC_1afa4.'] + link line: [ /usr/libexec/gcc/x86_64-linux-gnu/13/collect2 -plugin /usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper -plugin-opt=-fresolution=/tmp/cc4kg3jz.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_1afa4 /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/13/crtbeginS.o /usr/lib/gcc/x86_64-linux-gnu/13/crtoffloadbegin.o -L/usr/lib/gcc/x86_64-linux-gnu/13 -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/13/../../.. CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o -lstdc++ -lm -lgomp -lgcc_s -lgcc -lpthread -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/13/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/crtn.o /usr/lib/gcc/x86_64-linux-gnu/13/crtoffloadend.o] arg [/usr/libexec/gcc/x86_64-linux-gnu/13/collect2] ==> ignore arg [-plugin] ==> ignore arg [/usr/libexec/gcc/x86_64-linux-gnu/13/liblto_plugin.so] ==> ignore arg [-plugin-opt=/usr/libexec/gcc/x86_64-linux-gnu/13/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/cczYiwNl.res] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc4kg3jz.res] ==> ignore arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore arg [-plugin-opt=-pass-through=-lgcc] ==> ignore arg [-plugin-opt=-pass-through=-lpthread] ==> ignore @@ -451,7 +451,7 @@ events: arg [-znow] ==> ignore arg [-zrelro] ==> ignore arg [-o] ==> ignore - arg [cmTC_b23e5] ==> ignore + arg [cmTC_1afa4] ==> ignore arg [-L/usr/lib/gcc/x86_64-linux-gnu/13] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13] arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu] arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../../../lib] @@ -460,7 +460,7 @@ events: arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] arg [-L/usr/lib/gcc/x86_64-linux-gnu/13/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/13/../../..] - arg [CMakeFiles/cmTC_b23e5.dir/OpenMPTryFlag.cpp.o] ==> ignore + arg [CMakeFiles/cmTC_1afa4.dir/OpenMPTryFlag.cpp.o] ==> ignore arg [-lstdc++] ==> lib [stdc++] arg [-lm] ==> lib [m] arg [-lgomp] ==> lib [gomp] @@ -492,8 +492,8 @@ events: - "CMakeLists.txt:8 (find_package)" description: "Detecting CXX OpenMP version" directories: - source: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-1AoRnd" - binary: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-1AoRnd" + source: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-ktbnRq" + binary: "/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-ktbnRq" cmakeVariables: CMAKE_CXX_FLAGS: "" CMAKE_CXX_FLAGS_DEBUG: "-g" @@ -502,17 +502,17 @@ events: variable: "OpenMP_SPECTEST_CXX_" cached: true stdout: | - Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-1AoRnd' + Change Dir: '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-ktbnRq' - Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_d43db/fast - /usr/bin/gmake -f CMakeFiles/cmTC_d43db.dir/build.make CMakeFiles/cmTC_d43db.dir/build - gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-1AoRnd' - Building CXX object CMakeFiles/cmTC_d43db.dir/OpenMPCheckVersion.cpp.o - /usr/bin/c++ -fopenmp -std=gnu++14 -o CMakeFiles/cmTC_d43db.dir/OpenMPCheckVersion.cpp.o -c /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-1AoRnd/OpenMPCheckVersion.cpp - Linking CXX executable cmTC_d43db - /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d43db.dir/link.txt --verbose=1 - /usr/bin/c++ -fopenmp CMakeFiles/cmTC_d43db.dir/OpenMPCheckVersion.cpp.o -o cmTC_d43db - gmake[1]: Leaving directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-1AoRnd' + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_b97f2/fast + /usr/bin/gmake -f CMakeFiles/cmTC_b97f2.dir/build.make CMakeFiles/cmTC_b97f2.dir/build + gmake[1]: Entering directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-ktbnRq' + Building CXX object CMakeFiles/cmTC_b97f2.dir/OpenMPCheckVersion.cpp.o + /usr/bin/c++ -fopenmp -std=gnu++14 -o CMakeFiles/cmTC_b97f2.dir/OpenMPCheckVersion.cpp.o -c /home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-ktbnRq/OpenMPCheckVersion.cpp + Linking CXX executable cmTC_b97f2 + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b97f2.dir/link.txt --verbose=1 + /usr/bin/c++ -fopenmp CMakeFiles/cmTC_b97f2.dir/OpenMPCheckVersion.cpp.o -o cmTC_b97f2 + gmake[1]: Leaving directory '/home/atlas/Documents/Git/Flux/build/CMakeFiles/CMakeScratch/TryCompile-ktbnRq' exitCode: 0 ... diff --git a/build/bin/dense-neural-network b/build/bin/dense-neural-network index e826a89..27a9fd6 100755 Binary files a/build/bin/dense-neural-network and b/build/bin/dense-neural-network differ diff --git a/build/examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o b/build/examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o index fee467b..5621ccb 100644 Binary files a/build/examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o and b/build/examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o differ diff --git a/build/examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o.d b/build/examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o.d index 3063bfa..bee9888 100644 --- a/build/examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o.d +++ b/build/examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o.d @@ -210,6 +210,8 @@ examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o: \ /home/atlas/Documents/Git/Flux/include/./numerics/detail/equal_serial.h \ /home/atlas/Documents/Git/Flux/include/./numerics/exp.h \ /home/atlas/Documents/Git/Flux/include/./numerics/detail/exp_serial.h \ + /home/atlas/Documents/Git/Flux/include/./numerics/greater_or_less.h \ + /home/atlas/Documents/Git/Flux/include/./numerics/detail/greater_or_less_serial.h \ /home/atlas/Documents/Git/Flux/include/./numerics/interpolation1d.h \ /home/atlas/Documents/Git/Flux/include/./numerics/interpolation1d/interpolation1d_barycentric.h \ /home/atlas/Documents/Git/Flux/include/./numerics/interpolation1d/interpolation1d_base.h \ @@ -242,8 +244,12 @@ examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o: \ /home/atlas/Documents/Git/Flux/include/./numerics/detail/pow_serial.h \ /home/atlas/Documents/Git/Flux/include/./numerics/random.h \ /home/atlas/Documents/Git/Flux/include/./numerics/detail/random_serial.h \ + /home/atlas/Documents/Git/Flux/include/./numerics/sign.h \ + /home/atlas/Documents/Git/Flux/include/./numerics/detail/sign_serial.h \ /home/atlas/Documents/Git/Flux/include/./numerics/sqrt.h \ /home/atlas/Documents/Git/Flux/include/./numerics/detail/sqrt_serial.h \ + /home/atlas/Documents/Git/Flux/include/./numerics/standard_deviation.h \ + /home/atlas/Documents/Git/Flux/include/./numerics/detail/standard_deviation_serial.h \ /home/atlas/Documents/Git/Flux/include/./numerics/sub.h \ /home/atlas/Documents/Git/Flux/include/./numerics/detail/sub_serial.h \ /home/atlas/Documents/Git/Flux/include/./numerics/sum.h \ @@ -252,23 +258,30 @@ examples/dense-neural-network/CMakeFiles/dense-neural-network.dir/main.cpp.o: \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/neural_networks.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/datasets/spiral.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/datasets/vertical.h \ + /home/atlas/Documents/Git/Flux/include/modules/neural_networks/datasets/sine.h \ + /usr/include/c++/13/math.h \ + /home/atlas/Documents/Git/Flux/include/modules/neural_networks/layers/Layer.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/layers/Dense_Layer.h \ - /home/atlas/Documents/Git/Flux/include/modules/neural_networks/layers/Dropout_Layer.h \ /home/atlas/Documents/Git/Flux/include/random/random.h \ /home/atlas/Documents/Git/Flux/include/random/engine.h \ /home/atlas/Documents/Git/Flux/include/random/uniform.h \ /home/atlas/Documents/Git/Flux/include/random/detail/uniform_serial.h \ /home/atlas/Documents/Git/Flux/include/random/binomial.h \ /home/atlas/Documents/Git/Flux/include/random/detail/binomial_serial.h \ + /home/atlas/Documents/Git/Flux/include/random/normal.h \ + /home/atlas/Documents/Git/Flux/include/random/detail/normal_serial.h \ + /home/atlas/Documents/Git/Flux/include/modules/neural_networks/layers/Dropout_Layer.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/activation_functions/Activation_ReLU.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/activation_functions/Activation_Softmax.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/activation_functions/Activation_Softmax_Loss_CategoricalCrossentropy.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/loss/Loss_CategoricalCrossentrophy.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/loss/Loss.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/activation_functions/Activation_Sigmoid.h \ + /home/atlas/Documents/Git/Flux/include/modules/neural_networks/activation_functions/Activation_Linear.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/loss/Loss_BinaryCrossentropy.h \ + /home/atlas/Documents/Git/Flux/include/modules/neural_networks/loss/Loss_MeanSquaredError.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/optimizers/Optimizer_SGD.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/optimizers/Optimizer_Adagrad.h \ - /usr/include/c++/13/math.h \ /home/atlas/Documents/Git/Flux/include/modules/neural_networks/optimizers/Optimizer_RMSprop.h \ - /home/atlas/Documents/Git/Flux/include/modules/neural_networks/optimizers/Optimizer_Adam.h + /home/atlas/Documents/Git/Flux/include/modules/neural_networks/optimizers/Optimizer_Adam.h \ + /home/atlas/Documents/Git/Flux/include/modules/neural_networks/model/model.h diff --git a/examples/dense-neural-network/Regression-example.txt b/examples/dense-neural-network/Regression-example.txt new file mode 100644 index 0000000..1595ec3 --- /dev/null +++ b/examples/dense-neural-network/Regression-example.txt @@ -0,0 +1,218 @@ +#include "core/omp_config.h" + +#include "utils/utils.h" +#include "numerics/numerics.h" +#include "decomp/decomp.h" + +#include "modules/neural_networks/neural_networks.h" +#include "random/random.h" + + + +//#include +//#include +//#include + + + + + +int main(int argc, char const *argv[]) +{ + + uint64_t number_of_classes = 2; + uint64_t number_of_samples = 1000; + uint64_t number_of_epochs = 10000; + + utils::Mf X; + utils::Mf X_test; + utils::Matrix y; + utils::Matrix y_test; + float data_loss; + float regularization_loss; + float loss; + float accuracy; + + utils::Vector class_targets; + utils::Matrix predictions; + + + // Create dataset + //neural_networks::create_spital_data(number_of_samples, number_of_classes, X, y); + //neural_networks::create_vertical_data(number_of_samples, number_of_classes, X, y); + neural_networks::create_sine_data(number_of_samples, // samples + 2.0f* 3.1415f, // length + X, + y); + + + + + // Create Dense layer with 2 input featues and 3 output values + neural_networks::Dense_Layer dense1( + 1, 64, // input/output + 0.0f, // weight L1 + 5e-5f, // weight L2 + 0.0f, // bias L1 + 5e-5f // bias L2 + ); + neural_networks::Activation_ReLU activation1; + //neural_networks::Dropout_Layer dropout1(0.1); + + neural_networks::Dense_Layer dense2( + 64, 64, // input/output + 0.0f, // weight L1 + 5e-5f, // weight L2 + 0.0f, // bias L1 + 5e-5f // bias L2 + ); + neural_networks::Activation_ReLU activation2; + + + neural_networks::Dense_Layer dense3( + 64, 1, // input/output + 0.0f, // weight L1 + 5e-5f, // weight L2 + 0.0f, // bias L1 + 5e-5f // bias L2 + ); + neural_networks::Activation_Linear activation3; + + + neural_networks::Loss_MeanSquaredError loss_function; + neural_networks::Optimizer_Adam optimizer( + 0.001, // Learning-rate + 1e-3, // Learning-rate decay + 1e-7, // epsilons + 0.9, // beta 1 + 0.999 // beta 2 + ); + + + /* Accuracy precision for accuracy calculation + # There are no really accuracy factor for regression problem, + # but we can simulate/approximate it. We'll calculate it by checking + # how many values have a difference to their ground truth equivalent + # less than given precision + # We'll calculate this precision as a fraction of standard deviation + # of al the ground truth values */ + // accuracy_precision = np.std(y) / 250 + float accuracy_precision = numerics::standard_deviation(y)/ 250.0f; + + + // Train in loop + for (uint64_t epoch = 0; epoch < number_of_epochs+1; ++epoch){ + + // Perform a forward pass of our training data through this layer + dense1.forward(X); + activation1.forward(dense1.outputs); + //dropout1.forward(activation1.outputs); + + dense2.forward(activation1.outputs); + activation2.forward(dense2.outputs); + + dense3.forward(activation2.outputs); + activation3.forward(dense3.outputs); + + // Perform a foard pass through the activation/loss function + // takes the output of the second dense layer here and returns loss + data_loss = loss_function.calculate(activation3.outputs, y); + + // Calculate regularization penalty + regularization_loss = loss_function.regularization_loss(dense1) + + loss_function.regularization_loss(dense2); + + loss = data_loss + regularization_loss; + + predictions = activation3.outputs; + accuracy = numerics::mean(numerics::less( numerics::abs( numerics::sub(predictions, y)), accuracy_precision)); + //accuracy = numerics::mean(numerics::equal_elementwise_serial(predictions, utils::veccast(y.get_col(0)))); + + + if (!(epoch%100) && epoch != 0){ + + std::cout << "epoch: " << epoch; + std::cout << ", acc: " << accuracy; + std::cout << ", loss: " << loss; + std::cout << ", data_loss: " << data_loss; + std::cout << ", regularization_loss: " << regularization_loss; + std::cout << ", lr: " << optimizer.current_learning_rate; + std::cout << std::endl; + + } + + // Backward pass + loss_function.backward(activation3.outputs, y); + + activation3.backward(loss_function.dinputs); + dense3.backward(activation3.dinputs); + + activation2.backward(dense3.dinputs); + dense2.backward(activation2.dinputs); + + activation1.backward(dense2.dinputs); + dense1.backward(activation1.dinputs); + + // Update weights and biases + optimizer.pre_update_params(); + optimizer.update_params(dense1); + optimizer.update_params(dense2); + optimizer.update_params(dense3); + optimizer.post_update_params(); + + } +/* +std::cout << "X, y, pred:" << std::endl; + +for (uint64_t i = 0; i < X.rows(); ++i) { + std::cout << X(i, 0) + << ", " + << y(i, 0) + << ", " + << activation3.outputs(i, 0) + << std::endl; +} + + // Validate the model + + // Create dataset + neural_networks::create_spital_data(100, number_of_classes, X_test, y_test); + + // Perform a forward pass of our training data through this layer + dense1.forward(X_test); + activation1.forward(dense1.outputs); + //dropout1.forward(activation1.outputs); + + dense2.forward(activation1.outputs); + activation2.forward(dense2.outputs); + + dense3.forward(activation2.outputs); + activation3.forward(dense3.outputs); + + // Perform a foard pass through the activation/loss function + // takes the output of the second dense layer here and returns loss + data_loss = loss_activation.calculate(activation3.outputs, y_test); + + // Calculate regularization penalty + regularization_loss = loss_activation.regularization_loss(dense1) + + loss_activation.regularization_loss(dense2) + + loss_activation.regularization_loss(dense3); + + loss = data_loss + regularization_loss; + + + // skal flyttes ned under loss functions. + predictions = activation3.outputs(); + predictions = numerics::mean(numerics::abs(numerics::sub(predictions, y))); + std::cout << predictions << std::endl; + + // Calculate accuracy from output of activation2 and targets + predictions = numerics::greater_than(activation3.outputs, 0.5f).get_col(0); + + accuracy = numerics::mean(numerics::equal_elementwise_serial(predictions, utils::veccast(y_test.get_col(0)))); + + + std::cout << "validation, acc: " << accuracy << ", loss: " << loss << std::endl; +*/ + return 0; +} \ No newline at end of file diff --git a/examples/dense-neural-network/main.cpp b/examples/dense-neural-network/main.cpp index 527305a..1ed010e 100644 --- a/examples/dense-neural-network/main.cpp +++ b/examples/dense-neural-network/main.cpp @@ -21,93 +21,107 @@ int main(int argc, char const *argv[]) { uint64_t number_of_classes = 2; - uint64_t number_of_samples = 150; - uint64_t number_of_epochs = 1000; + uint64_t number_of_samples = 1000; + uint64_t number_of_epochs = 10000; utils::Mf X; utils::Mf X_test; - utils::Matrix y; - utils::Matrix y_test; + utils::Matrix y; + utils::Matrix y_test; float data_loss; float regularization_loss; float loss; float accuracy; utils::Vector class_targets; - utils::Vector predictions; + utils::Matrix predictions; // Create dataset - neural_networks::create_spital_data(number_of_samples, number_of_classes, X, y); + //neural_networks::create_spital_data(number_of_samples, number_of_classes, X, y); //neural_networks::create_vertical_data(number_of_samples, number_of_classes, X, y); + neural_networks::create_sine_data(number_of_samples, // samples + 2.0f* 3.1415f, // length + X, + y); + + + + neural_networks::Model model; // Create Dense layer with 2 input featues and 3 output values neural_networks::Dense_Layer dense1( - 2, 16, // input/output + 1, 64, // input/output 0.0f, // weight L1 - 5e-4f, // weight L2 + 5e-5f, // weight L2 0.0f, // bias L1 - 5e-4f // bias L2 + 5e-5f // bias L2 ); - - // Create ReLU activation (to be used with Dense layer) neural_networks::Activation_ReLU activation1; neural_networks::Dropout_Layer dropout1(0.1); - - - // Create a second Dense layer with 16 inputs (as we take the vlaues from the last layer) - // and 16 output values neural_networks::Dense_Layer dense2( - 16, 16, // input/output + 64, 64, // input/output 0.0f, // weight L1 - 5e-4f, // weight L2 + 5e-5f, // weight L2 0.0f, // bias L1 - 5e-4f // bias L2 + 5e-5f // bias L2 ); - neural_networks::Activation_Softmax activation2; + neural_networks::Activation_ReLU activation2; - // Create a second Dense layer with 3 inputs (as we take the vlaues from the last layer) - // and 3 output values neural_networks::Dense_Layer dense3( - 16, 1, // input/output + 64, 1, // input/output 0.0f, // weight L1 - 5e-4f, // weight L2 + 5e-5f, // weight L2 0.0f, // bias L1 - 5e-4f // bias L2 + 5e-5f // bias L2 ); - neural_networks::Activation_Sigmoid activation3; + neural_networks::Activation_Linear activation3; - // Create a Sfotmax classifier's combined loss and activation - //neural_networks::Activation_Softmax_Loss_CategoricalCrossentropy loss_activation; - neural_networks::Loss_BinaryCrossentropy loss_activation; - - // Create optimizer - //neural_networks::Optimizer_SGD optimizer(1, 1e-3, 0.5); - //neural_networks::Optimizer_Adagrad optimizer(1, 1e-3, 1e-6); - //neural_networks::Optimizer_RMSprop optimizer(1, 1e-3, 1e-6, 0.9); + neural_networks::Loss_MeanSquaredError loss_function; neural_networks::Optimizer_Adam optimizer( - 0.05, // Learning-rate - 5e-5, // Learning-rate decay - 1e-6, // epsilons + 0.001, // Learning-rate + 1e-3, // Learning-rate decay + 1e-7, // epsilons 0.9, // beta 1 0.999 // beta 2 ); + model.add(dense1); + model.add(activation1); + model.add(dropout1); + model.add(dense2); + model.add(activation2); + model.add(dense3); + model.add(activation3); + + + /* Accuracy precision for accuracy calculation + # There are no really accuracy factor for regression problem, + # but we can simulate/approximate it. We'll calculate it by checking + # how many values have a difference to their ground truth equivalent + # less than given precision + # We'll calculate this precision as a fraction of standard deviation + # of al the ground truth values */ + // accuracy_precision = np.std(y) / 250 + /* + float accuracy_precision = numerics::standard_deviation(y)/ 250.0f; + + // Train in loop for (uint64_t epoch = 0; epoch < number_of_epochs+1; ++epoch){ // Perform a forward pass of our training data through this layer dense1.forward(X); activation1.forward(dense1.outputs); - dropout1.forward(activation1.outputs); + //dropout1.forward(activation1.outputs); - dense2.forward(dropout1.outputs); + dense2.forward(activation1.outputs); activation2.forward(dense2.outputs); dense3.forward(activation2.outputs); @@ -115,25 +129,21 @@ int main(int argc, char const *argv[]) // Perform a foard pass through the activation/loss function // takes the output of the second dense layer here and returns loss - data_loss = loss_activation.calculate(activation3.outputs, y); + data_loss = loss_function.calculate(activation3.outputs, y); // Calculate regularization penalty - regularization_loss = loss_activation.regularization_loss(dense1) + - loss_activation.regularization_loss(dense2) + - loss_activation.regularization_loss(dense3); + regularization_loss = loss_function.regularization_loss(dense1) + + loss_function.regularization_loss(dense2); loss = data_loss + regularization_loss; - // Calculate accuracy from output of activation3 and targets - // Part in the brackets returns a binary mask - array consisting - // of True/False values, multiplying it by 1 changes it into array - // of 1s and 0s - predictions = numerics::greater_than(activation3.outputs, 0.5f).get_col(0); - accuracy = numerics::mean(numerics::equal_elementwise_serial(predictions, utils::veccast(y.get_col(0)))); + predictions = activation3.outputs; + accuracy = numerics::mean(numerics::less( numerics::abs( numerics::sub(predictions, y)), accuracy_precision)); + //accuracy = numerics::mean(numerics::equal_elementwise_serial(predictions, utils::veccast(y.get_col(0)))); - if (!(epoch%100)){ - + if (!(epoch%100) && epoch != 0){ + std::cout << "epoch: " << epoch; std::cout << ", acc: " << accuracy; std::cout << ", loss: " << loss; @@ -145,16 +155,15 @@ int main(int argc, char const *argv[]) } // Backward pass - loss_activation.backward(activation3.outputs, y); + loss_function.backward(activation3.outputs, y); - activation3.backward(loss_activation.dinputs); + activation3.backward(loss_function.dinputs); dense3.backward(activation3.dinputs); activation2.backward(dense3.dinputs); dense2.backward(activation2.dinputs); - dropout1.backward(dense2.dinputs); - activation1.backward(dropout1.dinputs); + activation1.backward(dense2.dinputs); dense1.backward(activation1.dinputs); // Update weights and biases @@ -166,6 +175,17 @@ int main(int argc, char const *argv[]) } +std::cout << "X, y, pred:" << std::endl; + +for (uint64_t i = 0; i < X.rows(); ++i) { + std::cout << X(i, 0) + << ", " + << y(i, 0) + << ", " + << activation3.outputs(i, 0) + << std::endl; +} + // Validate the model // Create dataset @@ -193,6 +213,12 @@ int main(int argc, char const *argv[]) loss = data_loss + regularization_loss; + + // skal flyttes ned under loss functions. + predictions = activation3.outputs(); + predictions = numerics::mean(numerics::abs(numerics::sub(predictions, y))); + std::cout << predictions << std::endl; + // Calculate accuracy from output of activation2 and targets predictions = numerics::greater_than(activation3.outputs, 0.5f).get_col(0); @@ -200,6 +226,6 @@ int main(int argc, char const *argv[]) std::cout << "validation, acc: " << accuracy << ", loss: " << loss << std::endl; - +*/ return 0; } \ No newline at end of file diff --git a/include/modules/neural_networks/activation_functions/Activation_Linear.h b/include/modules/neural_networks/activation_functions/Activation_Linear.h new file mode 100644 index 0000000..1423cec --- /dev/null +++ b/include/modules/neural_networks/activation_functions/Activation_Linear.h @@ -0,0 +1,33 @@ +#pragma once + +#include "core/omp_config.h" + +#include "utils/vector.h" +#include "utils/matrix.h" +#include "modules/neural_networks/layers/Layer.h" + + + +namespace neural_networks{ + + template + struct Activation_Linear : Layer{ + + utils::Matrix _inputs; + utils::Matrix outputs; + + utils::Matrix dinputs; + + void forward(const utils::Matrix& inputs){ + _inputs = inputs; + outputs = inputs; + } + void backward(const utils::Matrix& dvalues){ + + dinputs = dvalues; + } + }; + + + +} // end namespace neural_networks \ No newline at end of file diff --git a/include/modules/neural_networks/activation_functions/Activation_ReLU.h b/include/modules/neural_networks/activation_functions/Activation_ReLU.h index a2de5f8..cb07b92 100644 --- a/include/modules/neural_networks/activation_functions/Activation_ReLU.h +++ b/include/modules/neural_networks/activation_functions/Activation_ReLU.h @@ -4,12 +4,12 @@ #include "utils/vector.h" #include "utils/matrix.h" - +#include "modules/neural_networks/layers/Layer.h" namespace neural_networks{ template - struct Activation_ReLU{ + struct Activation_ReLU : Layer{ utils::Matrix _inputs; utils::Matrix outputs; diff --git a/include/modules/neural_networks/activation_functions/Activation_Sigmoid.h b/include/modules/neural_networks/activation_functions/Activation_Sigmoid.h index 2067c45..102cc52 100644 --- a/include/modules/neural_networks/activation_functions/Activation_Sigmoid.h +++ b/include/modules/neural_networks/activation_functions/Activation_Sigmoid.h @@ -4,6 +4,7 @@ #include "utils/vector.h" #include "utils/matrix.h" +#include "modules/neural_networks/layers/Layer.h" #include "numerics/neg.h" #include "numerics/exp.h" @@ -15,7 +16,7 @@ namespace neural_networks{ template - struct Activation_Sigmoid{ + struct Activation_Sigmoid : Layer{ utils::Matrix _inputs; utils::Matrix outputs; diff --git a/include/modules/neural_networks/activation_functions/Activation_Softmax.h b/include/modules/neural_networks/activation_functions/Activation_Softmax.h index 1237718..6e749f9 100644 --- a/include/modules/neural_networks/activation_functions/Activation_Softmax.h +++ b/include/modules/neural_networks/activation_functions/Activation_Softmax.h @@ -4,6 +4,7 @@ #include "utils/vector.h" #include "utils/matrix.h" +#include "modules/neural_networks/layers/Layer.h" #include "numerics/max.h" #include "numerics/sub.h" @@ -15,7 +16,7 @@ namespace neural_networks{ template - struct Activation_Softmax{ + struct Activation_Softmax : Layer{ //utils::Matrix exp_values; //utils::Matrix probabilities; diff --git a/include/modules/neural_networks/activation_functions/Activation_Softmax_Loss_CategoricalCrossentropy.h b/include/modules/neural_networks/activation_functions/Activation_Softmax_Loss_CategoricalCrossentropy.h index 764f4b3..370181f 100644 --- a/include/modules/neural_networks/activation_functions/Activation_Softmax_Loss_CategoricalCrossentropy.h +++ b/include/modules/neural_networks/activation_functions/Activation_Softmax_Loss_CategoricalCrossentropy.h @@ -4,6 +4,7 @@ #include "utils/vector.h" #include "utils/matrix.h" +#include "modules/neural_networks/layers/Layer.h" #include "numerics/max.h" #include "numerics/sub.h" @@ -17,7 +18,7 @@ namespace neural_networks{ template - struct Activation_Softmax_Loss_CategoricalCrossentropy{ + struct Activation_Softmax_Loss_CategoricalCrossentropy : Layer{ neural_networks::Activation_Softmax activation; neural_networks::Loss_CategoricalCrossentrophy loss; diff --git a/include/modules/neural_networks/datasets/sine.h b/include/modules/neural_networks/datasets/sine.h new file mode 100644 index 0000000..d5a58be --- /dev/null +++ b/include/modules/neural_networks/datasets/sine.h @@ -0,0 +1,37 @@ +#pragma once + +#include "./core/omp_config.h" +#include "./utils/matrix.h" +#include "./utils/vector.h" +#include "utils/generators/linspace.h" + +#include /* sin */ + +//#include "./utils/random.h" + +//#include + + +namespace neural_networks{ + + template + void create_sine_data(const uint64_t samples, const T length, utils::Matrix& X, utils::Matrix& y) { + + X.resize(samples, 1); + X.set_col(0, utils::linspace( + T{0}, // start + length, // stop + samples, // N + true // endpoint + )); + + y.resize(samples, 1); + + + for (uint64_t i = 0; i < samples; ++i){ + y(i,0) = std::sin(X(i,0)); + } + } + + +} // end namesoace NN \ No newline at end of file diff --git a/include/modules/neural_networks/layers/Dense_Layer.h b/include/modules/neural_networks/layers/Dense_Layer.h index be4fbde..66b125e 100644 --- a/include/modules/neural_networks/layers/Dense_Layer.h +++ b/include/modules/neural_networks/layers/Dense_Layer.h @@ -4,13 +4,17 @@ #include "utils/vector.h" #include "utils/matrix.h" +#include "Layer.h" + + #include "utils/random.h" +#include "random/random.h" namespace neural_networks{ template - struct Dense_Layer{ + struct Dense_Layer : Layer{ T weight_regularizer_l1 = {0}; T weight_regularizer_l2 = {0}; @@ -48,7 +52,7 @@ namespace neural_networks{ this->bias_regularizer_l1 = bias_regularizer_l1; this->bias_regularizer_l2 = bias_regularizer_l2; - weights.random(n_inputs, n_neurons, -1, 1); + weights = numerics::mul( rng::normal(n_inputs, n_neurons, 0.0f, 1.0f), 0.1f); //weights = numerics::random_matrix(n_inputs, n_neurons, -1, 1); biases.resize(n_neurons, T{0}); diff --git a/include/modules/neural_networks/layers/Dropout_Layer.h b/include/modules/neural_networks/layers/Dropout_Layer.h index 7b8b67e..c7b5a96 100644 --- a/include/modules/neural_networks/layers/Dropout_Layer.h +++ b/include/modules/neural_networks/layers/Dropout_Layer.h @@ -4,13 +4,15 @@ #include "utils/vector.h" #include "utils/matrix.h" +#include "modules/neural_networks/layers/Layer.h" + #include "random/random.h" namespace neural_networks{ template - struct Dropout_Layer{ + struct Dropout_Layer : Layer{ // Store rate, we invert it as for example for dropout // of 0.1 we need a success rate of 0.9 diff --git a/include/modules/neural_networks/layers/Layer.h b/include/modules/neural_networks/layers/Layer.h new file mode 100644 index 0000000..eec201a --- /dev/null +++ b/include/modules/neural_networks/layers/Layer.h @@ -0,0 +1,21 @@ +#pragma once + +#include "core/omp_config.h" + +#include "utils/vector.h" +#include "utils/matrix.h" + +namespace neural_networks{ + + +template + struct Layer { + utils::Matrix outputs; + utils::Matrix dinputs; + + virtual void forward(const utils::Matrix& inputs) = 0; + virtual void backward(const utils::Matrix& dvalues) = 0; + + virtual ~Layer() = default; + }; +} diff --git a/include/modules/neural_networks/loss/Loss.h b/include/modules/neural_networks/loss/Loss.h index 0234a51..52c8da9 100644 --- a/include/modules/neural_networks/loss/Loss.h +++ b/include/modules/neural_networks/loss/Loss.h @@ -10,7 +10,7 @@ namespace neural_networks{ - template + template struct Loss{ utils::Vector sample_losses; diff --git a/include/modules/neural_networks/loss/Loss_MeanAbsoluteError.h b/include/modules/neural_networks/loss/Loss_MeanAbsoluteError.h new file mode 100644 index 0000000..2093eea --- /dev/null +++ b/include/modules/neural_networks/loss/Loss_MeanAbsoluteError.h @@ -0,0 +1,58 @@ +#pragma once + +#include "core/omp_config.h" + +#include "utils/vector.h" +#include "utils/matrix.h" +#include "utils/matcast.h" + +#include "numerics/clip.h" +#include "numerics/log.h" +#include "numerics/sub.h" + +#include "Loss.h" + + +namespace neural_networks{ + + template + struct Loss_MeanAbsoluteError : Loss { + + utils::Matrix dinputs; + utils::Matrix y_true; + + utils::Vector sample_losses; + + + utils::Vector forward(const utils::Matrix& y_pred, const utils::Matrix& y_true) override{ + + + // Calculate loss + sample_losses = numerics::mean_rowwise(numerics::abs(numerics::sub(y_true, y_pred))); + + + // Return losses + return sample_losses; + } + + void backward(const utils::Matrix& dvalues, const utils::Matrix& y_true) override{ + + + // Number of samples + const T samples = static_cast (dvalues.rows()); + // Number of outputs in every sample + const T outputs = static_cast (dvalues.cols()); + + + // Gradient values + dinputs = numerics::div(numerics::sign(numerics::sub(y_true, dvalues)), outputs); + // Normalise gradient + dinputs = numerics::div(dinputs, samples); + + + } + }; + + + +} // end namespace neural_networks \ No newline at end of file diff --git a/include/modules/neural_networks/loss/Loss_MeanSquaredError.h b/include/modules/neural_networks/loss/Loss_MeanSquaredError.h new file mode 100644 index 0000000..2366f05 --- /dev/null +++ b/include/modules/neural_networks/loss/Loss_MeanSquaredError.h @@ -0,0 +1,58 @@ +#pragma once + +#include "core/omp_config.h" + +#include "utils/vector.h" +#include "utils/matrix.h" +#include "utils/matcast.h" + +#include "numerics/clip.h" +#include "numerics/log.h" +#include "numerics/sub.h" + +#include "Loss.h" + + +namespace neural_networks{ + + template + struct Loss_MeanSquaredError : Loss { + + utils::Matrix dinputs; + utils::Matrix y_true; + + utils::Vector sample_losses; + + + utils::Vector forward(const utils::Matrix& y_pred, const utils::Matrix& y_true) override{ + + + // Calculate loss + sample_losses = numerics::mean_rowwise(numerics::pow(numerics::sub(y_true, y_pred), T{2})); + + + // Return losses + return sample_losses; + } + + void backward(const utils::Matrix& dvalues, const utils::Matrix& y_true) override{ + + + // Number of samples + const T samples = static_cast (dvalues.rows()); + // Number of outputs in every sample + const T outputs = static_cast (dvalues.cols()); + + + // Gradient values + dinputs = numerics::mul(numerics::div(numerics::sub(y_true, dvalues), outputs), T{-2}); + // Normalise gradient + dinputs = numerics::div(dinputs, samples); + + + } + }; + + + +} // end namespace neural_networks \ No newline at end of file diff --git a/include/modules/neural_networks/model/model.h b/include/modules/neural_networks/model/model.h new file mode 100644 index 0000000..0a78cf9 --- /dev/null +++ b/include/modules/neural_networks/model/model.h @@ -0,0 +1,30 @@ +#pragma once + +#include "core/omp_config.h" + +#include "utils/vector.h" +#include "utils/matrix.h" + +#include "modules/neural_networks/layers/Layer.h" + + +namespace neural_networks { + + template + struct Model { + + std::vector*> layers; + + Model() = default; + + void add(Layer& layer) { + layers.push_back(&layer); + } + + }; + + + + + +} // end namespace neural_networks \ No newline at end of file diff --git a/include/modules/neural_networks/neural_networks.h b/include/modules/neural_networks/neural_networks.h index 35abaef..475f073 100644 --- a/include/modules/neural_networks/neural_networks.h +++ b/include/modules/neural_networks/neural_networks.h @@ -3,8 +3,9 @@ #include "datasets/spiral.h" #include "datasets/vertical.h" +#include "datasets/sine.h" - +#include "layers/Layer.h" #include "layers/Dense_Layer.h" #include "layers/Dropout_Layer.h" @@ -13,14 +14,21 @@ #include "activation_functions/Activation_Softmax.h" #include "activation_functions/Activation_Softmax_Loss_CategoricalCrossentropy.h" #include "activation_functions/Activation_Sigmoid.h" +#include "activation_functions/Activation_Linear.h" #include "loss/Loss.h" // Base #include "loss/Loss_CategoricalCrossentrophy.h" #include "loss/Loss_BinaryCrossentropy.h" +#include "loss/Loss_MeanSquaredError.h" + + #include "optimizers/Optimizer_SGD.h" #include "optimizers/Optimizer_Adagrad.h" #include "optimizers/Optimizer_RMSprop.h" -#include "optimizers/Optimizer_Adam.h" \ No newline at end of file +#include "optimizers/Optimizer_Adam.h" + + +#include "model/model.h" \ No newline at end of file diff --git a/include/numerics/detail/greater_or_less_serial.h b/include/numerics/detail/greater_or_less_serial.h new file mode 100644 index 0000000..789b049 --- /dev/null +++ b/include/numerics/detail/greater_or_less_serial.h @@ -0,0 +1,622 @@ +#pragma once + +#include //uint64_t + +#include "utils/vector.h" +#include "utils/matrix.h" + + +namespace numerics::detail{ + + + // + // ---------------- Greater - Vectors ---------------- + // + template + inline void inplace_greater_serial(utils::Vector& v, const T c) { + const uint64_t n = v.size(); + + if (n == 0){ + throw std::runtime_error("inplace_greater_serial: empty vector"); + } + + + for (uint64_t i = 0; i < n; ++i){ + if (v[i] < c){ + v[i] = T{0}; + } + else{ + v[i] = T{1}; + } + } + } + template + inline void inplace_greater_serial(utils::Vector& v, const utils::Vector& p) { + const uint64_t n = v.size(); + const uint64_t m = p.size(); + + if (n == 0){ + throw std::runtime_error("inplace_greater_serial: empty vector"); + } + + if (n != m){ + throw std::runtime_error("inplace_greater_serial: vector size mismatch"); + } + + + for (uint64_t i = 0; i < n; ++i){ + if (v[i] < p[i]){ + v[i] = T{0}; + } + else{ + v[i] = T{1}; + } + } + } + // + // ---------------- Greater - Matrices ---------------- + // + template + inline void inplace_greater_serial(utils::Matrix& A, const T c) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_greater_serial: empty matrix"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) < c){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_greater_rowwise_serial(utils::Matrix& A, const utils::Vector& v) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_greater_rowwise_serial: empty matrix"); + } + + if (rows != v.size()){ + throw std::runtime_error("inplace_greater_rowwise_serial: Matrix-Vector size mismatch"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) < v[i]){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_greater_colwise_serial(utils::Matrix& A, const utils::Vector& v) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_greater_colwise_serial: empty matrix"); + } + + if (cols != v.size()){ + throw std::runtime_error("inplace_greater_colwise_serial: Matrix-Vector size mismatch"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) < v[j]){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_greater_serial(utils::Matrix& A, const utils::Matrix& B) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_greater_serial: empty matrix"); + } + + if (rows != B.rows() || cols != B.cols()){ + throw std::runtime_error("inplace_greater_serial: Matrix size mismatch"); + } + + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) < B(i,j)){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + + + + + + + + // + // ---------------- Greater or Equal - Vectors ---------------- + // + template + inline void inplace_greater_equal_serial(utils::Vector& v, const T c) { + const uint64_t n = v.size(); + + if (n == 0){ + throw std::runtime_error("inplace_greater_equal_serial: empty vector"); + } + + + for (uint64_t i = 0; i < n; ++i){ + if (v[i] <= c){ + v[i] = T{0}; + } + else{ + v[i] = T{1}; + } + } + } + template + inline void inplace_greater_equal_serial(utils::Vector& v, const utils::Vector& p) { + const uint64_t n = v.size(); + const uint64_t m = p.size(); + + if (n == 0){ + throw std::runtime_error("inplace_greater_equal_serial: empty vector"); + } + + if (n != m){ + throw std::runtime_error("inplace_greater_equal_serial: vector size mismatch"); + } + + + for (uint64_t i = 0; i < n; ++i){ + if (v[i] <= p[i]){ + v[i] = T{0}; + } + else{ + v[i] = T{1}; + } + } + } + // + // ---------------- Greater - Matrices ---------------- + // + template + inline void inplace_greater_equal_serial(utils::Matrix& A, const T c) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_greater_equal_serial: empty matrix"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) <= c){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_greater_equal_rowwise_serial(utils::Matrix& A, const utils::Vector& v) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_greater_equal_rowwise_serial: empty matrix"); + } + + if (rows != v.size()){ + throw std::runtime_error("inplace_greater_equal_rowwise_serial: Matrix-Vector size mismatch"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) <= v[i]){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_greater_equal_colwise_serial(utils::Matrix& A, const utils::Vector& v) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_greater_equal_colwise_serial: empty matrix"); + } + + if (cols != v.size()){ + throw std::runtime_error("inplace_greater_equal_colwise_serial: Matrix-Vector size mismatch"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) <= v[j]){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_greater_equal_serial(utils::Matrix& A, const utils::Matrix& B) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_greater_equal_serial: empty matrix"); + } + + if (rows != B.rows() || cols != B.cols()){ + throw std::runtime_error("inplace_greater_equal_serial: Matrix size mismatch"); + } + + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) <= B(i,j)){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + + + + + + + + + + + + + + + + // + // ---------------- Less - Vectors ---------------- + // + template + inline void inplace_less_serial(utils::Vector& v, const T c) { + const uint64_t n = v.size(); + + if (n == 0){ + throw std::runtime_error("inplace_less_serial: empty vector"); + } + + + for (uint64_t i = 0; i < n; ++i){ + if (v[i] > c){ + v[i] = T{0}; + } + else{ + v[i] = T{1}; + } + } + } + template + inline void inplace_less_serial(utils::Vector& v, const utils::Vector& p) { + const uint64_t n = v.size(); + const uint64_t m = p.size(); + + if (n == 0){ + throw std::runtime_error("inplace_less_serial: empty vector"); + } + + if (n != m){ + throw std::runtime_error("inplace_less_serial: vector size mismatch"); + } + + + for (uint64_t i = 0; i < n; ++i){ + if (v[i] > p[i]){ + v[i] = T{0}; + } + else{ + v[i] = T{1}; + } + } + } + // + // ---------------- Greater - Matrices ---------------- + // + template + inline void inplace_less_serial(utils::Matrix& A, const T c) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_less_serial: empty matrix"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) > c){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_less_rowwise_serial(utils::Matrix& A, const utils::Vector& v) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_less_rowwise_serial: empty matrix"); + } + + if (rows != v.size()){ + throw std::runtime_error("inplace_less_rowwise_serial: Matrix-Vector size mismatch"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) > v[i]){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_less_colwise_serial(utils::Matrix& A, const utils::Vector& v) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_less_colwise_serial: empty matrix"); + } + + if (cols != v.size()){ + throw std::runtime_error("inplace_less_colwise_serial: Matrix-Vector size mismatch"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) > v[j]){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_less_serial(utils::Matrix& A, const utils::Matrix& B) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_less_serial: empty matrix"); + } + + if (rows != B.rows() || cols != B.cols()){ + throw std::runtime_error("inplace_less_serial: Matrix size mismatch"); + } + + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) > B(i,j)){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + + + + + + + + // + // ---------------- Less or Equal - Vectors ---------------- + // + template + inline void inplace_less_equal_serial(utils::Vector& v, const T c) { + const uint64_t n = v.size(); + + if (n == 0){ + throw std::runtime_error("inplace_less_equal_serial: empty vector"); + } + + + for (uint64_t i = 0; i < n; ++i){ + if (v[i] >= c){ + v[i] = T{0}; + } + else{ + v[i] = T{1}; + } + } + } + template + inline void inplace_less_equal_serial(utils::Vector& v, const utils::Vector& p) { + const uint64_t n = v.size(); + const uint64_t m = p.size(); + + if (n == 0){ + throw std::runtime_error("inplace_less_equal_serial: empty vector"); + } + + if (n != m){ + throw std::runtime_error("inplace_less_equal_serial: vector size mismatch"); + } + + + for (uint64_t i = 0; i < n; ++i){ + if (v[i] >= p[i]){ + v[i] = T{0}; + } + else{ + v[i] = T{1}; + } + } + } + // + // ---------------- Greater - Matrices ---------------- + // + template + inline void inplace_less_equal_serial(utils::Matrix& A, const T c) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_less_equal_serial: empty matrix"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) >= c){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_less_equal_rowwise_serial(utils::Matrix& A, const utils::Vector& v) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_less_equal_rowwise_serial: empty matrix"); + } + + if (rows != v.size()){ + throw std::runtime_error("inplace_less_equal_rowwise_serial: Matrix-Vector size mismatch"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) >= v[i]){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_less_equal_colwise_serial(utils::Matrix& A, const utils::Vector& v) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_less_equal_colwise_serial: empty matrix"); + } + + if (cols != v.size()){ + throw std::runtime_error("inplace_less_equal_colwise_serial: Matrix-Vector size mismatch"); + } + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) >= v[j]){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + template + inline void inplace_less_equal_serial(utils::Matrix& A, const utils::Matrix& B) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + + if (rows == 0 || cols == 0){ + throw std::runtime_error("inplace_less_equal_serial: empty matrix"); + } + + if (rows != B.rows() || cols != B.cols()){ + throw std::runtime_error("inplace_less_equal_serial: Matrix size mismatch"); + } + + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + if (A(i,j) >= B(i,j)){ + A(i,j) = T{0}; + } + else{ + A(i,j) = T{1}; + } + } + } + } + + + + +} // namespace numerics + diff --git a/include/numerics/detail/sign_serial.h b/include/numerics/detail/sign_serial.h new file mode 100644 index 0000000..8c2f919 --- /dev/null +++ b/include/numerics/detail/sign_serial.h @@ -0,0 +1,48 @@ +#pragma once + +#include //uint64_t +#include // std::abs + +#include "utils/vector.h" +#include "utils/matrix.h" + +namespace numerics::detail{ + + + + template + void inplace_sign_serial(T& c) { + if (c < T{0}){ + c = T{-1}; + } + else if(c > T{0}){ + c = T{1}; + } + else{ + c = T{0}; + } + } + + template + void inplace_sign_serial(utils::Vector& v) { + const uint64_t n = v.size(); + for (uint64_t i = 0; i < n; ++i){ + inplace_sign_serial(v[i]); + } + } + + + template + void inplace_sign_serial(utils::Matrix& A) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + inplace_sign_serial(A(i,j)); + } + } + } + + +} // namespace numerics + diff --git a/include/numerics/detail/standard_deviation_serial.h b/include/numerics/detail/standard_deviation_serial.h new file mode 100644 index 0000000..d380f3a --- /dev/null +++ b/include/numerics/detail/standard_deviation_serial.h @@ -0,0 +1,61 @@ +#pragma once + +#include //uint64_t +#include // std::abs + +#include "utils/vector.h" +#include "utils/matrix.h" + +#include "numerics/mean.h" + +namespace numerics::detail{ + + + template + inline T standard_deviation_serial(const utils::Vector& v) { + const uint64_t n = v.size(); + + if (n == 0){ + throw std::runtime_error("std_serial: empty vector"); + } + + const T mean_value = numerics::mean(v); + + T sum_squared_diff = T{0}; + + + for (uint64_t i = 0; i < n; ++i){ + const T diff = v[i] - mean_value; + sum_squared_diff += diff * diff; + } + + const T variance = sum_squared_diff / static_cast(n); + + return numerics::sqrt(variance); + } + + + template + inline T standard_deviation_serial(const utils::Matrix& A) { + const uint64_t rows = A.rows(); + const uint64_t cols = A.cols(); + + const T mean_value = numerics::mean(A); + + T sum_squared_diff = T{0}; + + + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + const T diff = A(i,j) - mean_value; + sum_squared_diff += diff * diff; + } + } + const T variance = sum_squared_diff / static_cast(rows*cols); + + return numerics::sqrt(variance); + } + + +} // namespace numerics + diff --git a/include/numerics/greater_or_less.h b/include/numerics/greater_or_less.h new file mode 100644 index 0000000..488c33f --- /dev/null +++ b/include/numerics/greater_or_less.h @@ -0,0 +1,316 @@ +#pragma once + +#include "./core/omp_config.h" +#include "detail/greater_or_less_serial.h" + + +namespace numerics{ + + + // + // ---------------- Greater - Vectors ---------------- + // + template + inline void inplace_greater(utils::Vector& v, const T c) { + detail::inplace_greater_serial(v, c); + } + template + inline utils::Vector greater(const utils::Vector& v, const T c) { + utils::Vector out = v; + inplace_greater(out, c); + return out; + } + + + template + inline void inplace_greater(utils::Vector& v, const utils::Vector& p) { + detail::inplace_greater_serial(v, p); + } + template + inline utils::Vector greater(const utils::Vector& v, const utils::Vector& p) { + utils::Vector out = v; + inplace_greater(out, p); + return out; + } + + + // + // ---------------- Greater - Matrices ---------------- + // + template + inline void inplace_greater(utils::Matrix& A, const T c) { + detail::inplace_greater_serial(A, c); + } + template + inline utils::Matrix greater(const utils::Matrix& A, const T c) { + utils::Matrix out = A; + inplace_greater(out, c); + return out; + } + + template + inline void inplace_greater_rowwise(utils::Matrix& A, const utils::Vector v) { + detail::inplace_greater_rowwise_serial(A, v); + } + template + inline utils::Matrix greater_rowwise(const utils::Matrix& A, const utils::Vector v) { + utils::Matrix out = A; + inplace_greater_rowwise(out, v); + return out; + } + + template + inline void inplace_greater_colwise(utils::Matrix& A, const utils::Vector v) { + detail::inplace_greater_colwise_serial(A, v); + } + template + inline utils::Matrix greater_colwise(const utils::Matrix& A, const utils::Vector v) { + utils::Matrix out = A; + inplace_greater_colwise(out, v); + return out; + } + + template + inline void inplace_greater(utils::Matrix& A, const utils::Matrix B) { + detail::inplace_greater_serial(A, B); + } + template + inline utils::Matrix greater(const utils::Matrix& A, const utils::Matrix B) { + utils::Matrix out = A; + inplace_greater(out, B); + return out; + } + + + // + // ---------------- Greater or Equal - Vectors ---------------- + // + template + inline void inplace_greater_equal(utils::Vector& v, const T c) { + detail::inplace_greater_equal_serial(v, c); + } + template + inline utils::Vector greater_equal(const utils::Vector& v, const T c) { + utils::Vector out = v; + inplace_greater_equal(out, c); + return out; + } + + + template + inline void inplace_greater_equal(utils::Vector& v, const utils::Vector& p) { + detail::inplace_greater_equal_serial(v, p); + } + template + inline utils::Vector greater_equal(const utils::Vector& v, const utils::Vector& p) { + utils::Vector out = v; + inplace_greater_equal(out, p); + return out; + } + + + // + // ---------------- Greater or Equal - Matrices ---------------- + // + template + inline void inplace_greater_equal(utils::Matrix& A, const T c) { + detail::inplace_greater_equal_serial(A, c); + } + template + inline utils::Matrix greater_equal(const utils::Matrix& A, const T c) { + utils::Matrix out = A; + inplace_greater_equal(out, c); + return out; + } + + template + inline void inplace_greater_equal_rowwise(utils::Matrix& A, const utils::Vector v) { + detail::inplace_greater_equal_rowwise_serial(A, v); + } + template + inline utils::Matrix greater_equal_rowwise(const utils::Matrix& A, const utils::Vector v) { + utils::Matrix out = A; + inplace_greater_equal_rowwise(out, v); + return out; + } + + template + inline void inplace_greater_equal_colwise(utils::Matrix& A, const utils::Vector v) { + detail::inplace_greater_equal_colwise_serial(A, v); + } + template + inline utils::Matrix greater_equal_colwise(const utils::Matrix& A, const utils::Vector v) { + utils::Matrix out = A; + inplace_greater_equal_colwise(out, v); + return out; + } + + template + inline void inplace_greater_equal(utils::Matrix& A, const utils::Matrix B) { + detail::inplace_greater_equal_serial(A, B); + } + template + inline utils::Matrix greater_euqal(const utils::Matrix& A, const utils::Matrix B) { + utils::Matrix out = A; + inplace_greater_equal(out, B); + return out; + } + + + // + // ---------------- Less - Vectors ---------------- + // + template + inline void inplace_less(utils::Vector& v, const T c) { + detail::inplace_less_serial(v, c); + } + template + inline utils::Vector less(const utils::Vector& v, const T c) { + utils::Vector out = v; + inplace_less(out, c); + return out; + } + + + template + inline void inplace_less(utils::Vector& v, const utils::Vector& p) { + detail::inplace_less_serial(v, p); + } + template + inline utils::Vector less(const utils::Vector& v, const utils::Vector& p) { + utils::Vector out = v; + inplace_less(out, p); + return out; + } + + + + + // + // ---------------- Less - Matrices ---------------- + // + template + inline void inplace_less(utils::Matrix& A, const T c) { + detail::inplace_less_serial(A, c); + } + template + inline utils::Matrix less(const utils::Matrix& A, const T c) { + utils::Matrix out = A; + inplace_less(out, c); + return out; + } + + template + inline void inplace_less_rowwise(utils::Matrix& A, const utils::Vector v) { + detail::inplace_less_rowwise_serial(A, v); + } + template + inline utils::Matrix less_rowwise(const utils::Matrix& A, const utils::Vector v) { + utils::Matrix out = A; + inplace_less_rowwise(out, v); + return out; + } + + template + inline void inplace_less_colwise(utils::Matrix& A, const utils::Vector v) { + detail::inplace_less_colwise_serial(A, v); + } + template + inline utils::Matrix less_colwise(const utils::Matrix& A, const utils::Vector v) { + utils::Matrix out = A; + inplace_less_colwise(out, v); + return out; + } + + template + inline void inplace_less(utils::Matrix& A, const utils::Matrix B) { + detail::inplace_less_serial(A, B); + } + template + inline utils::Matrix less(const utils::Matrix& A, const utils::Matrix B) { + utils::Matrix out = A; + inplace_less(out, B); + return out; + } + + + // + // ---------------- Less or Equal - Vectors ---------------- + // + template + inline void inplace_less_equal(utils::Vector& v, const T c) { + detail::inplace_less_equal_serial(v, c); + } + template + inline utils::Vector less_equal(const utils::Vector& v, const T c) { + utils::Vector out = v; + inplace_less_equal(out, c); + return out; + } + + + template + inline void inplace_less_equal(utils::Vector& v, const utils::Vector& p) { + detail::inplace_less_equal_serial(v, p); + } + template + inline utils::Vector less_equal(const utils::Vector& v, const utils::Vector& p) { + utils::Vector out = v; + inplace_less_equal(out, p); + return out; + } + + + // + // ---------------- Less or Equal - Matrices ---------------- + // + template + inline void inplace_less_equal(utils::Matrix& A, const T c) { + detail::inplace_less_equal_serial(A, c); + } + template + inline utils::Matrix less_equal(const utils::Matrix& A, const T c) { + utils::Matrix out = A; + inplace_less_equal(out, c); + return out; + } + + template + inline void inplace_less_equal_rowwise(utils::Matrix& A, const utils::Vector v) { + detail::inplace_less_equal_rowwise_serial(A, v); + } + template + inline utils::Matrix less_equal_rowwise(const utils::Matrix& A, const utils::Vector v) { + utils::Matrix out = A; + inplace_less_equal_rowwise(out, v); + return out; + } + + template + inline void inplace_less_equal_colwise(utils::Matrix& A, const utils::Vector v) { + detail::inplace_less_equal_colwise_serial(A, v); + } + template + inline utils::Matrix less_equal_colwise(const utils::Matrix& A, const utils::Vector v) { + utils::Matrix out = A; + inplace_less_equal_colwise(out, v); + return out; + } + + template + inline void inplace_less_equal(utils::Matrix& A, const utils::Matrix B) { + detail::inplace_less_equal_serial(A, B); + } + template + inline utils::Matrix less_euqal(const utils::Matrix& A, const utils::Matrix B) { + utils::Matrix out = A; + inplace_less_equal(out, B); + return out; + } + + + + + + +} \ No newline at end of file diff --git a/include/numerics/numerics.h b/include/numerics/numerics.h index 9990509..a32a116 100644 --- a/include/numerics/numerics.h +++ b/include/numerics/numerics.h @@ -10,6 +10,7 @@ #include "./numerics/dot.h" #include "./numerics/equal.h" #include "./numerics/exp.h" +#include "./numerics/greater_or_less.h" #include "./numerics/interpolation1d.h" // base #include "./numerics/inverse.h" #include "./numerics/isclose.h" @@ -22,7 +23,9 @@ #include "./numerics/neg.h" #include "./numerics/pow.h" #include "./numerics/random.h" +#include "./numerics/sign.h" #include "./numerics/sqrt.h" +#include "./numerics/standard_deviation.h" #include "./numerics/sub.h" #include "./numerics/sum.h" #include "./numerics/transpose.h" diff --git a/include/numerics/sign.h b/include/numerics/sign.h new file mode 100644 index 0000000..3bbfe81 --- /dev/null +++ b/include/numerics/sign.h @@ -0,0 +1,51 @@ +#pragma once + +#include "./core/omp_config.h" +#include "detail/sign_serial.h" + + +namespace numerics{ + + // ---------------- Elementwise ---------------- + template + inline void inplace_sign(T& c) { + detail::inplace_sign_serial(c); + } + template + inline T sign(const T c) { + T out = c; + inplace_sign(out); + return out; + } + + + + template + inline void inplace_sign(utils::Vector& v) { + detail::inplace_sign_serial(v); + } + + template + inline utils::Vector sign(const utils::Vector& v) { + utils::Vector out = v; + inplace_sign(out); + return out; + } + + + + + template + inline void inplace_sign(utils::Matrix& A) { + detail::inplace_sign_serial(A); + } + + template + inline utils::Matrix sign(const utils::Matrix& A) { + utils::Matrix out = A; + inplace_sign(out); + return out; + } + + +} \ No newline at end of file diff --git a/include/numerics/standard_deviation.h b/include/numerics/standard_deviation.h new file mode 100644 index 0000000..b01e15a --- /dev/null +++ b/include/numerics/standard_deviation.h @@ -0,0 +1,22 @@ +#pragma once + +#include "./core/omp_config.h" +#include "detail/standard_deviation_serial.h" + + +namespace numerics{ + + // ---------------- Elementwise ---------------- + template + inline T standard_deviation(const utils::Vector& v) { + return detail::standard_deviation_serial(v); + } + + template + inline T standard_deviation(const utils::Matrix& A){ + return detail::standard_deviation_serial(A); + } + + + +} \ No newline at end of file diff --git a/include/random/detail/normal_serial.h b/include/random/detail/normal_serial.h new file mode 100644 index 0000000..6e34dcd --- /dev/null +++ b/include/random/detail/normal_serial.h @@ -0,0 +1,57 @@ +#pragma once + +#include "random/engine.h" + +#include +//#include + +#include "utils/matrix.h" +#include "utils/vector.h" + +namespace rng::detail { + + // + // Base functions int + // + template + typename std::enable_if::value, T>::type + normal_serial(const T mean, const T stddev) { + std::normal_distribution dist(mean, stddev); + return dist(rng::engine()); + } + + // + // Base functions float + // + template + typename std::enable_if::value, T>::type + normal_serial(const T mean, const T stddev) { + std::normal_distribution dist(mean, stddev); + return dist(rng::engine()); + } + + template + utils::Vector normal_serial(const uint64_t size, const T mean, const T stddev){ + utils::Vector v(size); + for (uint64_t i = 0; i < size; ++i){ + v[i] = normal_serial(mean, stddev); + } + return v; + } + + template + utils::Matrix normal_serial(const uint64_t rows, const uint64_t cols, const T mean, const T stddev){ + utils::Matrix A(rows, cols); + for (uint64_t i = 0; i < rows; ++i){ + for (uint64_t j = 0; j < cols; ++j){ + A(i,j) = normal_serial(mean, stddev); + } + } + return A; + } + + + + + +} diff --git a/include/random/normal.h b/include/random/normal.h new file mode 100644 index 0000000..a03f966 --- /dev/null +++ b/include/random/normal.h @@ -0,0 +1,28 @@ +#pragma once + + +#include "detail/normal_serial.h" + +namespace rng { + + template + T normal(const T mean, const T stddev) { + return rng::detail::normal_serial(mean, stddev); + } + + template + utils::Vector normal(const uint64_t size, const T mean, const T stddev) { + return rng::detail::normal_serial(size, mean, stddev); + } + + template + utils::Matrix normal(const uint64_t rows, const uint64_t cols, const T mean, const T stddev) { + return rng::detail::normal_serial(rows, cols, mean, stddev); + } + + + + +} + + diff --git a/include/random/random.h b/include/random/random.h index b84333e..15ac7fe 100644 --- a/include/random/random.h +++ b/include/random/random.h @@ -7,5 +7,6 @@ #include "uniform.h" #include "binomial.h" +#include "normal.h"