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 <iostream>
#include <amp.h>
#include <WinBase.h>

#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<float> 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;
}


测试结果:

运行环境:处理器:i5 450M 2.4GHz 显卡:HD5650 操作系统:Windows 7 64位 内存:8GB

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值