param offsets
This commit is contained in:
parent
af0c5523ff
commit
0b886507dc
@ -1,5 +1,5 @@
|
|||||||
using CuArrays.CUDNN: @check, libcudnn, cudnnStatus_t, libcudnn_handle,
|
using CuArrays.CUDNN: @check, libcudnn, cudnnStatus_t, libcudnn_handle,
|
||||||
cudnnDataType, TensorDesc
|
cudnnDataType, TensorDesc, FilterDesc
|
||||||
|
|
||||||
mutable struct DropoutDesc
|
mutable struct DropoutDesc
|
||||||
ptr::Ptr{Void}
|
ptr::Ptr{Void}
|
||||||
@ -80,5 +80,31 @@ function rnnParamSize(r::RNNDesc)
|
|||||||
size = Csize_t[0]
|
size = Csize_t[0]
|
||||||
@check ccall((:cudnnGetRNNParamsSize, libcudnn), cudnnStatus_t, (Ptr{Void},Ptr{Void},Ptr{Void},Ptr{Csize_t},Cint),
|
@check ccall((:cudnnGetRNNParamsSize, libcudnn), cudnnStatus_t, (Ptr{Void},Ptr{Void},Ptr{Void},Ptr{Csize_t},Cint),
|
||||||
libcudnn_handle[], r, TensorDesc(r.T, (1,r.input,1)), size, cudnnDataType(r.T))
|
libcudnn_handle[], r, TensorDesc(r.T, (1,r.input,1)), size, cudnnDataType(r.T))
|
||||||
return Int(size[])
|
return Int(size[])÷sizeof(r.T)
|
||||||
|
end
|
||||||
|
|
||||||
|
# param layout:
|
||||||
|
# RNN: [weight, bias] × [input, hidden]
|
||||||
|
# GRU: [weight, bias] × [input, hidden] × [reset, update, newmem]
|
||||||
|
# LSTM: [weight, bias] × [input, hidden] × [input, forget, newmem, output]
|
||||||
|
|
||||||
|
function rnnMatrixOffset(r::RNNDesc, w::CuArray, param; layer = 1)
|
||||||
|
ptr = [C_NULL]
|
||||||
|
desc = FilterDesc(CuArrays.CUDNN.createFilterDesc())
|
||||||
|
@check ccall((:cudnnGetRNNLinLayerMatrixParams,libcudnn), cudnnStatus_t, (Ptr{Void},Ptr{Void},Cint,Ptr{Void},Ptr{Void},Ptr{Void},Cint,Ptr{Void},Ptr{Ptr{Void}}),
|
||||||
|
libcudnn_handle[], r, layer-1, TensorDesc(r.T, (1,r.input,1)), FilterDesc(reshape(w, 1, 1, :)), w, param-1, desc, ptr)
|
||||||
|
offset = ptr[]-Base.cconvert(Ptr{Void},w).ptr
|
||||||
|
CuArrays.CUDNN.free(desc)
|
||||||
|
return Int(offset)÷sizeof(r.T)
|
||||||
|
end
|
||||||
|
|
||||||
|
function rnnBiasOffset(r::RNNDesc, w::CuArray, param; layer = 1)
|
||||||
|
ptr = [C_NULL]
|
||||||
|
desc = FilterDesc(CuArrays.CUDNN.createFilterDesc())
|
||||||
|
@check ccall((:cudnnGetRNNLinLayerBiasParams,libcudnn), cudnnStatus_t, (Ptr{Void},Ptr{Void},Cint,Ptr{Void},Ptr{Void},Ptr{Void},Cint,Ptr{Void},Ptr{Ptr{Void}}),
|
||||||
|
libcudnn_handle[], r, layer-1, TensorDesc(r.T, (1,r.input,1)), FilterDesc(reshape(w, 1, 1, :)), w, param-1, desc, ptr)
|
||||||
|
offset = ptr[]-Base.cconvert(Ptr{Void},w).ptr
|
||||||
|
dims = size(desc)
|
||||||
|
CuArrays.CUDNN.free(desc)
|
||||||
|
return Int(offset)÷sizeof(r.T)
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user