cuda_dlib.h 4.97 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
// Copyright (C) 2015  Davis E. King (davis@dlib.net)
// License: Boost Software License   See LICENSE.txt for the full license.
#ifndef DLIB_DNN_CuDA_H_
#define DLIB_DNN_CuDA_H_


#include "tensor.h"

namespace dlib
{
    namespace cuda 
    {

14
15
16
17
18
19
20
21
22
23
24
#ifdef DLIB_USE_CUDA

    // ----------------------------------------------------------------------------------------

        void set_device (
            int dev
        );

        int get_device (
        );

Davis King's avatar
Davis King committed
25
26
27
        int get_num_devices (
        );

28
29
    // -----------------------------------------------------------------------------------

30
31
        void multiply (
            tensor& dest,
32
33
34
35
            const tensor& src1,
            const tensor& src2
        );

36
37
38
39
40
41
        void multiply_conv (
            tensor& dest,
            const tensor& src1,
            const tensor& src2
        );

42
43
        void add (
            tensor& dest,
44
45
46
47
            const tensor& src1,
            const tensor& src2
        );

48
49
50
    // -----------------------------------------------------------------------------------

        void affine_transform(
51
            tensor& dest,
52
53
54
55
56
            const tensor& src,
            const float A,
            const float B
        );

57
58
59
60
61
62
        void affine_transform(
            tensor& dest,
            const tensor& src,
            const float A
        );

63
64
65
66
67
68
69
70
71
        void affine_transform(
            tensor& dest,
            const tensor& src1,
            const tensor& src2,
            const float A,
            const float B,
            const float C
        );

72
73
74
75
76
77
78
79
        void affine_transform(
            tensor& dest,
            const tensor& src1,
            const tensor& src2,
            const float A,
            const float B
        );

80
81
82
83
84
85
86
87
88
89
90
        void affine_transform(
            tensor& dest,
            const tensor& src1,
            const tensor& src2,
            const tensor& src3,
            const float A,
            const float B,
            const float C,
            const float D
        );

91
92
93
94
95
96
97
        // Note that this function isn't in the tt:: namespace because add_scaled() is
        // called by cuda::add() so we don't need a tt:: version of add_scaled().  
        void add_scaled(
            tensor& dest,
            const float scale,
            const tensor& src
        );
98

99
100
101
    // -----------------------------------------------------------------------------------

        void affine_transform(
102
            tensor& dest,
103
104
105
106
107
            const tensor& src,
            const tensor& A,
            const tensor& B
        );

108
109
110
111
112
113
114
115
116
    // -----------------------------------------------------------------------------------

        void affine_transform_conv(
            tensor& dest,
            const tensor& src,
            const tensor& A,
            const tensor& B
        );

Davis King's avatar
Davis King committed
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
    // ----------------------------------------------------------------------------------------

        void compute_adam_update (
            tensor& s,
            tensor& m,
            tensor& v,
            const float t,
            const float learning_rate,
            const float weight_decay,
            const float momentum1,
            const float momentum2,
            const tensor& params,
            const tensor& params_grad
        );

132
133
    // -----------------------------------------------------------------------------------

134
        void assign_bias_gradient (
135
136
137
138
            tensor& grad,
            const tensor& gradient_input
        );

139
140
    // -----------------------------------------------------------------------------------

141
142
143
144
        void threshold (
            tensor& data,
            float thresh
        );
145

146
147
148
149
150
151
152
153
154
    // ----------------------------------------------------------------------------------------

        void dot (
            const tensor& a,
            const tensor& b,
            tensor& result,
            size_t idx
        );

Davis King's avatar
Davis King committed
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
    // ----------------------------------------------------------------------------------------

        void prelu (
            tensor& dest,
            const tensor& src,
            const tensor& param
        );

        void prelu_gradient (
            tensor& grad,
            const tensor& src,
            const tensor& gradient_input,
            const tensor& param,
            tensor& params_grad 
        );

171
    // ------------------------------------------------------------------------------------
172
173
174
175
176
177
178
    // ------------------------------------------------------------------------------------
    // ------------------------------------------------------------------------------------
    // ------------------------------------------------------------------------------------

#else // if DLIB_USE_CUDA NOT DEFINED

        inline void set_device (
Davis King's avatar
Davis King committed
179
180
181
182
183
            int id
        )
        {
            DLIB_CASSERT(id == 0, "dlib::cuda::set_device(id) called with an invalid device id.");
        }
184
185

        inline int get_device (
Davis King's avatar
Davis King committed
186
        ){ return 0; }
187

Davis King's avatar
Davis King committed
188
        inline int get_num_devices (
Davis King's avatar
Davis King committed
189
190
        ) { return 1; }

191
#endif // DLIB_USE_CUDA
192
193
194
195
196
197
198

    } 
}


#endif // DLIB_DNN_CuDA_H_