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
父主题: 基础函数