资源简介

天津大学并行计算实验报告第一二次的实验,最好还是自己动手做啊,这个只是用来参考的。而且这么简单的实验,有抄袭的必要么?那也太弱了。

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*初始化条件变量*/
long long  maxn ;    //计算规模
double ans = 0;      //结果
long long  pnum = 10;//线程数
long long maxn2;     //
long long over;      //线程结束数
struct node{         //保存每个线程计算的起点和终点
    long long  beginend;
};
void *thread(void*xx) //线程执行指令
{
    double x = 0yy;
    node y = *(node*)xx;
    long long maxn1 = (long long)maxn*maxn;
    for(long long  i = y.begin;i < y.end; i++) //每个线程的计算任务
    {
        x += 1.0/(maxn1+(i+0.5)*(i+0.5));
    }
    pthread_mutex_lock(&mutex); //加锁更新总结果以及更新线程结束的个数
    ans += x;
    over++;
    pthread_mutex_unlock(&mutex);//解锁
    void *statu;
    pthread_exit(&statu);//结束线程
}
int main(int argc char*argv[])
{
   struct timeval tv;
   gettimeofday(&tv NULL);
   double time_start time_end; //保存程序开始时间和结束时间
   //获取当前开始时间
   time_start = (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0;
   pnum = atoi(argv[1]);        //获取线程数
   maxn = atoi(argv[2]);        //获取数据规模
   pthread_t pid[1000];         //保存线程id
   node xx[1000];
   maxn2= (long long )maxn*maxn;
   over = 0;
   //给每个线程分配计算的开始和结束位置,并创建线程
   long long  begin = 0 length = (maxn+pnum-1)/pnum;
   for(long long  i = 0;i < pnum; i++)
   {
        xx[i].begin = begin;
        xx[i].end = min((long long)maxnbegin+length);
        begin = begin+length;
        pthread_create(&pid[i]NULLthread&xx[i]);
   }
   while(over != pnum) {usleep(5);} //查看是否所有线程完成任务
   ans  = 4.0*ans*maxn;
   pthread_mutex_destroy(&mutex);
   gettimeofday(&tv NULL);        //获取当前结束时间
   time_end = (double)tv.tv_sec + (double)tv.tv_usec / 1000000.0;
   //输出结果
   printf(“pnum:%lld scale:%lld the pi result:%0.10lf   thetimecost:%lf\n“pnummaxnanstime_end-time_start);
   return 0;
}



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件      154624  2014-03-28 20:49  1_多线程求pi - 副本.doc
     文件     1350144  2014-03-28 20:49  2_多线程求卷积 - 副本.doc
     目录           0  2014-03-20 09:29  test1\
     文件         371  2014-03-18 10:41  test1\shell1.txt
     文件        2188  2014-03-20 08:50  test1\test1.cpp
     目录           0  2014-03-20 09:29  test2\
     文件          71  2014-03-20 13:26  test2\2.txt
     文件      525798  2014-03-21 12:37  test2\dataout0.txt
     文件      526769  2014-03-21 12:37  test2\dataout1.txt
     文件      527484  2014-03-21 12:37  test2\dataout2.txt
     文件      527492  2014-03-21 12:37  test2\dataout3.txt
     文件      527501  2014-03-21 12:37  test2\dataout4.txt
     文件     3096826  2014-03-21 14:10  test2\dataout5.txt
     文件        2691  2014-03-21 15:06  test2\test2.cpp

评论

共有 条评论