利用GPU实现通用计算

        这几天正在研究神经网络,但是背无比缓慢的计算速度折磨的痛苦不堪,但是口袋空空不能换机器,所以想到不玩游戏的时候显卡正闲的没事干,所以折磨完CPU后转而折磨GPU起来。
        GPU计算当然不能凭空做起,否则要非常了解那些DirectX或者OpenGL的指令,然后自己把数据搞成图像让GPU来渲染,那个实在是太困难了。现在已经有了一个GPU的编译器,可以把专门为GPU计算而设计的一种变异的C/C++编译成传统的C/C++,然后再用普通的编译器编译成机器代码。
        下面就来详细讲解如何得到GPU编译器。
        这个编译器是叫BrookGPU,是 Stanford University Graphics Lab开发的,现在只是0.4版。
        下面是主页http://graphics.stanford.edu/projects/brookgpu/

      Setp 0http://sourceforge.net/projects/brook下载BrookGPU源码,里面也有英文的Quick Start,不过没有我这么详细。

    Step 1 http://www.cygwin.com/下载Cygwin
        1.1 默认安装Setup,在选择服务器的时候随便选,不管不同的服务器速度略有差别,有些甚至打不开,要碰运气了。
        1.2 添加下面的包,尽量选择一样的版本,不过Interpreters / Perl没有5.8.5-3,我随便选了一个也没出问题,不过我建议选择高版本的那个。
                Devel / Make                (3.80-1)
               
Devel / Bison                (20030307-1)
               
Devel / Flex                  (2.5.4a-3)
                Interpreters / Perl          (5.8.5-3)

    Setp 2 安装Microsoft Visual C++编译器。
    相信大家大都安装了Visual Studio.Net 2003Visual Studio.Net 2002也可以,不过后面的路径设置略有不同。好像Visual Studio 6.0也可以,不过没有试过。
        安装了Visual Studio.Net 2003/2002的朋友可以跳过Setp 2了。
        如果你什么也没有,你就只好下载免费的Visual C++ Toolkit 2003
        http://msdn.microsoft.com/visualc/vctoolkit2003/
        然后还需要安装Microsoft Windows latform SDKXP2003都能装。
        http://www.microsoft.com/msdownload/platformsdk/sdkupdate/

        Step 3 安装DirectX 9 SDK,最近的版本是2005 August
        http://msdn.microsoft.com/directx/sdk/

        Step4 安装Nvdia CGC编译器
        http://developer.nvidia.com/object/cg_toolkit.html

        Step 5 设置系统环境变量
        右击“我的电脑”à“属性”à“高级”à“环境变量”。
        如果你安装了VS.net 2003,安照下面的提示添加环境变量,注意下面的路径都是默认的安装路径,请根据个人的设置进行改动。
            INCLUDE
                  C:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/include
                  C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/include
                  C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include
            LIB
                  C:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1/Lib/
                  C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/lib
                  C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Lib
            PATH
                  C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin
                  C:/Program Files/Microsoft Visual Studio .NET 2003/Common7/IDE
        如果你安装了Visual Studio Toolkit,安照下面的提示添加环境变量,注意下面的路径都是默认的安装路径,请根据个人的设置进行改动。
            INCLUDE
        
         C:/Program Files/Microsoft Platform SDK for Windows XP SP2/Include
        
         C:/Program Files/Microsoft Visual C++ Toolkit 2003/include
            LIB
        
         C:/Program Files/Microsoft Platform SDK for Windows XP SP2/Lib  
        
         C:/Program Files/Microsoft Visual C++ Toolkit 2003/lib
            PATH
        
         C:/Program Files/Microsoft Visual C++ Toolkit 2003/bin
        无论你安装了哪个编译器,都要再添加下面的环境变量,注意根据个人的设置进行改动。
            INCLUDE
        
         C:/Program Files/Microsoft DirectX 9.0 SDK (August 2005)/Include
            LIB
        
         C:/Program Files/Microsoft DirectX 9.0 SDK (August 2005)/Lib/x86
            PATH
         
         C:/Program Files/NVIDIA Corporation/Cg/bin
        
         C:/cygwin/bin
                  C:/Program Files/Microsoft DirectX 9.0 SDK (August 2005)/Utilities/Bin//x86

        Setp 6 下载最新的AtiNvdia的显卡驱动

        Setp 7 生成Brook
        进入命令行,进入你解压缩Brook的目录,执行“make”,然后就会自动生成BRCC编译器,Brook运行环境和所有的Brook的例子。
       
输入“make brcc”只生成Brook编译器。
       
输入“make runtime”只生成运行环境。
       
现在所有的Brook应用程序都在bin目录下。

        Step 8 运行GPU程序
        你需要在环境变量中添加BRT_RUNTIME = cpu或者BRT_RUNTIME = oglBRT_RUNTIME = dx9

        Step 9
编译GPU程序
       
brook/prog/tests/sum为例。
       
仍然在命令行中,在brook/bin目录下,运行“brcc ../ /prog/tests/sum/sum.br”,就会在同一目录下生成传统C/C++源代码“sum.cpp”,当然几乎看不懂。
       
方法1 仍然在命令行中,在brook目录下,运行“make”,就会自动生成sum的可执行文件。
       
方法2 运行VS.net 2003,新建C++命令行工程,把“sum.cpp”中的内容复制粘贴进来。
       
brook/bin目录下brook.lib复制到工程目录下。
       
VS.net菜单中,“项目”à“属性”àC/C++à“常规”中,添加附加包含目录“d:/brook/include(请根据个人设置进行相应的改变)
       
VS.net菜单中,“项目”à“属性”à“链接器”à“输入”中,添加附加依赖项“brook.lib opengl32.lib d3d9.lib d3dx9.lib”。
       
编译,运行。

        BrookGPU的效率仍然不令人满意,在我的Raedon9550上不敌P4 1.5G,而且慢了2个数量级,也许只有最新的6或者7系列的Nvida或者R5xx的Ati显卡才能够有令人满意的速度,不过一切都是从零开始的。我们期待BrookGPU有更新的版本推出,提高运行效率。

        BrookGPU语言的语法请参考:
        http://www.bios.net.cn/Article/wzpd/DNJS/Linuxkf/0551118520791145.htm

你可能感兴趣的:(利用GPU实现通用计算)