Created by: wangchaochaohu
- Add support for attr cal in Fusion group
- fill_constant OP support
- scale Op support
定义了一种新的取值方式,整体思路对于之前实现的${0}这种数字代表输入的方式加强,添加了表达式中可以对Attr 进行操作,目前我们不支持Attr为Tensor 这种方式, 因为Tensor的输入是Runtime的时候决定的,对于Fusion Group 来说状态不可活的。 我们通过${Attr}这种方式来标识Op的Attr,再code_generator中获取Attr 并传递给code_generator_helper中进行处理,得到最终的计算表达式。
I0325 06:55:08.236503 50258 fusion_group_pass.cc:56] subgraph: {
Node(Op(fill_constant), inputs:{ShapeTensor[], ShapeTensorList[]}, outputs:{Out[fill_constant_0.tmp_0]}), inputs:{}, outputs:{fill_constant_0.tmp_0}.
Node(data0{2x2}), inputs:{}, outputs:{elementwise_add}
Node(data1{2x2}), inputs:{}, outputs:{elementwise_add}
Node(fill_constant_0.tmp_0{2x2}), inputs:{fill_constant}, outputs:{scale}
Node(Op(elementwise_add), inputs:{X[data0], Y[data1]}, outputs:{Out[elementwise_add_1]}), inputs:{data0, data1}, outputs:{elementwise_add_1}.
Node(Op(scale), inputs:{ScaleTensor[], X[fill_constant_0.tmp_0]}, outputs:{Out[scale_0.tmp_0]}), inputs:{fill_constant_0.tmp_0}, outputs:{scale_0.tmp_0}.
Node(elementwise_add_1{2x2}), inputs:{elementwise_add}, outputs:{elementwise_mul, elementwise_mul_grad}
Node(scale_0.tmp_0{2x2}), inputs:{scale}, outputs:{elementwise_mul, elementwise_mul_grad}
Node(Op(elementwise_mul), inputs:{X[scale_0.tmp_0], Y[elementwise_add_1]}, outputs:{Out[elementwise_mul_0]}), inputs:{scale_0.tmp_0, elementwise_add_1}, outputs:{elementwise_mul_0}.
Node(elementwise_mul_0{2x2}), inputs:{elementwise_mul}, outputs:{mean, mean_grad}
}
extern "C" __global__ void FusedElementwise2(int N, float* arg0, float* arg1, float* arg2, float* arg3, float* arg4, float* arg5) {
for(int idx = blockIdx.x * blockDim.x + threadIdx.x;
idx < N;
idx += gridDim.x * blockDim.x) {
float tmp0 = arg0[idx];
float tmp1 = arg1[idx];
float tmp2 = static_cast<float>(2.0);
float tmp3 = tmp0 + tmp1;
float tmp4 = true ? (3 * tmp2 + 1) : (3 * (tmp2 + 1));
float tmp5 = tmp4 * tmp3;
arg2[idx] = tmp2;
arg3[idx] = tmp3;
arg4[idx] = tmp4;
arg5[idx] = tmp5;
}
}
language_model上测试static large model 没有性能提升