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
相關文章
- GPU:平行計算利器GPU
- 前端高效能運算之四:GPU加速計算前端GPU
- 為什麼你不能拿CPU速度來比較計算機的效能計算機
- 第二篇:從 GPU 的角度理解平行計算GPU
- GPU程式設計--CPU和GPU的設計區別GPU程式設計
- GPU加速DiffuseCubeMap經典計算(轉)GPU
- 一些開源的 GPU 加速和平行計算庫,涵蓋了不同的程式語言和用途:GPU
- 大規模文字相似度計算
- CSS動畫的效能分析和瀏覽器GPU加速CSS動畫瀏覽器GPU
- cuda程式設計與gpu平行計算(四):cuda程式設計模型程式設計GPU模型
- MRAM與常用計算機記憶體的效能比較計算機記憶體
- Go 與 C++ 的對比和比較GoC++
- 雲端計算規模大嗎?可靠嗎?
- 大文字平行計算實現方式
- eAccelerator的安裝和效能比較
- DECODE和CASE的效能比較
- GPU和CPU的區別GPU
- CPU和GPU的區別GPU
- Unity效能分析(二)CPU/GPU分析UnityGPU
- C++宏和函式的比較C++函式
- 平行計算π值
- Oracle平行計算Oracle
- 平行計算cuda
- HPC高效能運算知識: 異構平行計算
- 雲端計算與網格計算的深入比較
- [C++] 自定義C++比較器比較大小C++
- Vue中的計算屬性和偵聽器比較Vue
- 大規模C++程式設計 -- 基礎知識C++程式設計
- 北鯤雲超算平臺藉助GPU實現模擬加速GPU
- 大資料平行計算利器之MPI/OpenMP大資料
- 大規模MIMO通訊系統通道估計matlab效能模擬,對比LS,OMP,MOMP以及CoSaMPMatlab
- cuda程式設計與gpu平行計算(六):圖稀疏矩陣轉為CSR結構並傳入gpu程式設計GPU矩陣
- 請問,平行計算和資料庫資料庫
- MySQL 中的 distinct 和 group by 的效能比較MySql
- 大資料入門課程:Hadoop和spark的效能比較大資料HadoopSpark
- C++ 中三種正規表示式比較C++
- oracle中字串的大小比較,字串與數字的比較和運算Oracle字串
- 堆排序和快速排序效能比較排序