中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

ParallelFor

并行化函数:

HmppResult HMPP_ParallelFor (int32_t numTasks, void *arg, function func);

可将要执行的多个任务封装在HmppResult(*function)(int32_t i, void *arg)内传入,使用方式见示例。

参数

参数名

描述

取值范围

输入/输出

numTasks

任务数。

大于0(小于0不会报异常,可以认为就是一个任务都不创建)。

输入

arg

地址,指向func函数的参数值。

非空

输入

func

要执行函数(即任务)的函数指针。

非空

输入

返回值

  • 成功:返回HMPP_STS_NO_ERR。
  • 失败:返回错误码

错误码

错误码

描述

HMPP_STS_NULL_PTR_ERR

arg或func指针为空指针。

开启的多线程中也会返回错误码,该错误码在自定义函数中设定,由调用者决定。

示例

#define LEN 20
 
void  ParallelFor_Example()
{
    typedef struct {
        int32_t val[LEN];
        int32_t rangeLen;
    }Arg;
    // 此函数实现的功能:对数组某段区间的数取绝对值
    auto func = [] (int32_t i, void *arg) -> HmppResult {
        Arg *args = (Arg *)arg;
        int32_t st = i * args->rangeLen;
        int32_t ed = st + args->rangeLen;
        for (int32_t k = st; k < ed; ++k) {
            args->val[k] = abs(args->val[k]);
        }
        return HMPP_STS_NO_ERR;
    };

    Arg arg;
    arg.rangeLen = 5;
    for (int32_t i = 0; i < LEN; ++i) {
        arg.val[i] = -(i + 1);
    }

    HmppResult result = HMPP_ParallelFor(LEN / arg.rangeLen, (void*)&arg, func);

    for (int32_t i = 0; i < LEN; ++i) {
        printf("%d\n", arg.val[i]);
    }
}

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20