rapidmind.net提供了免费的计算库下载,目的是使用C++ metaprogramming将计算与硬件平台隔离开来,它提供一套运行库做底层的优化工作。为了测试其真正的性能,以便于在未来的渲染器中使用,我做了一个简单的性能测试程序,将一张1920x1080尺寸的TIF从RGB转换为CIE XYZ。
  测试平台为我的acer 5572ANWXCi笔记本,Core Duo T2250、945、1.5G DDR2、geforce 7300go 64bit 128M。

GPU CPU GPU* CPU*
Joky.tif 1.809444 28.306510 36.927075 12.229953
HDTV.tif 7.248393 179.199637 465.021794 173.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计算库性能测试相关推荐

  1. NumSharp v0.8.0 发布,C# 张量计算库

    开发四年只会写业务代码,分布式高并发都不会还做程序员? >>>   NumSharp(Numerical .NET)可以说是C#中的科学计算库. 它是用C#编写的,符合.netsta ...

  2. 【Python基础】科学计算库Scipy简易入门

    0.导语 Scipy是一个用于数学.科学.工程领域的常用软件包,可以处理插值.积分.优化.图像处理.常微分方程数值解的求解.信号处理等问题.它用于有效计算Numpy矩阵,使Numpy和Scipy协同工 ...

  3. numpy不用科学记数发 python_Python科学计算库Numpy常用的函数使用

    林小森博客: Python科学计算库Numpy常用的函数使用 - 林小森​www.linxiaosen.com Numpy具有强大的计算功能,本文介绍Numpy常用的函数,可以有效的提高工作效率. 首 ...

  4. NumSharp v0.6.1 科学计算库发布,支持标量和隐式转换

    NumSharp(Numerical .NET)可以说是C#中的科学计算库. 它是用C#编写的,符合.netstandard 2.0库标准. 它的目标是让.NET开发人员使用NumPy的语法编写机器学 ...

  5. NumSharp v0.6 科学计算库发布,新增 LAPACK 的线性库支持

    NumSharp(Numerical .NET)可以说是C#中的科学计算库. 它是用C#编写的,符合.netstandard 2.0库标准. 它的目标是让.NET开发人员使用NumPy的语法编写机器学 ...

  6. mtensor一个tensor计算库,支持cuda延迟计算

    1 mtensor mtensor是一个tensor计算库, 支持cuda的延迟计算, 项目地址为https://github.com/matazure/mtensor. 2 背景 延迟计算具有避免额 ...

  7. python科学计算库-数值计算库与科学计算库

    BLAS 接口 BLAS , LAPACK , ATLAS 这些数值计算库的名字很类似,他们之间有什么关系呢?BLAS是一组线性代数运算接口,目前是事实上的标准,很多数值计算/科学计算都实现了这套接口 ...

  8. Python 科学计算库 Numpy 准备放弃 Python 2 了

    Numpy 是 Python 的一个科学计算库,提供了矩阵运算的功能,一般与 Scipy.matplotlib 一起使用. 今天 Numpy 的 GitHub 主页上发文称,Numpy 库准备从 20 ...

  9. 实现100倍加速!谷歌开源超强张量计算库TensorNetwork

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 量子系统复杂,暴力计算无效,原有张量网络(Tensor Network)难以广泛规模使用,让开发高温超导体等复杂问题受限于此. 现在,谷歌 ...

最新文章

  1. 中国第一家交货的自动驾驶独角兽:完全自主泊车,千元级硬件成本
  2. ubuntu 配置apt代理源
  3. vs2005中关于masterpage,Theme,skin的一点总结
  4. RabbitMQ研究与应用
  5. 淘宝爆出的异常...
  6. Kubernetes共享使用Ceph存储
  7. tailwind css_什么是Tailwind CSS,如何将其添加到我的网站或React App中?
  8. 计算机编程关键字一,和计算机编程有关的101条伟大的名言
  9. sql基础语法(增、删、改、查)
  10. vim命令下显示行号
  11. 不用下载Axure RP Extension for Chrome插件,即可看原型文件
  12. git 恢复被删除的文件
  13. SPSS——统计描述
  14. lucas定理 与 扩展lucas定理(HDU 3037 以及 2015 ICL, Finals, Div. 1 J.Ceizenpok’s formula)
  15. ECCV 2020 五项大奖出炉!普林斯顿邓嘉获最佳论文奖
  16. Java基于SpringBoot的牛客网社区项目实现详解(上)
  17. 百度文库上传总是被私有,如何正确上传百度文库
  18. 移卡参投的乐享互动首日破发:旗下乐刷罚单不断,逾期率高居不下
  19. 2022杭电多校八 1011-Stormwind(贪心)
  20. MongoDB配置副本集(含Arbiter)

热门文章

  1. ConcurrentHashMap 解读
  2. 13点建议顺利通过JAVA面试【转载】
  3. Linux 技巧: Bash 测试和比较函数
  4. [MSDN]ASP.NET MVC2(5)MVCRoute和urls
  5. php中时间轴开发,即显示为“刚刚”、“5分钟前”、“昨天10:23”等
  6. 指针08 - 零基础入门学习C语言48
  7. As3.0与java数据类型的比较总结
  8. Firefox 66 将阻止自动播放音频和视频
  9. 微信小程序教程02:App(Object)和Page(Object) 构造器介绍
  10. 第七章:XAML vs. code(3)