C++ AMP 加速大规模并行计算-GPU和CPU的性能比较
2013-09-21 23:30
1221 查看
比较一下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,双击程序运行。
代码如下:
测试结果:
运行环境:处理器:i5 450M 2.4GHz 显卡:HD5650 操作系统:Windows 7 64位 内存:8GB
http://www.amobbs.com/thread-5463289-1-1.html
比赛的方法是准备一个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
相关文章推荐
- 高性能计算汇总-Mpi,openMpi,tbb,CUDA,OpenCL等并行计算或cpu,gpu混合计算技术
- C++ AMP是微软提供的一套利用GPU并行计算的API。
- CPU与GPU性能的比较报告
- CUDA之大规模GPU并行系列教程(二)——大规模并行计算GPU与CUDA简介
- 高性能计算汇总-Mpi,openMpi,tbb,CUDA,OpenCL等并行计算或cpu,gpu混合计算技术
- 多核CPU加速并行计算的快捷开发和应用
- GPU与CPU性能比较
- C++ AMP中GPU并行计算
- 一个不错的关于CPU和GPU(CUDA)的性能比较讨论话题
- CUDA之大规模GPU并行系列教程(二)——大规模并行计算GPU与CUDA简介
- 遇见C++ AMP:在GPU上做并行计算
- mapreduce大规模计算实验结果和性能比较
- Python基于pyCUDA实现GPU加速并行计算功能入门教程
- C++AMP: 遇见C++ AMP:在GPU上做并行计算
- 【Python - GPU】基于Python的GPU加速并行计算 -- pyCUDA
- 浅说CPU并行计算与GPU并行计算
- matlab 查看电脑系统性能(CPU,GPU),并开启并行运算
- 遇见C++ AMP:在GPU上做并行计算
- 课程总结 -- CPU/GPU并行计算基础(CPU篇)
- ND4J求多元线性回归以及GPU和CPU计算性能对比