本文主要是介绍【darknet】源码阅读理解(四)——#pragma omp parallel for,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考自:https://www.cnblogs.com/qinguoyi/p/7251305.html
出处: darknet在cpu上进行CNN计算时。
Code:
void gemm_nn(int M, int N, int K, float ALPHA, float *A, int lda, float *B, int ldb,float *C, int ldc)
{int i,j,k;#pragma omp parallel forfor(i = 0; i < M; ++i){for(k = 0; k < K; ++k){register float A_PART = ALPHA*A[i*lda+k]; // 声明寄存器变量,提速for(j = 0; j < N; ++j){C[i*ldc+j] += A_PART*B[k*ldb+j];}}}
}
说明:
#pragma omp parallel for是OpenMP中的一个指令,表示接下来的for循环将被多线程执行,另外每次循环之间不能有关系
例子:
int main(int argc, char* argv[])
{
#pragma omp parallel for //后面是for循环for (int i = 0; i < 10; i++ ){printf("i = %d/n", i);}return 0;
}
这个程序执行后打印出以下结果:
i = 0
i = 5
i = 1
i = 6
i = 2
i = 7
i = 3
i = 8
i = 4
i = 9
for循环里的内容必须满足可以并行执行,即每次循环互不相干,后一次循环不依赖于前面的循环。
这篇关于【darknet】源码阅读理解(四)——#pragma omp parallel for的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!