多线程多Stream

调用接口后,需增加异常处理的分支,并记录报错日志、提示日志,此处不一一列举。以下是关键步骤的代码示例,不可以直接拷贝编译运行,仅供参考。

#include "acl/acl.h"
// ......
void runThread(aclrtStream stream) {
    int32_t deviceId =0 ;
    aclrtContext context;

    // 如果只创建了一个Context,线程默认将这个Context作为线程当前的Context;
    // 如果是多个Context,则需要调用aclrtSetCurrentContext接口设置当前线程的Context
    aclrtCreateContext(&context, deviceId);
    aclrtCreateStream(&stream);

    // 调用触发任务的接口
    // ....

    // 释放资源
    aclrtDestroyStream(stream);
    aclrtDestroyContext(context);
   
}

aclrtStream stream1;
aclrtStream stream2;
// 创建2个线程,每个线程对应一个Stream
std::thread t1(runThread, stream1);
std::thread t2(runThread, stream2);
// 显式调用join函数确保结束线程
t1.join();
t2.join();