首页 > 编程语言 > 详细

VC++ 并行库效率测试

时间:2020-09-19 13:12:52      阅读:48      评论:0      收藏:0      [点我收藏+]
定义测试的数据大小 
    #define DATASIZE 100000000
    float * fArr = new float[DATASIZE];
    for (int i = 0; i < DATASIZE; i++)
    {
        fArr[i] = i;
    }
1、    for代码(常规写法)
        for (int i = 0; i < DATASIZE; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                fArr[i] = fArr[i] * fArr[i];
            }
     }
技术分享图片
计算时间在5S左右。

2、    用AMP 方式的GPU 技术
#include <amp.h>
using namespace concurrency;
void Square_array(float* arr, int n)
{
    array_view<float, 1> dataView(n, &arr[0]);
    parallel_for_each(dataView.extent, [=](index<1> idx) restrict(amp)
    {
        dataView[idx] = dataView[idx] * dataView[idx];
    });
    // Copy data from GPU to CPU
    dataView.synchronize();
}

for (int j = 0; j < 10; j++)
{
     Square_array(fArr, DATASIZE);
}
技术分享图片
计算时间在4S左右。

3、    用OpenMP 并行技术
启用OpenMP功能
 技术分享图片
     #include<omp.h>
     #pragma omp parallel for
        for (int i = 0; i < DATASIZE; i++)
        {
            for (int j = 0; j < 10; j++)
            {
                fArr[i] = fArr[i] * fArr[i];
            }
     }  
技术分享图片 计算时间在800—1800ms 左右


经测试,OPENMP 会带来3-7倍的效率提升。

 

VC++ 并行库效率测试

原文:https://www.cnblogs.com/profession/p/13695609.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!