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