diff --git a/meson.build b/meson.build index fd94db5f5b..0d10f8df92 100644 --- a/meson.build +++ b/meson.build @@ -134,6 +134,11 @@ if get_option('enable-fp16') endif endif +if get_option('enable-mmap') + message ('MMAP enabled') + extra_defines += '-DUSE_MMAP=1' +endif + if get_option('enable-opencl') message ('OpenCL build is enabled. Will work only if OpenCL supported GPU is available.') extra_defines += '-DENABLE_OPENCL=1' diff --git a/meson_options.txt b/meson_options.txt index ee3119b4e8..0d4aac4f53 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -17,6 +17,7 @@ option('enable-memory-swap', type: 'boolean', value: false) option('memory-swap-path', type: 'string', value: '') option('test-timeout', type: 'integer', value: 60) option('opencl-kernel-path', type: 'string', value: 'nntrainer_opencl_kernels') +option('enable-mmap', type: 'boolean', value: true) # dependency conflict resolution option('capi-ml-inference-actual', type: 'string', value: 'capi-ml-inference', diff --git a/nntrainer/app_context.cpp b/nntrainer/app_context.cpp index 8bac75b8c6..23b14cb61a 100644 --- a/nntrainer/app_context.cpp +++ b/nntrainer/app_context.cpp @@ -222,14 +222,6 @@ const std::string getFullPath(const std::string &path, std::mutex factory_mutex; -/** - * @brief finalize global context - * - */ -static void fini_global_context_nntrainer(void) __attribute__((destructor)); - -static void fini_global_context_nntrainer(void) {} - std::once_flag global_app_context_init_flag; static void add_default_object(AppContext &ac) { diff --git a/nntrainer/compiler/remap_realizer.h b/nntrainer/compiler/remap_realizer.h index 76e26a0e91..a35e2af684 100644 --- a/nntrainer/compiler/remap_realizer.h +++ b/nntrainer/compiler/remap_realizer.h @@ -14,6 +14,7 @@ #include #include +#include #include #include diff --git a/nntrainer/dataset/databuffer.cpp b/nntrainer/dataset/databuffer.cpp index f58ce05e98..9d339f401c 100644 --- a/nntrainer/dataset/databuffer.cpp +++ b/nntrainer/dataset/databuffer.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -61,9 +62,7 @@ class PropsBufferSize : public nntrainer::PositiveIntegerProperty { constexpr char USER_DATA[] = "user_data"; DataBuffer::DataBuffer(std::unique_ptr &&producer_) : - producer(std::move(producer_)), - db_props(new Props()), - user_data(nullptr) { + producer(std::move(producer_)), db_props(new Props()), user_data(nullptr) { rng.seed(0); } diff --git a/nntrainer/dataset/dir_data_producers.cpp b/nntrainer/dataset/dir_data_producers.cpp index 96cf95c0f8..7ef2484e7e 100644 --- a/nntrainer/dataset/dir_data_producers.cpp +++ b/nntrainer/dataset/dir_data_producers.cpp @@ -104,7 +104,7 @@ DirDataProducer::finalize(const std::vector &input_dims, const auto &dir_path = std::get(*dir_data_props).get(); for (const auto &entry : std::filesystem::directory_iterator(dir_path)) - class_names.push_back(entry.path()); + class_names.push_back(entry.path().string()); num_class = class_names.size(); diff --git a/nntrainer/layers/acti_func.h b/nntrainer/layers/acti_func.h index 3a8dc0fe0d..d54f0a1bee 100644 --- a/nntrainer/layers/acti_func.h +++ b/nntrainer/layers/acti_func.h @@ -19,6 +19,11 @@ #include #include +#if defined(_WIN32) +#define _USE_MATH_DEFINES +#include +#endif + namespace nntrainer { class Tensor; diff --git a/nntrainer/layers/dropout.h b/nntrainer/layers/dropout.h index 2e71432b7d..ca81be33d3 100644 --- a/nntrainer/layers/dropout.h +++ b/nntrainer/layers/dropout.h @@ -29,8 +29,8 @@ class DropOutLayer : public Layer { /** * @brief Constructor of DropOut Layer */ - DropOutLayer(float dropout = 0.0) : - Layer(), dropout_rate(props::DropOutRate(dropout)), epsilon(1e-3) {} + DropOutLayer(float dropout = 0.0f) : + Layer(), dropout_rate(props::DropOutRate(dropout)), epsilon(1e-3f) {} /** * @brief Destructor of DropOut Layer diff --git a/nntrainer/layers/rnn.cpp b/nntrainer/layers/rnn.cpp index 5e50a8484a..fff528882c 100644 --- a/nntrainer/layers/rnn.cpp +++ b/nntrainer/layers/rnn.cpp @@ -44,7 +44,7 @@ RNNLayer::RNNLayer() : props::Unit(), props::HiddenStateActivation() = ActivationType::ACT_TANH, props::ReturnSequences(), props::DropOutRate(), props::IntegrateBias()), acti_func(ActivationType::ACT_NONE, true), - epsilon(1e-3) { + epsilon(1e-3f) { wt_idx.fill(std::numeric_limits::max()); } diff --git a/nntrainer/layers/rnncell.cpp b/nntrainer/layers/rnncell.cpp index eefbfa1b6f..f7220e705d 100644 --- a/nntrainer/layers/rnncell.cpp +++ b/nntrainer/layers/rnncell.cpp @@ -45,7 +45,7 @@ RNNCellLayer::RNNCellLayer() : props::HiddenStateActivation() = ActivationType::ACT_TANH, props::DropOutRate()), acti_func(ActivationType::ACT_NONE, true), - epsilon(1e-3) { + epsilon(1e-3f) { wt_idx.fill(std::numeric_limits::max()); } diff --git a/nntrainer/models/dynamic_training_optimization.cpp b/nntrainer/models/dynamic_training_optimization.cpp index a37a569446..d16995f53b 100644 --- a/nntrainer/models/dynamic_training_optimization.cpp +++ b/nntrainer/models/dynamic_training_optimization.cpp @@ -11,6 +11,7 @@ * */ +#include #include #include diff --git a/nntrainer/nntrainer_log.h b/nntrainer/nntrainer_log.h index 751cdfe864..88737f25bf 100644 --- a/nntrainer/nntrainer_log.h +++ b/nntrainer/nntrainer_log.h @@ -56,27 +56,27 @@ #include #if !defined(ml_logi) -#define ml_logi(format, args...) \ +#define ml_logi(format, ...) \ __nntrainer_log_print(NNTRAINER_LOG_INFO, "(%s:%s:%d) " format, __FILE__, \ - __func__, __LINE__, ##args) + __func__, __LINE__, ##__VA_ARGS__) #endif #if !defined(ml_logw) -#define ml_logw(format, args...) \ +#define ml_logw(format, ...) \ __nntrainer_log_print(NNTRAINER_LOG_WARN, "(%s:%s:%d) " format, __FILE__, \ - __func__, __LINE__, ##args) + __func__, __LINE__, ##__VA_ARGS__) #endif #if !defined(ml_loge) -#define ml_loge(format, args...) \ +#define ml_loge(format, ...) \ __nntrainer_log_print(NNTRAINER_LOG_ERROR, "(%s:%s:%d) " format, __FILE__, \ - __func__, __LINE__, ##args) + __func__, __LINE__, ##__VA_ARGS__) #endif #if !defined(ml_logd) -#define ml_logd(format, args...) \ +#define ml_logd(format, ...) \ __nntrainer_log_print(NNTRAINER_LOG_DEBUG, "(%s:%s:%d) " format, __FILE__, \ - __func__, __LINE__, ##args) + __func__, __LINE__, ##__VA_ARGS__) #endif #endif diff --git a/nntrainer/nntrainer_logger.cpp b/nntrainer/nntrainer_logger.cpp index fd3ea2c7f9..527e296c1e 100644 --- a/nntrainer/nntrainer_logger.cpp +++ b/nntrainer/nntrainer_logger.cpp @@ -30,7 +30,6 @@ #include #include #include -#include #include namespace nntrainer { @@ -78,7 +77,9 @@ Logger::Logger() : ts_type(NNTRAINER_LOG_TIMESTAMP_SEC) { << std::setw(2) << now.tm_sec << ".out"; outputstream.open(ss.str(), std::ios_base::app); if (!outputstream.good()) { - char buf[256] = {0,}; + char buf[256] = { + 0, + }; std::string cur_path = std::string(buf); std::string err_msg = "Unable to initialize the Logger on path(" + cur_path + ")"; diff --git a/nntrainer/optimizers/lr_scheduler_cosine.cpp b/nntrainer/optimizers/lr_scheduler_cosine.cpp index aff4bc47bc..974ac1d92d 100644 --- a/nntrainer/optimizers/lr_scheduler_cosine.cpp +++ b/nntrainer/optimizers/lr_scheduler_cosine.cpp @@ -11,7 +11,12 @@ * */ +#if defined(_WIN32) +#define _USE_MATH_DEFINES +#include +#else #include +#endif #include #include diff --git a/nntrainer/tensor/float_tensor.cpp b/nntrainer/tensor/float_tensor.cpp index 517cd5c353..aa937c9e87 100644 --- a/nntrainer/tensor/float_tensor.cpp +++ b/nntrainer/tensor/float_tensor.cpp @@ -11,6 +11,7 @@ #include #include +#include #include #include diff --git a/nntrainer/tensor/manager.cpp b/nntrainer/tensor/manager.cpp index 1e0b1ddce2..ab93e5610b 100644 --- a/nntrainer/tensor/manager.cpp +++ b/nntrainer/tensor/manager.cpp @@ -24,11 +24,14 @@ #include #include #include -#include #include -#include #include +#if !defined(_WIN32) +#include +#include +#endif + #include #include #include @@ -51,6 +54,8 @@ #include namespace nntrainer { + +#if !defined(_WIN32) MMapedMemory::MMapedMemory(size_t size, bool allocate_fd_) : fd(-1), buf(nullptr), buf_size(0), allocate_fd(allocate_fd_) { @@ -136,6 +141,7 @@ MMapedMemory::~MMapedMemory() noexcept { buf_size = 0; ml_logd("[MMapedMemory] buf released"); } +#endif void Manager::reinitialize() { inputs_v2.clear(); diff --git a/nntrainer/tensor/manager.h b/nntrainer/tensor/manager.h index 1e2308efb3..f67bd90b27 100644 --- a/nntrainer/tensor/manager.h +++ b/nntrainer/tensor/manager.h @@ -38,6 +38,8 @@ namespace nntrainer { using ExecutionMode = ml::train::ExecutionMode; + +#if !defined(_WIN32) /** * @class MMappedMemory * @brief Memory Handler, that has mmaped memory with a file descriptor @@ -104,6 +106,7 @@ class MMapedMemory { size_t buf_size; /**< buffer size */ bool allocate_fd; /**< option to choose to allocate an fd */ }; +#endif /** * @class Manager diff --git a/nntrainer/tensor/swap_device.cpp b/nntrainer/tensor/swap_device.cpp index 588df9b466..20e70cd91b 100644 --- a/nntrainer/tensor/swap_device.cpp +++ b/nntrainer/tensor/swap_device.cpp @@ -16,9 +16,7 @@ #include #include #include -#include #include -#include #include #include @@ -30,8 +28,7 @@ void SwapDevice::start(size_t size) { if (fd > 0) return; - fd = - open(dev_path.c_str(), O_RDWR | O_CREAT | O_TRUNC | O_SYNC, (mode_t)0666); + fd = open(dev_path.c_str(), O_RDWR | O_CREAT | O_TRUNC | O_SYNC, 0666UL); NNTR_THROW_IF(fd < 0, std::runtime_error) << "SwapDevice: open file: " << dev_path; @@ -153,7 +150,7 @@ void SwapDevice::putBuffer(void *ptr, bool dealloc_only) { free(ptr); allocated.erase(ptr); -#ifndef __ANDROID__ +#if !defined(__ANDROID__) && !defined(_WIN32) malloc_trim(0); #endif diff --git a/nntrainer/tensor/swap_device.h b/nntrainer/tensor/swap_device.h index 720c8d04b3..cffdf3bb2f 100644 --- a/nntrainer/tensor/swap_device.h +++ b/nntrainer/tensor/swap_device.h @@ -18,15 +18,22 @@ #include #include #include -#include #include #include #include -#include #include -/* Uncomment this to use mmap for swap data */ -#define USE_MMAP +#if defined(_WIN32) +#include +#define O_SYNC 0UL +#else +#include +#include +#endif + +#if defined(_WIN32) +using ssize_t = std::make_signed_t; +#endif namespace nntrainer { @@ -47,16 +54,14 @@ class SwapDevice { * */ explicit SwapDevice(const std::string &name) : - dev_path(swap_device_default_path + name), - fd(-1) {} + dev_path(swap_device_default_path + name), fd(-1) {} /** * @brief SwapDevice default constructor * */ explicit SwapDevice(const std::string &path, const std::string &name) : - dev_path(path + "/" + name), - fd(-1) {} + dev_path(path + "/" + name), fd(-1) {} /** * @brief SwapDevice destructor diff --git a/nntrainer/tensor/task_executor.h b/nntrainer/tensor/task_executor.h index 35f9fd9c14..8461b277a1 100644 --- a/nntrainer/tensor/task_executor.h +++ b/nntrainer/tensor/task_executor.h @@ -22,7 +22,6 @@ #include #include #include -#include #include diff --git a/nntrainer/tensor/tensor.cpp b/nntrainer/tensor/tensor.cpp index 913d0172d0..a93b77c30b 100644 --- a/nntrainer/tensor/tensor.cpp +++ b/nntrainer/tensor/tensor.cpp @@ -9,6 +9,8 @@ * @bug No known bugs except for NYI items */ +#include + #include #include #include diff --git a/nntrainer/tensor/tensor.h b/nntrainer/tensor/tensor.h index a3ec858681..6449bf41ae 100644 --- a/nntrainer/tensor/tensor.h +++ b/nntrainer/tensor/tensor.h @@ -1745,7 +1745,7 @@ class Tensor { */ bool isValid() const { return itensor->isValid(); }; - static constexpr float epsilon = 1e-5; + static constexpr float epsilon = 1e-5f; private: std::shared_ptr itensor; diff --git a/nntrainer/tensor/tensor_base.h b/nntrainer/tensor/tensor_base.h index 53af87de0f..2ceb9b054c 100644 --- a/nntrainer/tensor/tensor_base.h +++ b/nntrainer/tensor/tensor_base.h @@ -704,7 +704,7 @@ class TensorBase { */ virtual bool isValid() const = 0; - static constexpr float epsilon = 1e-5; + static constexpr float epsilon = 1e-5f; protected: TensorDim dim; diff --git a/nntrainer/tensor/weight.h b/nntrainer/tensor/weight.h index 4db4b106ed..ef001cc02b 100644 --- a/nntrainer/tensor/weight.h +++ b/nntrainer/tensor/weight.h @@ -364,9 +364,9 @@ class Weight : public Var_Grad { const float getLossScale() { return loss_scale; }; private: - static constexpr float epsilon = 1e-6; /**< epsilon for zero comparison */ + static constexpr float epsilon = 1e-6f; /**< epsilon for zero comparison */ static constexpr float epsilon_decay = - 1e-8; /**< epsilon for zero comparison */ + 1e-8f; /**< epsilon for zero comparison */ WeightRegularizer regularizer; /**< regularizer for this variable */ float regularizer_constant; /**< constant factor for regularization */