VC++ 并行库效率测试

定义测试的数据大小 
    #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];
            }
     }
VC++ 并行库效率测试
计算时间在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);
}
VC++ 并行库效率测试
计算时间在4S左右。

3、    用OpenMP 并行技术
启用OpenMP功能
 VC++ 并行库效率测试
     #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];
            }
     }  
VC++ 并行库效率测试 计算时间在800—1800ms 左右


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

 

上一篇:C#结构体大小问题


下一篇:C++ 模仿vector的一些功能实现