cpu是双核的....
------------------------------
理解中,2个线程的运算时间应该差不多是串行的一半啊.因为两个线程分别被调到2个cpu核中分别去运行了啊.内核中使用的是NPTL线程库。
结果怎么会这样?
(程序设计应该没有问题.)
---------------------------------------------------
#include
#include
#include
#include
const int MATRIX_SIZE=1000; //矩阵大小
typedef int DataType;
DataType **matrixA,**matrixB,**result;
void InitMatrix(DataType ***matrix) //分配二位数组的空间并初始化
{
*matrix=(DataType**)malloc(sizeof(DataType*)*MATRIX_SIZE);
int i,j;
for(i=0; i
srand((unsigned)time(NULL));
for(i=0; i
}
void FreeMatrix(DataType **matrix)
{
int i;
for(i=0; i
free(matrix);
}
//串行
void Calculate()
{
int i,j,k;
double start, finish;
start=(double)clock();
for(i=0; i
result[i][j]=0;
for(k=0; k
}
finish=(double)clock();
//printf("total time=%.4lf\n", (finish-start)/CLOCKS_PER_SEC);
}
//并行
const int NumThread=2; //线程个数
void* threadhandle(void *dum)
{
int i,j,k;
int start=*((int*)dum);
int stop=start+500;
for(i=start; i
result[i][j]=0;
for(k=0; k
}
}
//并行计算:创建2个线程
void Calculate_Parallel()
{
int i;
pthread_t pid[NumThread];
double start, finish;
start=(double)clock();
for(i=0; i
finish=(double)clock();
pthread_join(pid[i], NULL);
printf("total time=%.4lf\n", (finish-start)/CLOCKS_PER_SEC);
}
int main()
{
InitMatrix(&matrixA);
InitMatrix(&matrixB);
InitMatrix(&result);
Calculate();
Calculate_Parallel();
FreeMatrix(matrixA);
FreeMatrix(matrixB);
FreeMatrix(result);
}


faniyou 于 2008-07-29 15:18:42发表:
使用 pthread_join(pid, NULL); 将导致线程结束前无法返回
所以程序的最终结果是顺序执行,没有用到多线程并行处理的优势,所以时间一样。