/
example.py
64 lines (48 loc) · 2.06 KB
/
example.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python
import pycuda.autoinit
import pycuda.driver as drv
from pycuda import gpuarray
import libcudnn, ctypes
import numpy as np
inputsize = 100
hiddensize = 200
seqlength = 50
minibatch = 8
numlayers = 2
inputmode = 0
direction = 0
mode = 0
datatype = 0
handle = libcudnn.cudnnCreate()
rnndesc = libcudnn.cudnnCreateRNNDescriptor()
dropoutdesc = libcudnn.cudnnCreateDropoutDescriptor()
cudnnSetDropoutDescriptor(dropoutdesc, handle, 0, 0, 0, 0)
libcudnn.cudnnSetRNNDescriptor(rnndesc, hiddensize, seqlength, numlayers,
dropoutdesc, inputmode, direction, mode, datatype)
xdescs = [libcudnn.cudnnCreateTensorDescriptor() for _ in xrange(seqlength)]
[libcudnn.cudnnSetTensorNdDescriptor(xdesc, 0, 3, [inputsize, minibatch, seqlength]) for xdesc in xdescs]
hxdesc = libcudnn.cudnnCreateTensorDescriptor()
libcudnn.cudnnSetTensorNdDescriptor(hxdesc, 0, 3, [hiddensize, minibatch, numlayers])
cxdesc = libcudnn.cudnnCreateTensorDescriptor()
libcudnn.cudnnSetTensorNdDescriptor(cxdesc, 0, 3, [hiddensize, minibatch, numlayers])
paramssize = libcudnn.cudnnGetRNNParamsSize(handle, rnndesc, xdescs)
wdesc = libcudnn.cudnnCreateFilterDescriptor()
libcudnn.cudnnSetFilterNdDescriptor(wdesc, 0, 0, 3, [paramssize, 1, 1])
ydescs = [libcudnn.cudnnCreateTensorDescriptor() for _ in xrange(seqlength)]
[libcudnn.cudnnSetTensorNdDescriptor(ydesc, 0, 3, [hiddensize, minibatch, seqlength]) for ydesc in ydescs]
hydesc = libcudnn.cudnnCreateTensorDescriptor()
libcudnn.cudnnSetTensorNdDescriptor(hydesc, 0, 3, [hiddensize, minibatch, numlayers])
cydesc = libcudnn.cudnnCreateTensorDescriptor()
libcudnn.cudnnSetTensorNdDescriptor(cydesc, 0, 3, [hiddensize, minibatch, numlayers])
workspacesize = libcudnn.cudnnGetRNNWorkspaceSize(handle, rnndesc, xdescs)
reservespacesize = libcudnn.cudnnGetRNNTrainingReserveSize(handle, rnndesc, xdescs)
libcudnn.cudnnRNNForwardTraining(handle, rnndesc,
xdescs, x,
hxdesc, hx,
cxdesc, cx,
wdesc, w,
ydesc, y,
hydesc, hy,
cydesc, cy,
workspace, workspacesize,
reservespace, reservespacesize)