C++ AMP 加速大規模平行計算-GPU和CPU的效能比較

Augusdi發表於2013-09-21

        比較一下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

相關文章