diff --git a/CMakeLists.txt b/CMakeLists.txt
index 229110d9c1a5b8b202a6811a0a2276f91ba6b73a..8f955f3639e6e4f0b3f91c883f82127badfea772 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2,11 +2,23 @@ cmake_minimum_required(VERSION 3.15)
 
 
 file(READ "${CMAKE_SOURCE_DIR}/version.txt" version)
+add_definitions(-DPROJECT_VERSION="${version}")
 file(READ "${CMAKE_SOURCE_DIR}/project_name.txt" project)
 
 message(STATUS "Project name: ${project}")
 message(STATUS "Project version: ${version}")
 
+execute_process(
+    COMMAND git rev-parse --short HEAD
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+    OUTPUT_VARIABLE GIT_COMMIT_HASH
+    OUTPUT_STRIP_TRAILING_WHITESPACE
+)
+message(STATUS "Latest git commit: ${GIT_COMMIT_HASH}")
+
+# Define a preprocessor macro with the Git commit version
+add_definitions(-DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}")
+
 # Note : project name is {project} and python module name is also {project}
 set(module_name _${project}) # target name
 
diff --git a/include/aidge/utils/sys_info/CpuVersionInfo.hpp b/include/aidge/utils/sys_info/CpuVersionInfo.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..887ce839e079349d9d64505f7184831ffc4cf1c2
--- /dev/null
+++ b/include/aidge/utils/sys_info/CpuVersionInfo.hpp
@@ -0,0 +1,35 @@
+#ifndef AIDGE_UTILS_SYS_INFO_CPU_VERSION_INFO_H
+#define AIDGE_UTILS_SYS_INFO_CPU_VERSION_INFO_H
+
+#include "aidge/utils/Log.hpp"
+
+namespace Aidge {
+
+#ifndef PROJECT_VERSION // Normally defined in CMakeLists.txt
+#define PROJECT_VERSION "Unknown version"
+#endif
+#ifndef GIT_COMMIT_HASH
+#define GIT_COMMIT_HASH ""
+#endif
+void showCpuVersion() {
+    Log::info("Aidge backend CPU: {} ({}), {} {}", PROJECT_VERSION, GIT_COMMIT_HASH, __DATE__, __TIME__);
+        // Compiler version
+    #if defined(__clang__)
+    /* Clang/LLVM. ---------------------------------------------- */
+        Log::info("Clang/LLVM compiler version: {}.{}.{}\n", __clang_major__ , __clang_minor__, __clang_patchlevel__);
+    #elif defined(__ICC) || defined(__INTEL_COMPILER)
+    /* Intel ICC/ICPC. ------------------------------------------ */
+        Log::info("Intel ICC/ICPC compiler version: {}\n", __INTEL_COMPILER);
+    #elif defined(__GNUC__) || defined(__GNUG__)
+    /* GNU GCC/G++. --------------------------------------------- */
+        Log::info("GNU GCC/G++ compiler version: {}.{}.{}", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
+    #elif defined(_MSC_VER)
+    /* Microsoft Visual Studio. --------------------------------- */
+        Log::info("Microsoft Visual Studio compiler version: {}\n", _MSC_VER);
+    #else
+        Log::info("Unknown compiler\n");
+    #endif
+
+}
+}  // namespace Aidge
+#endif  // AIDGE_UTILS_SYS_INFO_CPU_VERSION_INFO_H
diff --git a/python_binding/pybind_cpu.cpp b/python_binding/pybind_cpu.cpp
index 4a325bf51716ee6a920b3fcbde394b3e5b7c1d0f..d5022e1d469ae4171e796baed6c1aa061dd95765 100644
--- a/python_binding/pybind_cpu.cpp
+++ b/python_binding/pybind_cpu.cpp
@@ -6,10 +6,13 @@ namespace py = pybind11;
 
 namespace Aidge {
 
-void init_Aidge(py::module& /*m*/){
+void init_cpu_sys_info(py::module& m);
 
+void init_Aidge(py::module& m){
+    init_cpu_sys_info(m);
 }
 
+
 PYBIND11_MODULE(aidge_backend_cpu, m) {
     init_Aidge(m);
 }
diff --git a/python_binding/utils/sys_info/pybind_CpuVersionInfo.cpp b/python_binding/utils/sys_info/pybind_CpuVersionInfo.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..573bee3659c65f90935e03c06eff5a2998bb9f5b
--- /dev/null
+++ b/python_binding/utils/sys_info/pybind_CpuVersionInfo.cpp
@@ -0,0 +1,9 @@
+#include <pybind11/pybind11.h>
+#include "aidge/utils/sys_info/CpuVersionInfo.hpp"
+
+namespace py = pybind11;
+namespace Aidge {
+void init_cpu_sys_info(py::module& m){
+    m.def("show_cpu_version", &showCpuVersion);
+}
+}
diff --git a/unit_tests/scheduler/Test_Scheduler.cpp b/unit_tests/scheduler/Test_Scheduler.cpp
index a369da2325c0003f06379ce1b56dace3c9f012d1..01ccd37c319ee64deb15240b30cc369b37c9e47d 100644
--- a/unit_tests/scheduler/Test_Scheduler.cpp
+++ b/unit_tests/scheduler/Test_Scheduler.cpp
@@ -419,8 +419,8 @@ TEST_CASE("[cpu/scheduler] SequentialScheduler(backward)", "[scheduler][backward
     compile_gradient(gv);
     SequentialScheduler scheduler(gv);
     scheduler.forward();
-    auto predictedOutput = gv->getOrderedOutputs()[0].first;
-
+    auto outNode = gv->getOrderedOutputs()[0].first;
+    std::shared_ptr<Tensor> predictedOutput = std::dynamic_pointer_cast<OperatorTensor>(outNode->getOperator())->getOutput(0);
     std::shared_ptr<Tensor> targetOutput =
           std::make_shared<Tensor>(Array4D<float, 2, 1, 5, 5>{{{{{0.0f, 1.0f, 1.0f, 2.0f, 2.0f},
                                                                  {2.0f, 2.0f, 3.0f, 3.0f, 3.0f},
@@ -432,7 +432,8 @@ TEST_CASE("[cpu/scheduler] SequentialScheduler(backward)", "[scheduler][backward
                                                                  {6.0f, 6.0f, 6.0f, 6.0f, 6.0f},
                                                                  {6.0f, 6.0f, 6.0f, 7.0f, 7.0f},
                                                                  {7.0f, 7.0f, 7.0f, 7.0f, 7.0f}}}}});
-
-    REQUIRE_NOTHROW(scheduler.backward({targetOutput}));
+    predictedOutput->initGrad();
+    predictedOutput->setGrad(targetOutput);
+    REQUIRE_NOTHROW(scheduler.backward());
 }
 } // namespace Aidge