InitValue
函数功能
通过该host侧接口设置算子输出的初始值,设置后会在算子执行前对算子输出的GM空间进行清零操作或者插入memset算子进行初始值设置。
函数原型
- 在算子执行前,对输出参数对应GM空间进行清零
OpParamDef &InitValue(uint64_t value);
- 指定输出参数初值的类型和值,输出参数调用该接口,会在算子执行前,对输出参数对应GM空间插入对应类型和值的memset算子。
OpParamDef &InitValue(const ScalarVar &value);
- 指定输出参数初值类型和值的列表,依次对应输出参数的数据类型和数据格式组合,会在算子执行前,对输出参数对应GM空间插入对应类型和值的memset算子。
OpParamDef &InitValue(const std::vector<ScalarVar> &value);
参数说明
返回值说明
OpParamDef算子定义,OpParamDef请参考OpParamDef。
约束说明
- InitValue和SetNeedAtomic接口配合使用,否则会出现初始化不生效的情况。
- 针对OpParamDef &InitValue(uint64_t value)接口,算子输出参数的数据类型支持范围如下:UINT64/INT64/UINT32/INT32/UINT16/INT16/UINT8/INT8/FLOAT32/FLOAT16,超出该范围为未定义行为。
- 针对OpParamDef &InitValue(const std::vector<ScalarVar> &value)接口输入value的size需要与输出参数配置的DataType或DataTypeList接口参数的size一致。同时,相同数据类型需保证设置的类型和值相同,否则将会报错。
- 对于同一个输出参数仅支持调用一种接口设置初值,调用多种InitValue接口为未定义行为;多次调用同一种接口以最后一次调用设置的初值为准。
调用示例
// OpParamDef &InitValue(uint64_t value)示例 this->Output("z") .ParamType(REQUIRED) .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32}) .FormatList({ ge::FORMAT_ND}) .InitValue(0); // OpParamDef &InitValue(const ScalarVar &value)示例 this->Output("z") .ParamType(REQUIRED) .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32}) .FormatList({ ge::FORMAT_ND}) .InitValue({ScalarType::INT16, 1}); // OpParamDef &InitValue(const std::vector<ScalarVar> &value)示例 this->Output("z") .ParamType(REQUIRED) .DataType({ge::DT_FLOAT16, ge::DT_FLOAT, ge::DT_INT32}) .FormatList({ ge::FORMAT_ND}) .InitValue({{ScalarType::INT16, 1}, {ScalarType::FLOAT32, 3.2}, {ScalarType::INT64, 7}}); this->Output("z") .ParamType(REQUIRED) .DataType({ge::DT_INT32, ge::DT_FLOAT, ge::DT_INT32}) // 第一个和第三个DataType相同 .Format({ge::FORMAT_ND, ge::FORMAT_ND, ge::FORMAT_NHWC}) .InitValue({{ScalarType::INT16, 1}, {ScalarType::FLOAT32, 3.2}, {ScalarType::INT16, 1}}); // InitValue对应的数据类型和数值也需相同
父主题: OpParamDef