首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 工作总结
  • 工作计划
  • 心得体会
  • 竞聘演讲
  • 会议发言
  • 爱国演讲
  • 就职演说
  • 开业开幕
  • 思想学习
  • 征文演讲
  • 经验材料
  • 述职报告
  • 调研报告
  • 工作汇报
  • 年终总结
  • 申报材料
  • 学习体会
  • 企划方案
  • 活动方案
  • 技巧经验
  • 模板范例
  • 思想宣传
  • 经济工作
  • 工作报告
  • 组织人事
  • 反腐倡廉
  • 慰问贺电
  • 先进事迹
  • 思想汇报
  • 入党申请书
  • 党会发言
  • 先进性教育
  • 入团申请书
  • 个人简历
  • 演讲稿
  • 调查报告
  • 实习报告
  • 和谐社会
  • 观后感
  • 读后感
  • 作文范文
  • 自我鉴定
  • 讲话稿
  • 自查报告
  • 里仁多核程序设计实验报告

    时间:2021-02-27 12:07:29 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:多核 程序设计 实验

    里仁多核程序设计实验报告 本文关键词:多核,程序设计,实验,报告

    里仁多核程序设计实验报告 本文简介:多核程序设计实验报告Multi-coreProgrammingExperimentReport学生所在学院:里仁学院学生所在班级:学生姓名:学生学号:指导教师:教务处2014年4月实验一Windows多线程编程模块一:基础练习一.实验目的与要求二.实验环境及软件三.实验内容四.实验代码·#inclu

    里仁多核程序设计实验报告 本文内容:

    多核程序设计实验报告

    Multi-core

    Programming

    Experiment

    Report

    学生所在学院:

    里仁学院

    学生所在班级:

    2014年

    4

    实验一

    Windows多线程编程

    模块一:基础练习

    一.

    实验目的与要求

    二.

    实验环境及软件

    三.

    实验内容

    四.

    实验代码

    ·

    #include

    ·

    #include

    ·

    #include

    ·

    #include

    ·

    void

    test(int

    n)

    ·

    {

    ·

    for

    (int

    i

    =

    0;

    i

    #include

    #include

    #define

    NN

    2000

    int

    A[NN][NN],B[NN][NN];

    long

    long

    C[NN][NN];

    void

    solve(int

    n,int

    num_thread){

    int

    i,j,t,k,paralleltime,serialtime;

    clock_t

    startTime,endTime;

    long

    long

    sum;

    omp_set_num_threads(num_thread);

    //--------------对矩阵A和矩阵B进行初始化-------------

    for

    (i

    =

    0;

    i

    #include

    #include

    #include

    using

    namespace

    std;

    static

    long

    num_steps=1000000000;//定义所分的块数

    #define

    NUM_THREADS

    2

    //定义所开启的线程数

    int

    _tmain(int

    argc,_TCHAR*

    argv[])

    {

    int

    i;

    omp_set_num_threads(NUM_THREADS);//开启线程

    double

    x,sum=0.0,pi;

    clock_t

    start_time,end_time;

    double

    step=1.0/(double)num_steps;

    //并行--------------------------------------

    start_time=clock();

    #pragma

    omp

    parallel

    sections

    reduction(+:sum)

    private(x,i)

    {

    #pragma

    omp

    section

    {

    for

    (i=omp_get_thread_num();i

    #include

    #include

    #include

    #include

    “omp.h“using

    namespace

    std;

    //int

    count=0;

    void

    swap(int

    tmp

    =

    a;

    a

    =

    b;

    b

    =

    tmp;

    }

    void

    quicksort(intA,int

    l,int

    u)

    {

    int

    i,m,k;

    if

    (l

    >=

    u)

    return;

    m

    =

    l;

    for

    (i

    =

    l

    +

    1;

    i

    <=

    u;

    i++)

    if

    (A[i]

    <

    A[l])

    /*不管是选第一个元素作为pivot还是最后一个作为pivot,假如我们想得到的是从小到大的序列,那么最坏的输入情况就是从大到小的;如果我们想得到从大到小的序列,那个最坏的输入情况就是从小到大的序列*/

    swap(A[++m],A[i]);

    swap(A[l],A[m]);

    quicksort(A,l,m

    -

    1);

    quicksort(A,m

    +

    1,u);

    }

    void

    main(int

    argc,charargv)

    {

    omp_set_num_threads(2);//----------------设置线程数为2,因为是双核的CPU

    int

    k

    =

    0,i

    =

    0;

    int

    m

    =

    0,n

    =

    0;

    double

    cost

    =

    0;

    int

    len

    =

    10000;

    int

    short_len

    =

    len

    /

    2;

    int

    B[10000],C[10000],D[5000],E[5000];//--------将B[]分为两个小的数组,并行的对他们调用快速排序算法

    #pragma

    omp

    parallel

    default(none)

    shared(B,C,len)

    private(i)//---这个for循环是并行的

    {

    int

    j

    =

    50000;

    #pragma

    omp

    for

    for

    (i

    =

    0;

    i

    i++)

    {

    B[i]

    =

    j--;

    C[i]

    =

    j--;

    //初始化B[],C[]数组

    }

    }

    clock_t

    begin

    =

    clock();//----------------计时开始点

    #pragma

    omp

    parallel

    default(none)

    shared(B,D,E,short_len)

    private(i)//---这个for循环是并行的

    {

    #pragma

    omp

    for

    for

    (i

    =

    0;

    i

    i++)//---这个for循环是并行的

    {

    D[i]

    =

    B[i];//将B[]的前5000个数放入D[]

    E[i]

    =

    B[i

    +

    5000];//将B[]的后5000个数放入E[]

    }

    }

    #pragma

    omp

    parallel

    default(none)

    shared(E,D,short_len)

    //private(i)------快速排序的并行region

    {

    #pragma

    omp

    parallel

    sections

    {

    #pragma

    omp

    section

    quicksort(D,0,short_len

    -

    1);//对D[]排序

    #pragma

    omp

    section

    quicksort(E,0,short_len

    -

    1);//对E[]排序

    }

    }

    for

    (;

    k

    k++)//----------将D[]和E[]进行归并排序放入B[]里面

    {

    if

    (m

    n++;

    }

    else

    {

    B[k]

    =

    E[m];

    m++;

    }

    }

    if

    (m

    ==

    short_len

    ||

    n

    ==

    short_len)

    {

    if

    (m

    ==

    short_len)

    B[k]

    =

    E[m];

    else

    B[k]

    =

    D[n

    -

    1];

    k

    +=

    1;

    break;

    }

    }

    if

    (/*m==short_len

    for

    (int

    p

    =

    0;

    p

    p++)

    {

    B[k]

    =

    D[n];

    n++;

    k++;

    }

    }

    else

    if

    (/*n==short_len

    for

    (int

    q

    =

    0;

    q

    q++)

    {

    B[k]

    =

    E[m];

    m++;

    k++;

    }

    }//----------------------------归并算法结束

    clock_t

    end

    =

    clock();//----------------计时结束点

    cost

    =

    (double)(end

    -

    begin);

    cout

    <<

    “并行时间“<<

    cost

    <<

    endl;

    //串行开始

    begin

    =

    clock();

    quicksort(C,0,len

    -

    1);

    end

    =

    clock();

    cost

    =

    (double)(end

    -

    begin);

    cout

    <<

    “串行时间“<<

    cost

    <<

    endl;

    system(“pause“);

    实验结果:

    封面设计:

    贾丽

    址:中国河北省秦皇岛市河北大街438号

    编:066004

    话:0335-8057068

    真:0335-8057068

    址:http://jwc.ysu.edu.cn

    -

    10

    -

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识