Qualcomm Heterogeneous Compute SDK(2)

    在 Qualcomm Heterogeneous Compute SDK(1) 中我们详细介绍了 Kernel,它是对工作单元的抽象,并且可以和其它
API 配合使用;我们也介绍了关于 CPU Affinity 的 API 以及一些可以简化并行编程的模式及相关 API。在本文中,我们将
继续讨论Qualcomm Heterogeneous Compute SDK 的剩余内容,它们是任务管理和缓冲区(内存)管理。

4.Tasks

    Task 是异步执行的基础单位。具体来说,任务是一个独立的工作单元,它可以在 CPU、GPU、DSP 上异步执行。
任务将计算和数据绑定,包含控制和数据两部分。控制部分可以是一个 C++ 函数,一个(前述) Kernel,或一个模式等;
数据部分则可以是缓冲区、函数参数等。

    Qualcomm Heterogeneous Compute SDK 中的任务管理 API 使得任务管理更简单,同时还支持把相关的任务组成一个
任务集。它与应用程序和高通平台硬件的关系如下图所示。

    你可以创建一个 Task,然后就能使用 SDK 中的 API 来控制该任务了。Qualcomm Heterogeneous Compute SDK 中的
Task API 如下图所示。

    下列代码展示了如何使用 Qualcomm Heterogeneous Compute SDK 的任务 API 创建并管理任务。

    void vector_double(std::vector<int> & x,
                std::vector<int> & y)
    {
        for (size_t i = 0; i < x.size(); i++)
        {
            y[i] = x[i] * 2;
        }
    }

    auto ck = hetcompute::create_cpu_kernel(vector_double);
    ck.set_big();

    auto t = hetcompute::create_task(ck, a, b);
    t->launch();
    t->wait_for();

    如示例代码所示,你可以从一个 CPU Kernel 创建一个 Task,并在运行时启动该任务,然后等待该任务完成。

5.Buffers

    Qualcomm Heterogeneous Compute SDK 的缓冲管理实际就是异构内存管理,它具有一下特性:

        可以管理用户定义的,类数组类型的数据存储

        对 OpenGL、OpenCL、Textures 和 ION 抽象出专用的内存

        可以被 CPU Task、GPU Task、DSP Task 以及 主机应用访问

        包含可以在不同计算核心间高效地移动并同步数据的 API

    Qualcomm Heterogeneous Compute SDK 缓冲管理与应用程序和高通平台硬件间的关系如下图所示。

    下图展示了 Qualcomm Heterogeneous Compute SDK 缓冲管理的关键 API。

    下列示例代码展示了如何使用这些 API 进行内存管理。

    void vector_double(std::vector<int> & x,
                std::vector<int> & y)
    {
        for (size_t i = 0; i < x.size(); i++)
        {
            y[i] = x[i] * 2;
        }
    }

    auto b1 = hetcompute::create_buffer<int>(10);
    auto b1 = hetcompute::create_buffer<int>(10);

    b1.acquire_wi();
    for (size_t i = 0; i < b1.size(); i++)
        b1[i] = int(i);
    b1.release();

    auto ck = hetcompute::create_cpu_kernel(vector_double);
    auto t = hetcompute::create_task(ck, b1, b2);
    t->launch();
    t->wait_for();

    如示例代码所示,你可以创建一个 int 类型的缓冲区,在应用中获取该缓冲区并向其中填充数据,创建一个
CPU Kernel Task 并绑定缓冲区数据,然后启动该任务。该任务将对绑定的数据缓冲区具有读写权限。

    最后,如果使用 ION 内存作为后备存储,将提升应用的性能,因为这避免了数据拷贝。CPU、GPU 和 DSP 对
不同内存的访问权限如下图所示。

6.总结

    Qualcomm Heterogeneous Compute SDK 包含 Affinity、Patterns、Tasks 和 Buffers 四方面的 API,
开发者可以利用该 SDK 开发出特定领域的高性能应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值