HmppResult HMPP_SetNumberThreads (int32_t numberThreads);
HmppResult HMPP_GetNumberThreads (int32_t* numberThreads);
HmppResult HMPP_GetThreadIdx (int32_t* threadIdx);
HmppResult HMPP_GetThreadType (HmppThreadType* threadType);
参数名 |
描述 |
取值范围 |
输入/输出 |
---|---|---|---|
numberThreads |
要限定的线程数上限(SetNumberThreads)。 |
大于0 |
输入 |
numberThreads |
目标地址,指向内存存放当前线程数(GetNumberThreads)。 |
非空 |
输出 |
threadIdx |
目标地址,指向内存存放当前线程的ID。 |
非空 |
输出 |
threadType |
目标地址,指向内存存放当前线程模式。 |
非空 |
输出 |
错误码 |
描述 |
---|---|
HMPP_STS_NULL_PTR_ERR |
传入指针是空指针。 |
HMPP_STS_SIZE_ERR |
len小于或等于0。 |
#define NUMBER_THREAD_LIM 4 void Thread_Example() { HmppResult result = HMPP_SetNumberThreads(NUMBER_THREAD_LIM); printf("%s\n", HMPP_GetStatusString(result)); HmppThreadType testThrType; result = HMPP_GetThreadType(&testThrType); printf("%s\n", HMPP_GetStatusString(result)); if (testThrType == OMP) { printf("thread mode is omp\n"); #pragma omp parallel for for (int32_t i = 0; i < NUMBER_THREAD_LIM; ++i) { int32_t testNumThr, testThrIdx; HMPP_GetNumberThreads(&testNumThr); HMPP_GetThreadIdx(&testThrIdx); printf("testNumThr = %d, testThrIdx = %d\n", testNumThr, testThrIdx); } } else { printf("no thread mode\n"); int32_t testNumThr, testThrIdx; HMPP_GetNumberThreads(&testNumThr); HMPP_GetThreadIdx(&testThrIdx); printf("testNumThr = %d, testThrIdx = %d\n", testNumThr, testThrIdx); } }
运行结果:
No Error No Error no thread mode testNumThr = 1, testThrIdx = 0
No Error No Error thread mode is omp testNumThr = 4, testThrIdx = 1 testNumThr = 4, testThrIdx = 3 testNumThr = 4, testThrIdx = 2 testNumThr = 4, testThrIdx = 0