zoukankan      html  css  js  c++  java
  • 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];
                }
         }
    
    计算时间在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倍的效率提升。
  • 相关阅读:
    JS异错面试题
    CSG
    OBS工具汇总
    SFS OBS
    zookeeper配置文件
    zookeeper概念
    centos yum源问题三板斧
    nexus仓库
    SVN备份恢复
    ubuntu
  • 原文地址:https://www.cnblogs.com/profession/p/13695609.html
Copyright © 2011-2022 走看看