日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Rapidmind计算库性能测试

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Rapidmind计算库性能测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?  rapidmind.net提供了免費的計算庫下載,目的是使用C++ metaprogramming將計算與硬件平臺隔離開來,它提供一套運行庫做底層的優化工作。為了測試其真正的性能,以便于在未來的渲染器中使用,我做了一個簡單的性能測試程序,將一張1920x1080尺寸的TIF從RGB轉換為CIE XYZ。
  測試平臺為我的acer 5572ANWXCi筆記本,Core Duo T2250、945、1.5G DDR2、geforce 7300go 64bit 128M。

GPUCPUGPU*CPU*
Joky.tif1.80944428.30651036.92707512.229953
HDTV.tif7.248393179.199637465.021794173.764878

單位為毫秒millisecond,加“*”表示回讀GPU數據到內存。Joky.tif大小為300x400,120000 pixels。HDTV.tif大小為1920x1080,2073600 pixels。

  測試結果表明,如果不回讀,那么可以放心大膽的使用GPU計算。但是如果回讀,那么速度將急劇下降。總線是一個原因,但估計更深層次的是GPU的工作機制以及設計。但是可以肯定的是,如果使用RM開發基于多核心的CPU比如CELL BE處理器的計算程序,那么帶來的好處是及其明顯的,避免了硬件編碼優化工作,節省了人力物力,最重要的是可以獲得相當不錯的性能。
  測試代碼如下,其中CPU部分沒有優化,但是打開了VC71的SSE2開關。
#include?<TCHAR.h>

#include?
<cstdio>
#include?
<rapidmind/platform.hpp>
#include?
<cximage/ximage.h>
#pragma?comment(lib,
"rmplatform-vc7-md.lib")
#pragma?comment(lib,
"cximagecrt.lib")

using?namespace?rapidmind;

int?main()
{
????
float?Time;
????CxImage?Image(
"C:\\HDTV.tif",CXIMAGE_FORMAT_TIF);
????
long?size?=?Image.GetWidth()*Image.GetHeight()*sizeof(BYTE)*4;
????BYTE
*?DataPtr?=?NULL;
????
if(?!Image.Encode2RGBA(DataPtr,size)?)
????????printf(
"Shit!\n");

????rapidmind::init();

/**//*
const?mat3?RGBtoCIEmat?=?mat3(0.412453,?0.212671,?0.019334,
??????????????????????????????0.357580,?0.715160,?0.119193,
??????????????????????????????0.180423,?0.072169,?0.950227);

*/

????Value3f?C0(
0.412453f,0.357580f,0.180423f);
????Value3f?C1(
0.212671f,0.715160f,0.072169f);
????Value3f?C2(
0.019334f,0.119193f,0.950227f);

????Program?Prog?
=?RM_BEGIN_PROGRAM("stream"){
????????In
<Value4ub>?rgb;
????????Out
<Value4ub>?cie;
????????cie(
0)?=?dot(rgb(0,1,2),C0);
????????cie(
1)?=?dot(rgb(0,1,2),C1);
????????cie(
2)?=?dot(rgb(0,1,2),C2);
????????cie(
3)?=?255;
????}
RM_END
????Array
<1,Value4ub>?Input(Image.GetWidth()*Image.GetHeight());
????DataPtr?
=?Input.write_data();
????Array
<1,Value4ub>?Output;

????rapidmind::compile(Output,Prog(Input));
????Output?
=?Prog(Input);

????DataPtr[
0]?=?255;
????rapidmind::Timer?Start?
=?rapidmind::Timer::now();
????Output?
=?Prog(Input);
????rapidmind::finish();
?????
????
//const?BYTE*?RMResultPtr?=?Output.read_data();

????rapidmind::Timer?End?
=?rapidmind::Timer::now();
????rapidmind::finish();
????Time?
=?End.milliseconds()?-?Start.milliseconds();
????printf(
"Use?RM?:?%f?milliseconds\n",Time);

????
int?Width?=?Image.GetWidth(),Height?=?Image.GetHeight();

????Start?
=?rapidmind::Timer::now();
????
for(int?i=0;i<Width*Height;i++){
????????
float?r?=?DataPtr[i*4+0],g=DataPtr[i*4+1],b=DataPtr[i*4+2];
????????
float?x?=?r*0.412453f?+?g*0.357580f?+?b*0.180423f;
????????
float?y?=?r*0.212671f?+?g*0.715160f?+?b*0.072169f;
????????
float?z?=?r*0.019334f?+?g*0.119193f?+?b*0.950227f;
????????DataPtr[i
*4+0]?=?x;
????????DataPtr[i
*4+1]?=?y;
????????DataPtr[i
*4+2]?=?z;
????????DataPtr[i
*4+2]?=?255;
????}

????End?
=?rapidmind::Timer::now();
????Time?
=?End.milliseconds()?-?Start.milliseconds();
????printf(
"Use?CPU:?%f?milliseconds\n",Time);


????system(
"PAUSE");
????
return?0;
}

轉載于:https://www.cnblogs.com/Jedimaster/archive/2007/10/02/912882.html

總結

以上是生活随笔為你收集整理的Rapidmind计算库性能测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。