meta.h 2.76 KB
Newer Older
1
2
3
4
/*!
 * Copyright (c) 2016 Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See LICENSE file in the project root for license information.
 */
Guolin Ke's avatar
Guolin Ke committed
5
6
7
#ifndef LIGHTGBM_META_H_
#define LIGHTGBM_META_H_

8
#include <cstdint>
Guolin Ke's avatar
Guolin Ke committed
9
#include <functional>
10
#include <limits>
Guolin Ke's avatar
Guolin Ke committed
11
#include <memory>
12
#include <unordered_map>
13
14
#include <utility>
#include <vector>
Guolin Ke's avatar
Guolin Ke committed
15

16
#if (defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64))) || defined(__INTEL_COMPILER) || MM_PREFETCH
17
18
19
20
21
22
23
24
  #include <xmmintrin.h>
  #define PREFETCH_T0(addr) _mm_prefetch(reinterpret_cast<const char*>(addr), _MM_HINT_T0)
#elif defined(__GNUC__)
  #define PREFETCH_T0(addr) __builtin_prefetch(reinterpret_cast<const char*>(addr), 0, 3)
#else
  #define PREFETCH_T0(addr) do {} while (0)
#endif

Guolin Ke's avatar
Guolin Ke committed
25
26
27
28
namespace LightGBM {

/*! \brief Type of data size, it is better to use signed type*/
typedef int32_t data_size_t;
29

30
// Enable following macro to use double for score_t
31
32
// #define SCORE_T_USE_DOUBLE

33
// Enable following macro to use double for label_t
34
35
// #define LABEL_T_USE_DOUBLE

36
/*! \brief Type of score, and gradients */
37
38
39
#ifdef SCORE_T_USE_DOUBLE
typedef double score_t;
#else
40
typedef float score_t;
41
42
43
44
45
46
47
48
#endif

/*! \brief Type of metadata, include weight and label */
#ifdef LABEL_T_USE_DOUBLE
typedef double label_t;
#else
typedef float label_t;
#endif
Guolin Ke's avatar
Guolin Ke committed
49

50
const score_t kMinScore = -std::numeric_limits<score_t>::infinity();
Guolin Ke's avatar
Guolin Ke committed
51

52
53
const score_t kMaxScore = std::numeric_limits<score_t>::infinity();

54
const score_t kEpsilon = 1e-15f;
Guolin Ke's avatar
Guolin Ke committed
55

Guolin Ke's avatar
Guolin Ke committed
56
const double kZeroThreshold = 1e-35f;
Guolin Ke's avatar
Guolin Ke committed
57

Guolin Ke's avatar
Guolin Ke committed
58
59

typedef int32_t comm_size_t;
Guolin Ke's avatar
Guolin Ke committed
60

Guolin Ke's avatar
Guolin Ke committed
61
using PredictFunction =
Guolin Ke's avatar
Guolin Ke committed
62
std::function<void(const std::vector<std::pair<int, double>>&, double* output)>;
63
64
65

using PredictSparseFunction =
std::function<void(const std::vector<std::pair<int, double>>&, std::vector<std::unordered_map<int, double>>* output)>;
Guolin Ke's avatar
Guolin Ke committed
66

Guolin Ke's avatar
Guolin Ke committed
67
68
69
70
71
72
typedef void(*ReduceFunction)(const char* input, char* output, int type_size, comm_size_t array_size);


typedef void(*ReduceScatterFunction)(char* input, comm_size_t input_size, int type_size,
                                     const comm_size_t* block_start, const comm_size_t* block_len, int num_block, char* output, comm_size_t output_size,
                                     const ReduceFunction& reducer);
ww's avatar
ww committed
73

Guolin Ke's avatar
Guolin Ke committed
74
75
typedef void(*AllgatherFunction)(char* input, comm_size_t input_size, const comm_size_t* block_start,
                                 const comm_size_t* block_len, int num_block, char* output, comm_size_t output_size);
ww's avatar
ww committed
76
77


Guolin Ke's avatar
Guolin Ke committed
78
79
#define NO_SPECIFIC (-1)

80
81
82
const int kAlignedSize = 32;

#define SIZE_ALIGNED(t) ((t) + kAlignedSize - 1) / kAlignedSize * kAlignedSize
83

84
// Refer to https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4127?view=vs-2019
85
86
87
#ifdef _MSC_VER
  #pragma warning(disable : 4127)
#endif
88

Guolin Ke's avatar
Guolin Ke committed
89
90
}  // namespace LightGBM

91
#endif  // LightGBM_META_H_