1#![allow(non_camel_case_types)]
3
4extern crate libc;
5
6pub type size_t = ::libc::c_ulong;
9pub type Enum_cudaError = ::libc::c_uint;
10pub type Enum_cudaMemcpyKind = ::libc::c_uint;
11
12pub type cudaMemoryPtr = *mut ::libc::c_void;
13
14pub enum MemcpyKind {
15 cudaMemcpyHostToHost = 0,
16 cudaMemcpyHostToDevice = 1,
17 cudaMemcpyDeviceToHost = 2,
18 cudaMemcpyDeviceToDevice = 3,
19 cudaMemcpyDefault = 4,
20}
21
22pub type cudaError_t = Enum_cudaError;
23
24pub enum Struct_CUstream_st { }
27pub type cudaStream_t = *mut Struct_CUstream_st;
28
29pub enum Struct_cudnnContext { }
30pub type cudnnHandle_t = *mut Struct_cudnnContext;
31
32#[repr(C)]
33#[derive(PartialEq, Debug, Copy, Clone)]
34pub enum cudnnStatus_t {
35 CUDNN_STATUS_SUCCESS = 0,
36 CUDNN_STATUS_NOT_INITIALIZED = 1,
37 CUDNN_STATUS_ALLOC_FAILED = 2,
38 CUDNN_STATUS_BAD_PARAM = 3,
39 CUDNN_STATUS_INTERNAL_ERROR = 4,
40 CUDNN_STATUS_INVALID_VALUE = 5,
41 CUDNN_STATUS_ARCH_MISMATCH = 6,
42 CUDNN_STATUS_MAPPING_ERROR = 7,
43 CUDNN_STATUS_EXECUTION_FAILED = 8,
44 CUDNN_STATUS_NOT_SUPPORTED = 9,
45 CUDNN_STATUS_LICENSE_ERROR = 10,
46}
47
48pub enum Struct_cudnnTensorStruct { }
49pub type cudnnTensorDescriptor_t = *mut Struct_cudnnTensorStruct;
50
51pub enum Struct_cudnnConvolutionStruct { }
52pub type cudnnConvolutionDescriptor_t = *mut Struct_cudnnConvolutionStruct;
53
54pub enum Struct_cudnnPoolingStruct { }
55pub type cudnnPoolingDescriptor_t = *mut Struct_cudnnPoolingStruct;
56
57pub enum Struct_cudnnFilterStruct { }
58pub type cudnnFilterDescriptor_t = *mut Struct_cudnnFilterStruct;
59
60pub enum Struct_cudnnLRNStruct { }
61pub type cudnnLRNDescriptor_t = *mut Struct_cudnnLRNStruct;
62
63#[repr(C)]
64#[derive(PartialEq, Debug, Copy, Clone)]
65pub enum cudnnDataType_t {
66 CUDNN_DATA_FLOAT = 0,
67 CUDNN_DATA_DOUBLE = 1,
68 CUDNN_DATA_HALF = 2,
69}
70
71#[repr(C)]
72#[derive(PartialEq, Debug, Copy, Clone)]
73pub enum cudnnTensorFormat_t {
74 CUDNN_TENSOR_NCHW = 0,
75 CUDNN_TENSOR_NHWC = 1,
76}
77
78#[repr(C)]
79#[derive(PartialEq, Debug, Copy, Clone)]
80pub enum cudnnAddMode_t {
81 CUDNN_ADD_IMAGE = 0,
82 CUDNN_ADD_FEATURE_MAP = 1,
83 CUDNN_ADD_SAME_C = 2,
84 CUDNN_ADD_FULL_TENSOR = 3,
85}
86
87#[repr(C)]
88#[derive(PartialEq, Debug, Copy, Clone)]
89pub enum cudnnConvolutionMode_t {
90 CUDNN_CONVOLUTION = 0,
91 CUDNN_CROSS_CORRELATION = 1,
92}
93
94#[repr(C)]
95#[derive(PartialEq, Debug, Copy, Clone)]
96pub enum cudnnConvolutionFwdPreference_t {
97 CUDNN_CONVOLUTION_FWD_NO_WORKSPACE = 0,
98 CUDNN_CONVOLUTION_FWD_PREFER_FASTEST = 1,
99 CUDNN_CONVOLUTION_FWD_SPECIFY_WORKSPACE_LIMIT = 2,
100}
101
102#[repr(C)]
103#[derive(PartialEq, Debug, Copy, Clone)]
104pub enum cudnnConvolutionFwdAlgo_t {
105 CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_GEMM = 0,
106 CUDNN_CONVOLUTION_FWD_ALGO_IMPLICIT_PRECOMP_GEMM = 1,
107 CUDNN_CONVOLUTION_FWD_ALGO_GEMM = 2,
108 CUDNN_CONVOLUTION_FWD_ALGO_DIRECT = 3,
109 CUDNN_CONVOLUTION_FWD_ALGO_FFT = 4,
110 CUDNN_CONVOLUTION_FWD_ALGO_FFT_TILING = 5,
111}
112
113#[repr(C)]
114#[derive(Copy)]
115pub struct Struct_Unnamed14 {
116 pub algo: cudnnConvolutionFwdAlgo_t,
117 pub status: cudnnStatus_t,
118 pub time: ::libc::c_float,
119 pub memory: ::libc::size_t,
120}
121impl ::std::clone::Clone for Struct_Unnamed14 {
122 fn clone(&self) -> Self { *self }
123}
124impl ::std::default::Default for Struct_Unnamed14 {
125 fn default() -> Self { unsafe { ::std::mem::zeroed() } }
126}
127pub type cudnnConvolutionFwdAlgoPerf_t = Struct_Unnamed14;
128
129#[repr(C)]
130#[derive(PartialEq, Debug, Copy, Clone)]
131pub enum cudnnConvolutionBwdFilterPreference_t {
132 CUDNN_CONVOLUTION_BWD_FILTER_NO_WORKSPACE = 0,
133 CUDNN_CONVOLUTION_BWD_FILTER_PREFER_FASTEST = 1,
134 CUDNN_CONVOLUTION_BWD_FILTER_SPECIFY_WORKSPACE_LIMIT = 2,
135}
136
137#[repr(C)]
138#[derive(PartialEq, Debug, Copy, Clone)]
139pub enum cudnnConvolutionBwdFilterAlgo_t {
140 CUDNN_CONVOLUTION_BWD_FILTER_ALGO_0 = 0,
141 CUDNN_CONVOLUTION_BWD_FILTER_ALGO_1 = 1,
142 CUDNN_CONVOLUTION_BWD_FILTER_ALGO_FFT = 2,
143 CUDNN_CONVOLUTION_BWD_FILTER_ALGO_3 = 3,
144}
145
146#[repr(C)]
147#[derive(Copy)]
148pub struct Struct_Unnamed17 {
149 pub algo: cudnnConvolutionBwdFilterAlgo_t,
150 pub status: cudnnStatus_t,
151 pub time: ::libc::c_float,
152 pub memory: ::libc::size_t,
153}
154
155impl ::std::clone::Clone for Struct_Unnamed17 {
156 fn clone(&self) -> Self { *self }
157}
158
159impl ::std::default::Default for Struct_Unnamed17 {
160 fn default() -> Self { unsafe { ::std::mem::zeroed() } }
161}
162
163pub type cudnnConvolutionBwdFilterAlgoPerf_t = Struct_Unnamed17;
164
165#[repr(C)]
166#[derive(PartialEq, Debug, Copy, Clone)]
167pub enum cudnnConvolutionBwdDataPreference_t {
168 CUDNN_CONVOLUTION_BWD_DATA_NO_WORKSPACE = 0,
169 CUDNN_CONVOLUTION_BWD_DATA_PREFER_FASTEST = 1,
170 CUDNN_CONVOLUTION_BWD_DATA_SPECIFY_WORKSPACE_LIMIT = 2,
171}
172
173#[repr(C)]
174#[derive(PartialEq, Debug, Copy, Clone)]
175pub enum cudnnConvolutionBwdDataAlgo_t {
176 CUDNN_CONVOLUTION_BWD_DATA_ALGO_0 = 0,
177 CUDNN_CONVOLUTION_BWD_DATA_ALGO_1 = 1,
178 CUDNN_CONVOLUTION_BWD_DATA_ALGO_FFT = 2,
179 CUDNN_CONVOLUTION_BWD_DATA_ALGO_FFT_TILING = 3,
180}
181
182#[repr(C)]
183#[derive(Copy)]
184pub struct Struct_Unnamed20 {
185 pub algo: cudnnConvolutionBwdDataAlgo_t,
186 pub status: cudnnStatus_t,
187 pub time: ::libc::c_float,
188 pub memory: ::libc::size_t,
189}
190
191impl ::std::clone::Clone for Struct_Unnamed20 {
192 fn clone(&self) -> Self { *self }
193}
194
195impl ::std::default::Default for Struct_Unnamed20 {
196 fn default() -> Self { unsafe { ::std::mem::zeroed() } }
197}
198
199pub type cudnnConvolutionBwdDataAlgoPerf_t = Struct_Unnamed20;
200
201#[repr(C)]
202#[derive(PartialEq, Debug, Copy, Clone)]
203pub enum cudnnSoftmaxAlgorithm_t {
204 CUDNN_SOFTMAX_FAST = 0,
205 CUDNN_SOFTMAX_ACCURATE = 1,
206 CUDNN_SOFTMAX_LOG = 2,
207}
208
209#[repr(C)]
210#[derive(PartialEq, Debug, Copy, Clone)]
211pub enum cudnnSoftmaxMode_t {
212 CUDNN_SOFTMAX_MODE_INSTANCE = 0,
213 CUDNN_SOFTMAX_MODE_CHANNEL = 1,
214}
215
216#[repr(C)]
217#[derive(PartialEq, Debug, Copy, Clone)]
218pub enum cudnnPoolingMode_t {
219 CUDNN_POOLING_MAX = 0,
220 CUDNN_POOLING_AVERAGE_COUNT_INCLUDE_PADDING = 1,
221 CUDNN_POOLING_AVERAGE_COUNT_EXCLUDE_PADDING = 2,
222}
223
224#[repr(C)]
225#[derive(PartialEq, Debug, Copy, Clone)]
226pub enum cudnnActivationMode_t {
227 CUDNN_ACTIVATION_SIGMOID = 0,
228 CUDNN_ACTIVATION_RELU = 1,
229 CUDNN_ACTIVATION_TANH = 2,
230}
231
232pub type Enum_Unnamed25 = ::libc::c_uint;
233pub const CUDNN_LRN_CROSS_CHANNEL_DIM1: ::libc::c_uint = 0;
234pub type cudnnLRNMode_t = Enum_Unnamed25;
235
236pub type Enum_Unnamed26 = ::libc::c_uint;
237pub const CUDNN_DIVNORM_PRECOMPUTED_MEANS: ::libc::c_uint = 0;
238pub type cudnnDivNormMode_t = Enum_Unnamed26;
239
240extern "C" {
241 pub fn cudnnGetVersion() -> ::libc::size_t;
242
243 pub fn cudnnGetErrorString(status: cudnnStatus_t) -> *const ::libc::c_char;
244
245 pub fn cudnnCreate(handle: *mut cudnnHandle_t) -> cudnnStatus_t;
246
247 pub fn cudnnDestroy(handle: cudnnHandle_t) -> cudnnStatus_t;
248
249 pub fn cudnnSetStream(handle: cudnnHandle_t, streamId: cudaStream_t) -> cudnnStatus_t;
250
251 pub fn cudnnGetStream(handle: cudnnHandle_t, streamId: *mut cudaStream_t) -> cudnnStatus_t;
252
253 pub fn cudnnCreateTensorDescriptor(tensorDesc: *mut cudnnTensorDescriptor_t) -> cudnnStatus_t;
254
255 pub fn cudnnSetTensor4dDescriptor(
256 tensorDesc: cudnnTensorDescriptor_t,
257 format: cudnnTensorFormat_t,
258 dataType: cudnnDataType_t,
259 n: ::libc::c_int,
260 c: ::libc::c_int,
261 h: ::libc::c_int,
262 w: ::libc::c_int
263 ) -> cudnnStatus_t;
264
265 pub fn cudnnSetTensor4dDescriptorEx(
266 tensorDesc: cudnnTensorDescriptor_t,
267 dataType: cudnnDataType_t,
268 n: ::libc::c_int,
269 c: ::libc::c_int,
270 h: ::libc::c_int,
271 w: ::libc::c_int,
272 nStride: ::libc::c_int,
273 cStride: ::libc::c_int,
274 hStride: ::libc::c_int,
275 wStride: ::libc::c_int
276 ) -> cudnnStatus_t;
277
278 pub fn cudnnGetTensor4dDescriptor(
279 tensorDesc: cudnnTensorDescriptor_t,
280 dataType: *mut cudnnDataType_t,
281 n: *mut ::libc::c_int,
282 c: *mut ::libc::c_int,
283 h: *mut ::libc::c_int,
284 w: *mut ::libc::c_int,
285 nStride: *mut ::libc::c_int,
286 cStride: *mut ::libc::c_int,
287 hStride: *mut ::libc::c_int,
288 wStride: *mut ::libc::c_int
289 ) -> cudnnStatus_t;
290
291 pub fn cudnnSetTensorNdDescriptor(
292 tensorDesc: cudnnTensorDescriptor_t,
293 dataType: cudnnDataType_t,
294 nbDims: ::libc::c_int,
295 dimA: *const ::libc::c_int,
296 strideA: *const ::libc::c_int
297 ) -> cudnnStatus_t;
298
299 pub fn cudnnGetTensorNdDescriptor(
300 tensorDesc: cudnnTensorDescriptor_t,
301 nbDimsRequested: ::libc::c_int,
302 dataType: *mut cudnnDataType_t,
303 nbDims: *mut ::libc::c_int,
304 dimA: *mut ::libc::c_int,
305 strideA: *mut ::libc::c_int
306 ) -> cudnnStatus_t;
307
308 pub fn cudnnDestroyTensorDescriptor(tensorDesc: cudnnTensorDescriptor_t) -> cudnnStatus_t;
309
310 pub fn cudnnTransformTensor(
311 handle: cudnnHandle_t,
312 alpha: *const ::libc::c_void,
313 srcDesc: cudnnTensorDescriptor_t,
314 srcData: *const ::libc::c_void,
315 beta: *const ::libc::c_void,
316 destDesc: cudnnTensorDescriptor_t,
317 destData: *mut ::libc::c_void
318 ) -> cudnnStatus_t;
319
320 pub fn cudnnAddTensor(
321 handle: cudnnHandle_t, mode: cudnnAddMode_t,
322 alpha: *const ::libc::c_void,
323 biasDesc: cudnnTensorDescriptor_t,
324 biasData: *const ::libc::c_void,
325 beta: *const ::libc::c_void,
326 srcDestDesc: cudnnTensorDescriptor_t,
327 srcDestData: *mut ::libc::c_void
328 ) -> cudnnStatus_t;
329
330 pub fn cudnnAddTensor_v3(
331 handle: cudnnHandle_t,
332 alpha: *const ::libc::c_void,
333 biasDesc: cudnnTensorDescriptor_t,
334 biasData: *const ::libc::c_void,
335 beta: *const ::libc::c_void,
336 srcDestDesc: cudnnTensorDescriptor_t,
337 srcDestData: *mut ::libc::c_void
338 ) -> cudnnStatus_t;
339
340 pub fn cudnnSetTensor(
341 handle: cudnnHandle_t,
342 srcDestDesc: cudnnTensorDescriptor_t,
343 srcDestData: *mut ::libc::c_void,
344 value: *const ::libc::c_void
345 ) -> cudnnStatus_t;
346
347 pub fn cudnnScaleTensor(
348 handle: cudnnHandle_t,
349 srcDestDesc: cudnnTensorDescriptor_t,
350 srcDestData: *mut ::libc::c_void,
351 alpha: *const ::libc::c_void
352 ) -> cudnnStatus_t;
353
354 pub fn cudnnCreateFilterDescriptor(filterDesc: *mut cudnnFilterDescriptor_t) -> cudnnStatus_t;
355
356 pub fn cudnnSetFilter4dDescriptor(
357 filterDesc: cudnnFilterDescriptor_t,
358 dataType: cudnnDataType_t,
359 k: ::libc::c_int, c: ::libc::c_int,
360 h: ::libc::c_int, w: ::libc::c_int
361 ) -> cudnnStatus_t;
362
363 pub fn cudnnGetFilter4dDescriptor(
364 filterDesc: cudnnFilterDescriptor_t,
365 dataType: *mut cudnnDataType_t,
366 k: *mut ::libc::c_int,
367 c: *mut ::libc::c_int,
368 h: *mut ::libc::c_int,
369 w: *mut ::libc::c_int
370 ) -> cudnnStatus_t;
371
372 pub fn cudnnSetFilterNdDescriptor(
373 filterDesc: cudnnFilterDescriptor_t,
374 dataType: cudnnDataType_t,
375 nbDims: ::libc::c_int,
376 filterDimA: *const ::libc::c_int
377 ) -> cudnnStatus_t;
378
379 pub fn cudnnGetFilterNdDescriptor(
380 filterDesc: cudnnFilterDescriptor_t,
381 nbDimsRequested: ::libc::c_int,
382 dataType: *mut cudnnDataType_t,
383 nbDims: *mut ::libc::c_int,
384 filterDimA: *mut ::libc::c_int
385 ) -> cudnnStatus_t;
386
387 pub fn cudnnDestroyFilterDescriptor(filterDesc: cudnnFilterDescriptor_t) -> cudnnStatus_t;
388
389 pub fn cudnnCreateConvolutionDescriptor(convDesc: *mut cudnnConvolutionDescriptor_t) -> cudnnStatus_t;
390
391 pub fn cudnnSetConvolution2dDescriptor(
392 convDesc: cudnnConvolutionDescriptor_t,
393 pad_h: ::libc::c_int,
394 pad_w: ::libc::c_int,
395 u: ::libc::c_int, v: ::libc::c_int,
396 upscalex: ::libc::c_int,
397 upscaley: ::libc::c_int,
398 mode: cudnnConvolutionMode_t
399 ) -> cudnnStatus_t;
400
401 pub fn cudnnGetConvolution2dDescriptor(
402 convDesc: cudnnConvolutionDescriptor_t,
403 pad_h: *mut ::libc::c_int,
404 pad_w: *mut ::libc::c_int,
405 u: *mut ::libc::c_int,
406 v: *mut ::libc::c_int,
407 upscalex: *mut ::libc::c_int,
408 upscaley: *mut ::libc::c_int,
409 mode: *mut cudnnConvolutionMode_t
410 ) -> cudnnStatus_t;
411
412 pub fn cudnnGetConvolution2dForwardOutputDim(
413 convDesc: cudnnConvolutionDescriptor_t,
414 inputTensorDesc: cudnnTensorDescriptor_t,
415 filterDesc: cudnnFilterDescriptor_t,
416 n: *mut ::libc::c_int,
417 c: *mut ::libc::c_int,
418 h: *mut ::libc::c_int,
419 w: *mut ::libc::c_int
420 ) -> cudnnStatus_t;
421
422 pub fn cudnnSetConvolutionNdDescriptor(
423 convDesc: cudnnConvolutionDescriptor_t,
424 arrayLength: ::libc::c_int,
425 padA: *const ::libc::c_int,
426 filterStrideA: *const ::libc::c_int,
427 upscaleA: *const ::libc::c_int,
428 mode: cudnnConvolutionMode_t
429 ) -> cudnnStatus_t;
430
431 pub fn cudnnGetConvolutionNdDescriptor(
432 convDesc: cudnnConvolutionDescriptor_t,
433 arrayLengthRequested: ::libc::c_int,
434 arrayLength: *mut ::libc::c_int,
435 padA: *mut ::libc::c_int,
436 strideA: *mut ::libc::c_int,
437 upscaleA: *mut ::libc::c_int,
438 mode: *mut cudnnConvolutionMode_t
439 ) -> cudnnStatus_t;
440
441 pub fn cudnnSetConvolutionNdDescriptor_v3(
442 convDesc: cudnnConvolutionDescriptor_t,
443 arrayLength: ::libc::c_int,
444 padA: *const ::libc::c_int,
445 filterStrideA: *const ::libc::c_int,
446 upscaleA: *const ::libc::c_int,
447 mode: cudnnConvolutionMode_t,
448 dataType: cudnnDataType_t
449 ) -> cudnnStatus_t;
450
451 pub fn cudnnGetConvolutionNdDescriptor_v3(
452 convDesc: cudnnConvolutionDescriptor_t,
453 arrayLengthRequested: ::libc::c_int,
454 arrayLength: *mut ::libc::c_int,
455 padA: *mut ::libc::c_int,
456 strideA: *mut ::libc::c_int,
457 upscaleA: *mut ::libc::c_int,
458 mode: *mut cudnnConvolutionMode_t,
459 dataType: *mut cudnnDataType_t
460 ) -> cudnnStatus_t;
461
462 pub fn cudnnGetConvolutionNdForwardOutputDim(
463 convDesc: cudnnConvolutionDescriptor_t,
464 inputTensorDesc: cudnnTensorDescriptor_t,
465 filterDesc: cudnnFilterDescriptor_t,
466 nbDims: ::libc::c_int,
467 tensorOuputDimA: *mut ::libc::c_int
468 ) -> cudnnStatus_t;
469
470 pub fn cudnnDestroyConvolutionDescriptor(convDesc: cudnnConvolutionDescriptor_t) -> cudnnStatus_t;
471
472 pub fn cudnnFindConvolutionForwardAlgorithm(
473 handle: cudnnHandle_t,
474 srcDesc: cudnnTensorDescriptor_t,
475 filterDesc: cudnnFilterDescriptor_t,
476 convDesc: cudnnConvolutionDescriptor_t,
477 destDesc: cudnnTensorDescriptor_t,
478 requestedAlgoCount: ::libc::c_int,
479 returnedAlgoCount: *mut ::libc::c_int,
480 perfResults: *mut cudnnConvolutionFwdAlgoPerf_t
481 ) -> cudnnStatus_t;
482
483 pub fn cudnnGetConvolutionForwardAlgorithm(
484 handle: cudnnHandle_t,
485 srcDesc: cudnnTensorDescriptor_t,
486 filterDesc: cudnnFilterDescriptor_t,
487 convDesc: cudnnConvolutionDescriptor_t,
488 destDesc: cudnnTensorDescriptor_t,
489 preference: cudnnConvolutionFwdPreference_t,
490 memoryLimitInbytes: ::libc::size_t,
491 algo: *mut cudnnConvolutionFwdAlgo_t
492 ) -> cudnnStatus_t;
493
494 pub fn cudnnGetConvolutionForwardWorkspaceSize(
495 handle: cudnnHandle_t,
496 srcDesc: cudnnTensorDescriptor_t,
497 filterDesc: cudnnFilterDescriptor_t,
498 convDesc: cudnnConvolutionDescriptor_t,
499 destDesc: cudnnTensorDescriptor_t,
500 algo: cudnnConvolutionFwdAlgo_t,
501 sizeInBytes: *mut ::libc::size_t,
502 ) -> cudnnStatus_t;
503
504 pub fn cudnnConvolutionForward(
505 handle: cudnnHandle_t,
506 alpha: *const ::libc::c_void,
507 srcDesc: cudnnTensorDescriptor_t,
508 srcData: *const ::libc::c_void,
509 filterDesc: cudnnFilterDescriptor_t,
510 filterData: *const ::libc::c_void,
511 convDesc: cudnnConvolutionDescriptor_t,
512 algo: cudnnConvolutionFwdAlgo_t,
513 workSpace: *mut ::libc::c_void,
514 workSpaceSizeInBytes: ::libc::size_t,
515 beta: *const ::libc::c_void,
516 destDesc: cudnnTensorDescriptor_t,
517 destData: *mut ::libc::c_void
518 ) -> cudnnStatus_t;
519
520 pub fn cudnnConvolutionBackwardBias(
521 handle: cudnnHandle_t,
522 alpha: *const ::libc::c_void,
523 srcDesc: cudnnTensorDescriptor_t,
524 srcData: *const ::libc::c_void,
525 beta: *const ::libc::c_void,
526 destDesc: cudnnTensorDescriptor_t,
527 destData: *mut ::libc::c_void
528 ) -> cudnnStatus_t;
529
530 pub fn cudnnFindConvolutionBackwardFilterAlgorithm(
531 handle: cudnnHandle_t,
532 srcDesc: cudnnTensorDescriptor_t,
533 diffDesc: cudnnTensorDescriptor_t,
534 convDesc: cudnnConvolutionDescriptor_t,
535 gradDesc: cudnnFilterDescriptor_t,
536 requestedAlgoCount: ::libc::c_int,
537 returnedAlgoCount: *mut ::libc::c_int,
538 perfResults: *mut cudnnConvolutionBwdFilterAlgoPerf_t
539 ) -> cudnnStatus_t;
540
541 pub fn cudnnGetConvolutionBackwardFilterAlgorithm(
542 handle: cudnnHandle_t,
543 srcDesc: cudnnTensorDescriptor_t,
544 diffDesc: cudnnTensorDescriptor_t,
545 convDesc: cudnnConvolutionDescriptor_t,
546 gradDesc: cudnnFilterDescriptor_t,
547 preference: cudnnConvolutionBwdFilterPreference_t,
548 memoryLimitInbytes: ::libc::size_t,
549 algo: *mut cudnnConvolutionBwdFilterAlgo_t
550 ) -> cudnnStatus_t;
551
552 pub fn cudnnGetConvolutionBackwardFilterWorkspaceSize(
553 handle: cudnnHandle_t,
554 srcDesc: cudnnTensorDescriptor_t,
555 diffDesc: cudnnTensorDescriptor_t,
556 convDesc: cudnnConvolutionDescriptor_t,
557 gradDesc: cudnnFilterDescriptor_t,
558 algo: cudnnConvolutionBwdFilterAlgo_t,
559 sizeInBytes: *mut ::libc::size_t,
560 ) -> cudnnStatus_t;
561
562 pub fn cudnnConvolutionBackwardFilter_v3(
563 handle: cudnnHandle_t,
564 alpha: *const ::libc::c_void,
565 srcDesc: cudnnTensorDescriptor_t,
566 srcData: *const ::libc::c_void,
567 diffDesc: cudnnTensorDescriptor_t,
568 diffData: *const ::libc::c_void,
569 convDesc: cudnnConvolutionDescriptor_t,
570 algo: cudnnConvolutionBwdFilterAlgo_t,
571 workSpace: *mut ::libc::c_void,
572 workSpaceSizeInBytes: ::libc::size_t,
573 beta: *const ::libc::c_void,
574 gradDesc: cudnnFilterDescriptor_t,
575 gradData: *mut ::libc::c_void
576 ) -> cudnnStatus_t;
577
578 pub fn cudnnConvolutionBackwardFilter(
579 handle: cudnnHandle_t,
580 alpha: *const ::libc::c_void,
581 srcDesc: cudnnTensorDescriptor_t,
582 srcData: *const ::libc::c_void,
583 diffDesc: cudnnTensorDescriptor_t,
584 diffData: *const ::libc::c_void,
585 convDesc: cudnnConvolutionDescriptor_t,
586 beta: *const ::libc::c_void,
587 gradDesc: cudnnFilterDescriptor_t,
588 gradData: *mut ::libc::c_void
589 ) -> cudnnStatus_t;
590
591 pub fn cudnnFindConvolutionBackwardDataAlgorithm(
592 handle: cudnnHandle_t,
593 filterDesc: cudnnFilterDescriptor_t,
594 diffDesc: cudnnTensorDescriptor_t,
595 convDesc: cudnnConvolutionDescriptor_t,
596 gradDesc: cudnnTensorDescriptor_t,
597 requestedAlgoCount: ::libc::c_int,
598 returnedAlgoCount: *mut ::libc::c_int,
599 perfResults: *mut cudnnConvolutionBwdDataAlgoPerf_t
600 ) -> cudnnStatus_t;
601
602 pub fn cudnnGetConvolutionBackwardDataAlgorithm(
603 handle: cudnnHandle_t,
604 filterDesc: cudnnFilterDescriptor_t,
605 diffDesc: cudnnTensorDescriptor_t,
606 convDesc: cudnnConvolutionDescriptor_t,
607 gradDesc: cudnnTensorDescriptor_t,
608 preference: cudnnConvolutionBwdDataPreference_t,
609 memoryLimitInbytes: ::libc::size_t,
610 algo: *mut cudnnConvolutionBwdDataAlgo_t
611 ) -> cudnnStatus_t;
612
613 pub fn cudnnGetConvolutionBackwardDataWorkspaceSize(
614 handle: cudnnHandle_t,
615 filterDesc: cudnnFilterDescriptor_t,
616 diffDesc: cudnnTensorDescriptor_t,
617 convDesc: cudnnConvolutionDescriptor_t,
618 gradDesc: cudnnTensorDescriptor_t,
619 algo: cudnnConvolutionBwdDataAlgo_t,
620 sizeInBytes: *mut ::libc::size_t,
621 ) -> cudnnStatus_t;
622
623 pub fn cudnnConvolutionBackwardData_v3(
624 handle: cudnnHandle_t,
625 alpha: *const ::libc::c_void,
626 filterDesc: cudnnFilterDescriptor_t,
627 filterData: *const ::libc::c_void,
628 diffDesc: cudnnTensorDescriptor_t,
629 diffData: *const ::libc::c_void,
630 convDesc: cudnnConvolutionDescriptor_t,
631 algo: cudnnConvolutionBwdDataAlgo_t,
632 workSpace: *mut ::libc::c_void,
633 workSpaceSizeInBytes: ::libc::size_t,
634 beta: *const ::libc::c_void,
635 gradDesc: cudnnTensorDescriptor_t,
636 gradData: *mut ::libc::c_void
637 ) -> cudnnStatus_t;
638
639 pub fn cudnnConvolutionBackwardData(
640 handle: cudnnHandle_t,
641 alpha: *const ::libc::c_void,
642 filterDesc: cudnnFilterDescriptor_t,
643 filterData: *const ::libc::c_void,
644 diffDesc: cudnnTensorDescriptor_t,
645 diffData: *const ::libc::c_void,
646 convDesc: cudnnConvolutionDescriptor_t,
647 beta: *const ::libc::c_void,
648 gradDesc: cudnnTensorDescriptor_t,
649 gradData: *mut ::libc::c_void
650 ) -> cudnnStatus_t;
651
652 pub fn cudnnIm2Col(
653 handle: cudnnHandle_t,
654 srcDesc: cudnnTensorDescriptor_t,
655 srcData: *const ::libc::c_void,
656 filterDesc: cudnnFilterDescriptor_t,
657 convDesc: cudnnConvolutionDescriptor_t,
658 colBuffer: *mut ::libc::c_void
659 ) -> cudnnStatus_t;
660
661 pub fn cudnnSoftmaxForward(
662 handle: cudnnHandle_t,
663 algorithm: cudnnSoftmaxAlgorithm_t,
664 mode: cudnnSoftmaxMode_t,
665 alpha: *const ::libc::c_void,
666 srcDesc: cudnnTensorDescriptor_t,
667 srcData: *const ::libc::c_void,
668 beta: *const ::libc::c_void,
669 destDesc: cudnnTensorDescriptor_t,
670 destData: *mut ::libc::c_void
671 ) -> cudnnStatus_t;
672
673 pub fn cudnnSoftmaxBackward(
674 handle: cudnnHandle_t,
675 algorithm: cudnnSoftmaxAlgorithm_t,
676 mode: cudnnSoftmaxMode_t,
677 alpha: *const ::libc::c_void,
678 srcDesc: cudnnTensorDescriptor_t,
679 srcData: *const ::libc::c_void,
680 srcDiffDesc: cudnnTensorDescriptor_t,
681 srcDiffData: *const ::libc::c_void,
682 beta: *const ::libc::c_void,
683 destDiffDesc: cudnnTensorDescriptor_t,
684 destDiffData: *mut ::libc::c_void
685 ) -> cudnnStatus_t;
686
687 pub fn cudnnCreatePoolingDescriptor(poolingDesc: *mut cudnnPoolingDescriptor_t) -> cudnnStatus_t;
688
689 pub fn cudnnSetPooling2dDescriptor(
690 poolingDesc: cudnnPoolingDescriptor_t,
691 mode: cudnnPoolingMode_t,
692 windowHeight: ::libc::c_int,
693 windowWidth: ::libc::c_int,
694 verticalPadding: ::libc::c_int,
695 horizontalPadding: ::libc::c_int,
696 verticalStride: ::libc::c_int,
697 horizontalStride: ::libc::c_int
698 ) -> cudnnStatus_t;
699
700 pub fn cudnnGetPooling2dDescriptor(
701 poolingDesc: cudnnPoolingDescriptor_t,
702 mode: *mut cudnnPoolingMode_t,
703 windowHeight: *mut ::libc::c_int,
704 windowWidth: *mut ::libc::c_int,
705 verticalPadding: *mut ::libc::c_int,
706 horizontalPadding: *mut ::libc::c_int,
707 verticalStride: *mut ::libc::c_int,
708 horizontalStride: *mut ::libc::c_int
709 ) -> cudnnStatus_t;
710
711 pub fn cudnnSetPoolingNdDescriptor(
712 poolingDesc: cudnnPoolingDescriptor_t,
713 mode: cudnnPoolingMode_t,
714 nbDims: ::libc::c_int,
715 windowDimA: *const ::libc::c_int,
716 paddingA: *const ::libc::c_int,
717 strideA: *const ::libc::c_int
718 ) -> cudnnStatus_t;
719
720 pub fn cudnnGetPoolingNdDescriptor(
721 poolingDesc: cudnnPoolingDescriptor_t,
722 nbDimsRequested: ::libc::c_int,
723 mode: *mut cudnnPoolingMode_t,
724 nbDims: *mut ::libc::c_int,
725 windowDimA: *mut ::libc::c_int,
726 paddingA: *mut ::libc::c_int,
727 strideA: *mut ::libc::c_int
728 ) -> cudnnStatus_t;
729
730 pub fn cudnnGetPoolingNdForwardOutputDim(
731 poolingDesc: cudnnPoolingDescriptor_t,
732 inputTensorDesc: cudnnTensorDescriptor_t,
733 nbDims: ::libc::c_int,
734 outputTensorDimA: *mut ::libc::c_int
735 ) -> cudnnStatus_t;
736
737 pub fn cudnnGetPooling2dForwardOutputDim(
738 poolingDesc: cudnnPoolingDescriptor_t,
739 inputTensorDesc: cudnnTensorDescriptor_t,
740 outN: *mut ::libc::c_int,
741 outC: *mut ::libc::c_int,
742 outH: *mut ::libc::c_int,
743 outW: *mut ::libc::c_int
744 ) -> cudnnStatus_t;
745
746 pub fn cudnnDestroyPoolingDescriptor(poolingDesc: cudnnPoolingDescriptor_t) -> cudnnStatus_t;
747
748 pub fn cudnnPoolingForward(
749 handle: cudnnHandle_t,
750 poolingDesc: cudnnPoolingDescriptor_t,
751 alpha: *const ::libc::c_void,
752 srcDesc: cudnnTensorDescriptor_t,
753 srcData: *const ::libc::c_void,
754 beta: *const ::libc::c_void,
755 destDesc: cudnnTensorDescriptor_t,
756 destData: *mut ::libc::c_void
757 ) -> cudnnStatus_t;
758
759 pub fn cudnnPoolingBackward(
760 handle: cudnnHandle_t,
761 poolingDesc: cudnnPoolingDescriptor_t,
762 alpha: *const ::libc::c_void,
763 srcDesc: cudnnTensorDescriptor_t,
764 srcData: *const ::libc::c_void,
765 srcDiffDesc: cudnnTensorDescriptor_t,
766 srcDiffData: *const ::libc::c_void,
767 destDesc: cudnnTensorDescriptor_t,
768 destData: *const ::libc::c_void,
769 beta: *const ::libc::c_void,
770 destDiffDesc: cudnnTensorDescriptor_t,
771 destDiffData: *mut ::libc::c_void
772 ) -> cudnnStatus_t;
773
774 pub fn cudnnActivationForward(
775 handle: cudnnHandle_t,
776 mode: cudnnActivationMode_t,
777 alpha: *const ::libc::c_void,
778 srcDesc: cudnnTensorDescriptor_t,
779 srcData: *const ::libc::c_void,
780 beta: *const ::libc::c_void,
781 destDesc: cudnnTensorDescriptor_t,
782 destData: *mut ::libc::c_void
783 ) -> cudnnStatus_t;
784
785 pub fn cudnnActivationBackward(
786 handle: cudnnHandle_t,
787 mode: cudnnActivationMode_t,
788 alpha: *const ::libc::c_void,
789 srcDesc: cudnnTensorDescriptor_t,
790 srcData: *const ::libc::c_void,
791 srcDiffDesc: cudnnTensorDescriptor_t,
792 srcDiffData: *const ::libc::c_void,
793 destDesc: cudnnTensorDescriptor_t,
794 destData: *const ::libc::c_void,
795 beta: *const ::libc::c_void,
796 destDiffDesc: cudnnTensorDescriptor_t,
797 destDiffData: *mut ::libc::c_void
798 ) -> cudnnStatus_t;
799
800 pub fn cudnnCreateLRNDescriptor(normDesc: *mut cudnnLRNDescriptor_t) -> cudnnStatus_t;
801
802 pub fn cudnnSetLRNDescriptor(
803 normDesc: cudnnLRNDescriptor_t,
804 lrnN: ::libc::c_uint,
805 lrnAlpha: ::libc::c_double,
806 lrnBeta: ::libc::c_double,
807 lrnK: ::libc::c_double
808 ) -> cudnnStatus_t;
809
810 pub fn cudnnGetLRNDescriptor(
811 normDesc: cudnnLRNDescriptor_t,
812 lrnN: *mut ::libc::c_uint,
813 lrnAlpha: *mut ::libc::c_double,
814 lrnBeta: *mut ::libc::c_double,
815 lrnK: *mut ::libc::c_double
816 ) -> cudnnStatus_t;
817
818 pub fn cudnnDestroyLRNDescriptor(lrnDesc: cudnnLRNDescriptor_t) -> cudnnStatus_t;
819
820 pub fn cudnnLRNCrossChannelForward(
821 handle: cudnnHandle_t,
822 normDesc: cudnnLRNDescriptor_t,
823 lrnMode: cudnnLRNMode_t,
824 alpha: *const ::libc::c_void,
825 srcDesc: cudnnTensorDescriptor_t,
826 srcData: *const ::libc::c_void,
827 beta: *const ::libc::c_void,
828 destDesc: cudnnTensorDescriptor_t,
829 destData: *mut ::libc::c_void
830 ) -> cudnnStatus_t;
831
832 pub fn cudnnLRNCrossChannelBackward(
833 handle: cudnnHandle_t,
834 normDesc: cudnnLRNDescriptor_t,
835 lrnMode: cudnnLRNMode_t,
836 alpha: *const ::libc::c_void,
837 srcDesc: cudnnTensorDescriptor_t,
838 srcData: *const ::libc::c_void,
839 srcDiffDesc: cudnnTensorDescriptor_t,
840 srcDiffData: *const ::libc::c_void,
841 destDesc: cudnnTensorDescriptor_t,
842 destData: *const ::libc::c_void,
843 beta: *const ::libc::c_void,
844 destDiffDesc: cudnnTensorDescriptor_t,
845 destDiffData: *mut ::libc::c_void
846 ) -> cudnnStatus_t;
847
848 pub fn cudnnDivisiveNormalizationForward(
849 handle: cudnnHandle_t,
850 normDesc: cudnnLRNDescriptor_t,
851 mode: cudnnDivNormMode_t,
852 alpha: *const ::libc::c_void,
853 srcDesc: cudnnTensorDescriptor_t,
854 srcData: *const ::libc::c_void,
855 srcMeansData:
856 *const ::libc::c_void,
857 tempData: *mut ::libc::c_void,
858 tempData2: *mut ::libc::c_void,
859 beta: *const ::libc::c_void,
860 destDesc: cudnnTensorDescriptor_t,
861 destData: *mut ::libc::c_void
862 ) -> cudnnStatus_t;
863
864 pub fn cudnnDivisiveNormalizationBackward(
865 handle: cudnnHandle_t,
866 normDesc: cudnnLRNDescriptor_t,
867 mode: cudnnDivNormMode_t,
868 alpha: *const ::libc::c_void,
869 srcDesc: cudnnTensorDescriptor_t,
870 srcData: *const ::libc::c_void,
871 srcMeansData: *const ::libc::c_void,
872 srcDiffData: *const ::libc::c_void,
873 tempData: *mut ::libc::c_void,
874 tempData2: *mut ::libc::c_void,
875 betaData: *const ::libc::c_void,
876 destDataDesc: cudnnTensorDescriptor_t,
877 destDataDiff: *mut ::libc::c_void,
878 destMeansDiff: *mut ::libc::c_void
879 ) -> cudnnStatus_t;
880
881 }