Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
composable_kernel
Commits
bb220a7a
Commit
bb220a7a
authored
Nov 03, 2022
by
Qianfeng Zhang
Browse files
Renaming again
parent
213187f6
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
55 additions
and
56 deletions
+55
-56
include/ck/tensor_operation/gpu/device/impl/device_batchnorm_backward_impl.hpp
...ration/gpu/device/impl/device_batchnorm_backward_impl.hpp
+15
-15
include/ck/tensor_operation/gpu/grid/batchnorm_multiblock/gridwise_multiblock_reduce_second_half_batchnorm_backward_final.hpp
...ultiblock_reduce_second_half_batchnorm_backward_final.hpp
+10
-10
include/ck/tensor_operation/gpu/grid/batchnorm_multiblock/gridwise_multiblock_welford_second_half_multiblock_reduce_first_half.hpp
...lock_welford_second_half_multiblock_reduce_first_half.hpp
+6
-6
library/include/ck/library/reference_tensor_operation/cpu/reference_batchnorm_backward_nhwc_c.hpp
...sor_operation/cpu/reference_batchnorm_backward_nhwc_c.hpp
+24
-25
No files found.
include/ck/tensor_operation/gpu/device/impl/device_batchnorm_backward_impl.hpp
View file @
bb220a7a
...
...
@@ -427,7 +427,7 @@ struct DeviceBatchNormBwdImpl : public DeviceBatchNormBwd<Rank, NumBatchNormRedu
DeviceBatchNormBwdImpl
::
MakeMultiblockFirstReduceOutputMG2dDescriptor
(
arg
.
invariant_length
,
arg
.
blkGroupSize
);
const
auto
scale_bias_
diff_
grid_desc_m_g
=
const
auto
d
scale_
d
bias_grid_desc_m_g
=
DeviceBatchNormBwdImpl
::
MakeMultiblockFirstReduceOutputMG2dDescriptor
(
arg
.
invariant_length
,
arg
.
blkGroupSize
);
...
...
@@ -435,14 +435,14 @@ struct DeviceBatchNormBwdImpl : public DeviceBatchNormBwd<Rank, NumBatchNormRedu
DeviceBatchNormBwdImpl
::
MakeMultiblockFinalReduceInputMK2dDescriptor
(
arg
.
invariant_length
,
arg
.
blkGroupSize
);
const
auto
scale_bias_
diff_
grid_desc_m_k
=
const
auto
d
scale_
d
bias_grid_desc_m_k
=
DeviceBatchNormBwdImpl
::
MakeMultiblockFinalReduceInputMK2dDescriptor
(
arg
.
invariant_length
,
arg
.
blkGroupSize
);
using
MeanVarCountGridDesc_M_G
=
decltype
(
mean_var_count_grid_desc_m_g
);
using
MeanVarCountGridDesc_M_K
=
decltype
(
mean_var_count_grid_desc_m_k
);
using
S
cale
B
ias
Diff
GridDesc_M_G
=
decltype
(
scale_bias_
diff_
grid_desc_m_g
);
using
S
cale
B
ias
Diff
GridDesc_M_K
=
decltype
(
scale_bias_
diff_
grid_desc_m_k
);
using
MeanVarCountGridDesc_M_G
=
decltype
(
mean_var_count_grid_desc_m_g
);
using
MeanVarCountGridDesc_M_K
=
decltype
(
mean_var_count_grid_desc_m_k
);
using
Ds
cale
Db
iasGridDesc_M_G
=
decltype
(
d
scale_
d
bias_grid_desc_m_g
);
using
Ds
cale
Db
iasGridDesc_M_K
=
decltype
(
d
scale_
d
bias_grid_desc_m_k
);
using
GridwiseWelfordSecondHalfReduceFirstHalf_
=
GridwiseWelfordSecondHalfReduceFirstHalf
<
XDataType
,
...
...
@@ -454,7 +454,7 @@ struct DeviceBatchNormBwdImpl : public DeviceBatchNormBwd<Rank, NumBatchNormRedu
XYGridDesc_M_K
,
MeanVarGridDesc_M
,
MeanVarCountGridDesc_M_K
,
S
cale
B
ias
Diff
GridDesc_M_G
,
Ds
cale
Db
iasGridDesc_M_G
,
BlockSize
,
MThreadClusterSize
,
KThreadClusterSize
,
...
...
@@ -474,7 +474,7 @@ struct DeviceBatchNormBwdImpl : public DeviceBatchNormBwd<Rank, NumBatchNormRedu
BiasDataType
,
MeanVarDataType
,
XYGridDesc_M_K
,
S
cale
B
ias
Diff
GridDesc_M_K
,
Ds
cale
Db
iasGridDesc_M_K
,
MeanVarGridDesc_M
,
ScaleBiasGridDesc_M
,
BlockSize
,
...
...
@@ -551,7 +551,7 @@ struct DeviceBatchNormBwdImpl : public DeviceBatchNormBwd<Rank, NumBatchNormRedu
XYGridDesc_M_K
,
MeanVarGridDesc_M
,
MeanVarCountGridDesc_M_K
,
S
cale
B
ias
Diff
GridDesc_M_G
>
;
Ds
cale
Db
iasGridDesc_M_G
>
;
const
auto
kern_reduce_second_half_batchnorm_backward_final
=
kernel_reduce_second_half_batchnorm_backward_final
<
...
...
@@ -563,11 +563,11 @@ struct DeviceBatchNormBwdImpl : public DeviceBatchNormBwd<Rank, NumBatchNormRedu
BiasDataType
,
MeanVarDataType
,
XYGridDesc_M_K
,
S
cale
B
ias
Diff
GridDesc_M_K
,
Ds
cale
Db
iasGridDesc_M_K
,
MeanVarGridDesc_M
,
ScaleBiasGridDesc_M
>
;
index_t
num
S
cale
B
ias
Diff
BlockTileIteration
=
index_t
num
Ds
cale
Db
iasBlockTileIteration
=
(
arg
.
blkGroupSize
+
KThreadClusterSize
-
1
)
/
KThreadClusterSize
;
avg_time
+=
launch_and_time_kernel
(
...
...
@@ -580,10 +580,10 @@ struct DeviceBatchNormBwdImpl : public DeviceBatchNormBwd<Rank, NumBatchNormRedu
arg
.
dy_grid_desc_m_k
,
arg
.
mean_var_grid_desc_m
,
mean_var_count_grid_desc_m_k
,
scale_bias_
diff_
grid_desc_m_g
,
d
scale_
d
bias_grid_desc_m_g
,
arg
.
blkGroupSize
,
arg
.
numBlockTileIteration
,
num
S
cale
B
ias
Diff
BlockTileIteration
,
num
Ds
cale
Db
iasBlockTileIteration
,
arg
.
epsilon_
,
arg
.
haveSavedMeanInvVar_
,
arg
.
haveSavedMeanInvVar_
?
arg
.
p_savedMean_
:
nullptr
,
...
...
@@ -616,14 +616,14 @@ struct DeviceBatchNormBwdImpl : public DeviceBatchNormBwd<Rank, NumBatchNormRedu
arg
.
x_grid_desc_m_k
,
arg
.
dy_grid_desc_m_k
,
arg
.
dx_grid_desc_m_k
,
scale_bias_
diff_
grid_desc_m_k
,
d
scale_
d
bias_grid_desc_m_k
,
arg
.
mean_var_grid_desc_m
,
arg
.
scale_grid_desc_m
,
arg
.
bias_grid_desc_m
,
arg
.
blkGroupSize
,
arg
.
reduce_length
,
arg
.
numBlockTileIteration
,
num
S
cale
B
ias
Diff
BlockTileIteration
,
num
Ds
cale
Db
iasBlockTileIteration
,
static_cast
<
const
ScaleDataType
*>
(
arg
.
workspace_reduce_dscale
),
static_cast
<
const
BiasDataType
*>
(
arg
.
workspace_reduce_dbias
),
arg
.
haveSavedMeanInvVar_
...
...
include/ck/tensor_operation/gpu/grid/batchnorm_multiblock/gridwise_multiblock_reduce_second_half_batchnorm_backward_final.hpp
View file @
bb220a7a
...
...
@@ -19,21 +19,21 @@ template <typename GridwiseReduceSecondHalfBatchNormBackwardFinal_,
typename
BiasDataType
,
typename
MeanVarDataType
,
typename
XYGridDesc_M_K
,
typename
S
cale
B
ias
Diff
GridDesc_M_K
,
typename
Ds
cale
Db
iasGridDesc_M_K
,
typename
MeanVarGridDesc_M
,
typename
ScaleBiasGridDesc_M
>
__global__
void
kernel_reduce_second_half_batchnorm_backward_final
(
const
XYGridDesc_M_K
x_grid_desc_m_k
,
const
XYGridDesc_M_K
dy_grid_desc_m_k
,
const
XYGridDesc_M_K
dx_grid_desc_m_k
,
const
S
cale
B
ias
Diff
GridDesc_M_K
dscale_dbias_grid_desc_m_k
,
const
Ds
cale
Db
iasGridDesc_M_K
dscale_dbias_grid_desc_m_k
,
const
MeanVarGridDesc_M
mean_var_grid_desc_m
,
const
ScaleBiasGridDesc_M
scale_grid_desc_m
,
const
ScaleBiasGridDesc_M
bias_grid_desc_m
,
index_t
blkgroup_size
,
long_index_t
reduce_size
,
index_t
num_xy_k_block_tile_iteration
,
index_t
num_scale_bias_
diff_
k_block_tile_iteration
,
index_t
num_
d
scale_
d
bias_k_block_tile_iteration
,
const
ScaleDataType
*
const
__restrict__
p_reduce_dscale
,
const
BiasDataType
*
const
__restrict__
p_reduce_dbias
,
const
MeanVarDataType
*
const
__restrict__
p_mean
,
...
...
@@ -55,7 +55,7 @@ __global__ void kernel_reduce_second_half_batchnorm_backward_final(
blkgroup_size
,
reduce_size
,
num_xy_k_block_tile_iteration
,
num_scale_bias_
diff_
k_block_tile_iteration
,
num_
d
scale_
d
bias_k_block_tile_iteration
,
p_reduce_dscale
,
p_reduce_dbias
,
p_mean
,
...
...
@@ -76,7 +76,7 @@ template <typename XDataType,
typename
BiasDataType
,
typename
MeanVarDataType
,
typename
XYGridDesc_M_K
,
typename
S
cale
B
ias
Diff
GridDesc_M_K
,
typename
Ds
cale
Db
iasGridDesc_M_K
,
typename
MeanVarGridDesc_M
,
typename
ScaleBiasGridDesc_M
,
index_t
BlockSize
,
...
...
@@ -148,14 +148,14 @@ struct GridwiseReduceSecondHalfBatchNormBackwardFinal
__device__
static
void
Run
(
const
XYGridDesc_M_K
&
x_grid_desc_m_k
,
const
XYGridDesc_M_K
&
dy_grid_desc_m_k
,
const
XYGridDesc_M_K
&
dx_grid_desc_m_k
,
const
S
cale
B
ias
Diff
GridDesc_M_K
&
dscale_dbias_grid_desc_m_k
,
const
Ds
cale
Db
iasGridDesc_M_K
&
dscale_dbias_grid_desc_m_k
,
const
MeanVarGridDesc_M
&
mean_var_grid_desc_m
,
const
ScaleBiasGridDesc_M
&
scale_grid_desc_m
,
const
ScaleBiasGridDesc_M
&
bias_grid_desc_m
,
index_t
blkgroup_size
,
long_index_t
reduce_size
,
index_t
num_xy_k_block_tile_iteration
,
index_t
num_scale_bias_
diff_
k_block_tile_iteration
,
index_t
num_
d
scale_
d
bias_k_block_tile_iteration
,
const
ScaleDataType
*
const
__restrict__
p_reduce_dscale
,
const
BiasDataType
*
const
__restrict__
p_reduce_dbias
,
const
MeanVarDataType
*
const
__restrict__
p_mean
,
...
...
@@ -220,7 +220,7 @@ struct GridwiseReduceSecondHalfBatchNormBackwardFinal
auto
threadwise_dscale_load_m_k
=
ThreadwiseTensorSliceTransfer_v2
<
ScaleDataType
,
AccDataType
,
S
cale
B
ias
Diff
GridDesc_M_K
,
Ds
cale
Db
iasGridDesc_M_K
,
decltype
(
thread_buffer_desc_m_1
),
ThreadBufferLengths_M_1
,
Sequence
<
0
,
1
>
,
...
...
@@ -236,7 +236,7 @@ struct GridwiseReduceSecondHalfBatchNormBackwardFinal
auto
threadwise_dbias_load_m_k
=
ThreadwiseTensorSliceTransfer_v2
<
BiasDataType
,
AccDataType
,
S
cale
B
ias
Diff
GridDesc_M_K
,
Ds
cale
Db
iasGridDesc_M_K
,
decltype
(
thread_buffer_desc_m_1
),
ThreadBufferLengths_M_1
,
Sequence
<
0
,
1
>
,
...
...
@@ -305,7 +305,7 @@ struct GridwiseReduceSecondHalfBatchNormBackwardFinal
dbias_thread_buf
(
I
)
=
type_convert
<
AccDataType
>
(
0.0
f
);
});
for
(
index_t
reducedTiles
=
0
;
reducedTiles
<
num_scale_bias_
diff_
k_block_tile_iteration
;
for
(
index_t
reducedTiles
=
0
;
reducedTiles
<
num_
d
scale_
d
bias_k_block_tile_iteration
;
++
reducedTiles
)
{
threadwise_dscale_load_m_k
.
Run
(
dscale_dbias_grid_desc_m_k
,
...
...
include/ck/tensor_operation/gpu/grid/batchnorm_multiblock/gridwise_multiblock_welford_second_half_multiblock_reduce_first_half.hpp
View file @
bb220a7a
...
...
@@ -22,13 +22,13 @@ template <typename GridwiseWelfordSecondHalfReduceFirstHalf_,
typename
XYGridDesc_M_K
,
typename
MeanVarGridDesc_M
,
typename
MeanVarCountGridDesc_M_K
,
typename
S
cale
B
ias
Diff
GridDesc_M_G
>
typename
Ds
cale
Db
iasGridDesc_M_G
>
__global__
void
kernel_welford_second_half_reduce_first_half
(
const
XYGridDesc_M_K
x_grid_desc_m_k
,
const
XYGridDesc_M_K
dy_grid_desc_m_k
,
const
MeanVarGridDesc_M
mean_var_grid_desc_m
,
const
MeanVarCountGridDesc_M_K
mean_var_count_grid_desc_m_k
,
const
S
cale
B
ias
Diff
GridDesc_M_G
dscale_dbias_grid_desc_m_g
,
const
Ds
cale
Db
iasGridDesc_M_G
dscale_dbias_grid_desc_m_g
,
index_t
blkgroup_size
,
index_t
num_xy_k_block_tile_iteration
,
index_t
num_mean_var_count_k_block_tile_iteration
,
...
...
@@ -78,7 +78,7 @@ template <typename XDataType,
typename
XYGridDesc_M_K
,
typename
MeanVarGridDesc_M
,
typename
MeanVarCountGridDesc_M_K
,
typename
S
cale
B
ias
Diff
GridDesc_M_G
,
typename
Ds
cale
Db
iasGridDesc_M_G
,
index_t
BlockSize
,
index_t
MThreadClusterSize
,
index_t
KThreadClusterSize
,
...
...
@@ -154,7 +154,7 @@ struct GridwiseWelfordSecondHalfReduceFirstHalf
const
XYGridDesc_M_K
&
dy_grid_desc_m_k
,
const
MeanVarGridDesc_M
&
mean_var_grid_desc_m
,
const
MeanVarCountGridDesc_M_K
&
mean_var_count_grid_desc_m_k
,
const
S
cale
B
ias
Diff
GridDesc_M_G
&
dscale_dbias_grid_desc_m_g
,
const
Ds
cale
Db
iasGridDesc_M_G
&
dscale_dbias_grid_desc_m_g
,
index_t
blkgroup_size
,
index_t
num_xy_k_block_tile_iteration
,
index_t
num_mean_var_count_k_block_tile_iteration
,
...
...
@@ -504,7 +504,7 @@ struct GridwiseWelfordSecondHalfReduceFirstHalf
ThreadwiseTensorSliceTransfer_v1r3
<
AccDataType
,
ScaleDataType
,
decltype
(
thread_buffer_desc_m_1
),
S
cale
B
ias
Diff
GridDesc_M_G
,
Ds
cale
Db
iasGridDesc_M_G
,
PassThroughOp
,
ThreadBufferLengths_M_1
,
Sequence
<
0
,
1
>
,
...
...
@@ -523,7 +523,7 @@ struct GridwiseWelfordSecondHalfReduceFirstHalf
ThreadwiseTensorSliceTransfer_v1r3
<
AccDataType
,
BiasDataType
,
decltype
(
thread_buffer_desc_m_1
),
S
cale
B
ias
Diff
GridDesc_M_G
,
Ds
cale
Db
iasGridDesc_M_G
,
PassThroughOp
,
ThreadBufferLengths_M_1
,
Sequence
<
0
,
1
>
,
...
...
library/include/ck/library/reference_tensor_operation/cpu/reference_batchnorm_backward_nhwc_c.hpp
View file @
bb220a7a
...
...
@@ -40,8 +40,8 @@ struct ReferenceBatchNormBwd_Input_N_H_W_C_Output_C : public device::DeviceBatch
const
MeanVarDataType
*
p_savedInvVar
,
double
epsilon
,
DxDataType
*
p_dx
,
ScaleDataType
*
p_scale
Diff
,
BiasDataType
*
p_bias
Diff
)
ScaleDataType
*
p_
d
scale
,
BiasDataType
*
p_
d
bias
)
:
p_x_
(
p_x
),
p_dy_
(
p_dy
),
p_scale_
(
p_scale
),
...
...
@@ -49,8 +49,8 @@ struct ReferenceBatchNormBwd_Input_N_H_W_C_Output_C : public device::DeviceBatch
p_savedInvVar_
(
p_savedInvVar
),
epsilon_
(
epsilon
),
p_dx_
(
p_dx
),
p_scale
Diff
_
(
p_scale
Diff
),
p_bias
Diff
_
(
p_bias
Diff
)
p_
d
scale_
(
p_
d
scale
),
p_
d
bias_
(
p_
d
bias
)
{
ignore
=
xStrides
;
ignore
=
dyStrides
;
...
...
@@ -81,8 +81,8 @@ struct ReferenceBatchNormBwd_Input_N_H_W_C_Output_C : public device::DeviceBatch
double
epsilon_
;
DxDataType
*
p_dx_
;
ScaleDataType
*
p_scale
Diff
_
;
BiasDataType
*
p_bias
Diff
_
;
ScaleDataType
*
p_
d
scale_
;
BiasDataType
*
p_
d
bias_
;
bool
haveSavedMeanInvVar_
;
...
...
@@ -113,7 +113,7 @@ struct ReferenceBatchNormBwd_Input_N_H_W_C_Output_C : public device::DeviceBatch
meansquare
=
type_convert
<
AccDataType
>
(
0.0
f
);
mean
=
type_convert
<
AccDataType
>
(
0.0
f
);
// compute mean, meanquare, variance, inv
V
ariance
// compute mean, meanquare, variance, inv
-v
ariance
for
(
index_t
iN
=
0
;
iN
<
arg
.
n_
;
iN
++
)
{
index_t
offset_N
=
iN
*
arg
.
h_
*
arg
.
w_
*
arg
.
c_
;
...
...
@@ -142,13 +142,12 @@ struct ReferenceBatchNormBwd_Input_N_H_W_C_Output_C : public device::DeviceBatch
std
::
sqrt
(
type_convert
<
AccDataType
>
(
arg
.
epsilon_
)
+
variance
);
};
AccDataType
bnBiasDiff
=
type_convert
<
AccDataType
>
(
0.0
f
);
// Sum on NHW of dy
AccDataType
bnScaleDiff
=
type_convert
<
AccDataType
>
(
0.0
f
);
// Sum on NHW of dy * norm_x
AccDataType
dbias
=
type_convert
<
AccDataType
>
(
0.0
f
);
// Sum on NHW of dy
AccDataType
dscale
=
type_convert
<
AccDataType
>
(
0.0
f
);
// Sum on NHW of dy * norm_x
// 1) calculate dy * (x - mean) * inv
V
ariance
// 2) calculate
S
um on NHW
C of dy
// 3) calculate
S
um
on NHWC of dy * norm_x
// 1) calculate dy * (x - mean) * inv
-v
ariance
// 2) calculate
s
um
(dy)
on NHW
dimensions
// 3) calculate
s
um
(dy * norm_x) on NHW dimensions
for
(
index_t
iN
=
0
;
iN
<
arg
.
n_
;
iN
++
)
{
index_t
offset_N
=
iN
*
arg
.
h_
*
arg
.
w_
*
arg
.
c_
;
...
...
@@ -166,17 +165,17 @@ struct ReferenceBatchNormBwd_Input_N_H_W_C_Output_C : public device::DeviceBatch
AccDataType
norm_x
=
(
x
-
mean
)
*
invVar
;
AccDataType
dy
=
type_convert
<
AccDataType
>
(
arg
.
p_dy_
[
offset
]);
bnBiasDiff
+=
dy
;
bnS
cale
Diff
+=
norm_x
*
dy
;
dbias
+=
dy
;
ds
cale
+=
norm_x
*
dy
;
};
}
};
arg
.
p_scale
Diff
_
[
offset_C
]
=
type_convert
<
ScaleDataType
>
(
bnS
cale
Diff
);
arg
.
p_bias
Diff
_
[
offset_C
]
=
type_convert
<
BiasDataType
>
(
bnBiasDiff
);
arg
.
p_
d
scale_
[
offset_C
]
=
type_convert
<
ScaleDataType
>
(
ds
cale
);
arg
.
p_
d
bias_
[
offset_C
]
=
type_convert
<
BiasDataType
>
(
dbias
);
// 1) calculate tmp = scale
Diff
* (x - mean) * inv
V
ariance
// 2) calculate dx = 1/nhw * inv
V
ariance * scale * (nhw * dy - bias
Diff
- tmp)
// 1) calculate tmp =
d
scale * (x - mean) * inv
-v
ariance
// 2) calculate dx = 1/nhw * inv
-v
ariance * scale * (nhw * dy -
d
bias - tmp)
for
(
index_t
iN
=
0
;
iN
<
arg
.
n_
;
iN
++
)
{
index_t
offset_N
=
iN
*
arg
.
h_
*
arg
.
w_
*
arg
.
c_
;
...
...
@@ -195,10 +194,10 @@ struct ReferenceBatchNormBwd_Input_N_H_W_C_Output_C : public device::DeviceBatch
AccDataType
dy
=
type_convert
<
AccDataType
>
(
arg
.
p_dy_
[
offset
]);
AccDataType
scale
=
type_convert
<
AccDataType
>
(
arg
.
p_scale_
[
offset_C
]);
AccDataType
tmpVal
=
norm_x
*
bnS
cale
Diff
;
AccDataType
tmpVal
=
norm_x
*
ds
cale
;
AccDataType
dx
=
type_convert
<
AccDataType
>
(
1.0
f
)
/
reduceSize
*
invVar
*
scale
*
(
reduceSize
*
dy
-
bnBiasDiff
-
tmpVal
);
scale
*
(
reduceSize
*
dy
-
dbias
-
tmpVal
);
arg
.
p_dx_
[
offset
]
=
type_convert
<
XDataType
>
(
dx
);
};
...
...
@@ -260,8 +259,8 @@ struct ReferenceBatchNormBwd_Input_N_H_W_C_Output_C : public device::DeviceBatch
const
void
*
p_savedInvVar
,
double
epsilon
,
void
*
p_dx
,
void
*
p_scale
Diff
,
void
*
p_bias
Diff
)
override
void
*
p_
d
scale
,
void
*
p_
d
bias
)
override
{
return
std
::
make_unique
<
Argument
>
(
xyLengths
,
xStrides
,
...
...
@@ -279,8 +278,8 @@ struct ReferenceBatchNormBwd_Input_N_H_W_C_Output_C : public device::DeviceBatch
static_cast
<
const
MeanVarDataType
*>
(
p_savedInvVar
),
epsilon
,
static_cast
<
DxDataType
*>
(
p_dx
),
static_cast
<
ScaleDataType
*>
(
p_scale
Diff
),
static_cast
<
BiasDataType
*>
(
p_bias
Diff
));
static_cast
<
ScaleDataType
*>
(
p_
d
scale
),
static_cast
<
BiasDataType
*>
(
p_
d
bias
));
};
std
::
unique_ptr
<
device
::
BaseInvoker
>
MakeInvokerPointer
()
override
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment