C++ AMP 加速大规模并行计算-GPU和CPU的性能比较

        比较一下CPU和GPU的通用计算能力,我的显卡是AMD的,没法使用CUDA……前段时间尝鲜Win8,顺便就下载了一个Visual Studio 11 Beta,发现里面有一个C++ AMP,拿来比较一下。根据目前的资料,只要显卡支持DirectX 11就可以使用 C++ AMP,就是将代码编译成x86和HLSL
       比赛的方法是准备一个10000个32位浮点数,对每个浮点数做100000次“X = (X + 0.1) / 2.3”的迭代。考虑到现在的处理器都是多核的,在CPU计算部分使用OpenMP将循环展开、代码做速度优化。
       为避免Visual Studio对测试造成干扰,测试时关闭VS,双击程序运行。
代码如下:

#include 
#include 
#include 

#define COUNT 10000

float nickName_GPU[COUNT];
float nickName_CPU[COUNT];

int main(void)
{
        LARGE_INTEGER freq;
        LARGE_INTEGER strt;
        LARGE_INTEGER ed;
        QueryPerformanceFrequency(&freq);
        QueryPerformanceCounter(&strt);

        concurrency::array_view myView(COUNT, nickName_GPU); //将数据打入显存
         concurrency::parallel_for_each(myView.extent, [=] (concurrency::index<1> idx) restrict(amp)
        {
                for(int i = 0; i < 100000; i++)
                {
                        myView[idx] = (myView[idx] + 0.1f) / 2.3f;
                }
        });

        myView.synchronize();//显式等待GPU计算完成并将数据打回内存

         QueryPerformanceCounter(&ed);
        printf("GPU耗时: %d 毫秒\r\n", (ed.QuadPart - strt.QuadPart) * 1000 / freq.QuadPart);
        QueryPerformanceCounter(&strt);

#pragma omp parallel
        for(int idx = 0; idx < COUNT; idx++)
        {
                for(int i = 0; i < 100000; i++)
                {
                        nickName_CPU[idx] = (nickName_CPU[idx] + 0.1f) / 2.3f;
                }
        }
        QueryPerformanceCounter(&ed);
        printf("CPU耗时: %d 毫秒\r\n", (ed.QuadPart - strt.QuadPart) * 1000 / freq.QuadPart);
        for(int idx = 0; idx < COUNT; idx++)
        {
                if(nickName_CPU[idx] != nickName_GPU[idx])
                {
                        puts("CPU和GPU的计算结果不相符!");
                        getchar();
                        return 0;
                }
        }
        puts("测试结束");
        getchar();
        return 0;
}


测试结果:
C++ AMP 加速大规模并行计算-GPU和CPU的性能比较_第1张图片
运行环境:处理器:i5 450M 2.4GHz 显卡:HD5650 操作系统:Windows 7 64位 内存:8GB

http://www.amobbs.com/thread-5463289-1-1.html

你可能感兴趣的:(C++,AMP)