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程式設計--CPU和GPU的設計區別GPU程式設計
- 一些開源的 GPU 加速和平行計算庫,涵蓋了不同的程式語言和用途:GPU
- MRAM與常用計算機記憶體的效能比較計算機記憶體
- Go 與 C++ 的對比和比較GoC++
- cuda程式設計與gpu平行計算(四):cuda程式設計模型程式設計GPU模型
- [930]python平行計算框架pathos模組Python框架
- 大文字平行計算實現方式
- 大規模文字相似度計算
- C++宏和函式的比較C++函式
- CSS動畫的效能分析和瀏覽器GPU加速CSS動畫瀏覽器GPU
- HPC高效能運算知識: 異構平行計算
- 平行計算π值
- Unity效能分析(二)CPU/GPU分析UnityGPU
- 大資料入門課程:Hadoop和spark的效能比較大資料HadoopSpark
- [C++] 自定義C++比較器比較大小C++
- 效能比較
- Vue中的計算屬性和偵聽器比較Vue
- MySQL 中的 distinct 和 group by 的效能比較MySql
- 好程式設計師分享大資料入門教程:Hadoop和spark的效能比較程式設計師大資料HadoopSpark
- cuda程式設計與gpu平行計算(六):圖稀疏矩陣轉為CSR結構並傳入gpu程式設計GPU矩陣
- springboot~CompletableFuture平行計算Spring Boot
- 堆排序和快速排序效能比較排序
- Python、JavaScript和Rust的Web效能比較 - AlexPythonJavaScriptRustWeb
- 雲端計算規模大嗎?可靠嗎?
- c++ map和unordered_map比較C++
- Concurrent iHawk — 實時平行計算機模擬系統計算機
- 字符集和比較規則
- 好程式設計師技術解析Hadoop和spark的效能比較程式設計師HadoopSpark
- 請比較下for、forEach、for of的效能的效能
- 一文讀懂資料中心計算市場CPU、DPU和GPU的區別GPU
- TensorFlow——tensorflow指定CPU與GPU運算GPU
- 大規模C++程式設計 -- 基礎知識C++程式設計
- PostgreSQLGPU加速(HeteroDBpg_strom)(GPU計算,GPU-DIO-NvmeSSD,列存,GPU記憶體快取)SQLGPU記憶體快取
- 大規模MIMO通訊系統通道估計matlab效能模擬,對比LS,OMP,MOMP以及CoSaMPMatlab
- Stream.toList()和Collectors.toList()的效能比較
- gpu是什麼 gpu和cpu的區別介紹GPU
- 北鯤雲超算平臺藉助GPU實現模擬加速GPU
- [譯] 原生 iOS(Swift) 和 React-Native 的效能比較iOSSwiftReact
- C與C++在函式和資料的比較C++函式