⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loopa2.c

📁 并行计算的演示程序
💻 C
字号:
/*************************************************************************DESCRIPTION:       		Parallelizing an inner loop with dependences		Backward dependency		for (iter=0; iter<numiter; iter++) {			for (i=0; i<size-1; i++) {				V[i] = f( V[i], V[i+1] );			}		}		Method: Eliminate dependences by duplicating data		Optimization: None, duplicate the full dataCOMMENTS:          */#include<stdio.h>#include<stdlib.h>#include<omp.h>#define VSIZE 40000#define THREADS_NUM 4/* PROTOYPES *//* MAIN: PROCESS PARAMETERS */void main() {int V[VSIZE],U[VSIZE];int border,size;int LimitL, LimitR;	int i,id;omp_set_num_threads(THREADS_NUM);size = VSIZE / THREADS_NUM ;for (i=0; i<VSIZE; i++) {	V[i] = U[i] = i;	}for (i=0; i<VSIZE; i++) {	U[i] = U[i] + U[i+1];	}		#pragma omp parallel default(none) shared(V,size) private(id,LimitL,LimitR,border,i)	{		id = omp_get_thread_num();		LimitL = id*size;	LimitR = (id+1)*size-1;		if (id != THREADS_NUM) border = V[LimitR+1];	#pragma omp 	barrier			for (i=LimitL; i<LimitR; i++) {			V[i] = V[i] + V[i+1];			}			if (id != THREADS_NUM-1)			V[LimitR] = V[LimitR] + border ;			#pragma omp 	barrier		}		for ( i = 0; i<VSIZE;i++)     if ( V[i] != U[i] ) printf("V[%d] error\n",i);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -