使用 Ascend Transformer Boost 库图模式,构图完成后,两次执行 graph->Execute,第二次执行结果不对。代码如下:
void run(void* inputs[], int input_size, void* outputs[], int output_size) {
for (int i = 0; i < input_size; ++i) {
variant_pack.inTensors[i].deviceData = inputs[i];
}
for (int i = 0; i < output_size; ++i) {
variant_pack.outTensors[i].deviceData = outputs[i];
}
// graph->Setup(variant_pack, workspaceSize);
graph->Execute(variant_pack, static_cast<uint8_t*>(workspace), workspaceSize, context);
}
run(inputs, inputs_size, outputs, outputs_size); // 第一次调用
... // stream sync
run(inputs, inputs_size, outputs, outputs_size); // 第一次调用

不过当每次执行 Execute 之前都 stepup 一次的话,结果是对的,即如下代码:
void run(void* inputs[], int input_size, void* outputs[], int output_size) {
for (int i = 0; i < input_size; ++i) {
variant_pack.inTensors[i].deviceData = inputs[i];
}
for (int i = 0; i < output_size; ++i) {
variant_pack.outTensors[i].deviceData = outputs[i];
}
graph->Setup(variant_pack, workspaceSize);
graph->Execute(variant_pack, static_cast<uint8_t*>(workspace), workspaceSize, context);
}
run(inputs, inputs_size, outputs, outputs_size); // 第一次调用
... // stream sync
run(inputs, inputs_size, outputs, outputs_size); // 第一次调用

请问同一个graph,每次 Execute 之前,都必须 Setup 一次吗?我理解每次 Setup 是不是都有性能损失?
CANN 版本: 7.0.0
cpu架构:aarch64
硬件:Atlas 800T A2
使用 Ascend Transformer Boost 库图模式,构图完成后,两次执行 graph->Execute,第二次执行结果不对。代码如下:
void run(void* inputs[], int input_size, void* outputs[], int output_size) {
for (int i = 0; i < input_size; ++i) {
variant_pack.inTensors[i].deviceData = inputs[i];
}
for (int i = 0; i < output_size; ++i) {
variant_pack.outTensors[i].deviceData = outputs[i];
}
// graph->Setup(variant_pack, workspaceSize);
graph->Execute(variant_pack, static_cast<uint8_t*>(workspace), workspaceSize, context);
}
run(inputs, inputs_size, outputs, outputs_size); // 第一次调用
... // stream sync
run(inputs, inputs_size, outputs, outputs_size); // 第一次调用
不过当每次执行 Execute 之前都 stepup 一次的话,结果是对的,即如下代码:
void run(void* inputs[], int input_size, void* outputs[], int output_size) {
for (int i = 0; i < input_size; ++i) {
variant_pack.inTensors[i].deviceData = inputs[i];
}
for (int i = 0; i < output_size; ++i) {
variant_pack.outTensors[i].deviceData = outputs[i];
}
graph->Setup(variant_pack, workspaceSize);
graph->Execute(variant_pack, static_cast<uint8_t*>(workspace), workspaceSize, context);
}
run(inputs, inputs_size, outputs, outputs_size); // 第一次调用
... // stream sync
run(inputs, inputs_size, outputs, outputs_size); // 第一次调用
请问同一个graph,每次 Execute 之前,都必须 Setup 一次吗?我理解每次 Setup 是不是都有性能损失?
CANN 版本: 7.0.0
cpu架构:aarch64
硬件:Atlas 800T A2