Ascend Transformer Boost 库图模式,同一个graph,多次执行结果不正确
收藏回复举报
Ascend Transformer Boost 库图模式,同一个graph,多次执行结果不正确
t('forum.solved') 已解决
发表于2024-03-27 13:11:45
0 查看

使用 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);   // 第一次调用

cke_10786.png

不过当每次执行 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);   // 第一次调用

cke_27223.png

请问同一个graph,每次 Execute 之前,都必须 Setup 一次吗?我理解每次 Setup 是不是都有性能损失?

CANN 版本: 7.0.0

cpu架构:aarch64

硬件:Atlas 800T A2

我要发帖子