#include <iostream>
#include <acl/acl.h>
#include <atb/atb_infer.h>
#include <atb/utils.h>
int main(){
int deviceId = 0;
aclError status = aclrtSetDevice(deviceId);
atb::infer::ElewiseParam param;
param.elewiseType = atb::infer::ElewiseParam::ELEWISE_ADD;
atb::Operation *op = nullptr;
atb::Status st = atb::CreateOperation(param, &op);
atb::Tensor a;
a.desc.dtype = ACL_INT32;
a.desc.format = ACL_FORMAT_ND;
a.desc.shape.dimNum = 2;
a.desc.shape.dims[0] = 3;
a.desc.shape.dims[1] = 3;
a.dataSize = atb::Utils::GetTensorSize(a);
status = aclrtMalloc(&a.deviceData, a.dataSize, ACL_MEM_MALLOC_HUGE_FIRST);
atb::Tensor b;
b.desc.dtype = ACL_INT32;
b.desc.format = ACL_FORMAT_ND;
b.desc.shape.dimNum = 2;
b.desc.shape.dims[0] = 3;
b.desc.shape.dims[1] = 3;
b.dataSize = atb::Utils::GetTensorSize(b);
status = aclrtMalloc(&b.deviceData, b.dataSize, ACL_MEM_MALLOC_HUGE_FIRST);
atb::Tensor output;
output.desc.dtype = ACL_INT32;
output.desc.format = ACL_FORMAT_ND;
output.desc.shape.dimNum = 2;
output.desc.shape.dims[0] = 3;
output.desc.shape.dims[1] = 3;
output.dataSize = atb::Utils::GetTensorSize(output);
status = aclrtMalloc(&output.deviceData, output.dataSize, ACL_MEM_MALLOC_HUGE_FIRST);
atb::VariantPack variantPack;
variantPack.inTensors = { a, b };
variantPack.outTensors = { output };
atb::Context *context = nullptr;
st = atb::CreateContext(&context);
aclrtStream stream = nullptr;
status = aclrtCreateStream(&stream);
context->SetExecuteStream(stream);
uint64_t workspaceSize = 0;
st = op->Setup(variantPack, workspaceSize, context);
void *workspace = nullptr;
status = aclrtMalloc(&workspace, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST);
st = op->Execute(variantPack, (uint8_t *)workspace, workspaceSize, context);
status = aclrtDestroyStream(stream);
status = aclrtFree(workspace);
st = atb::DestroyOperation(op);
st = atb::DestroyContext(context);
status = aclrtFree(a.deviceData);
a.deviceData = nullptr;
a.dataSize = 0;
status = aclrtFree(b.deviceData);
b.deviceData = nullptr;
b.dataSize = 0;
status = aclrtFree(output.deviceData);
output.deviceData = nullptr;
output.dataSize = 0;
}