编译CUDA by example中的Julia Set 分形

来源:互联网 发布:服务器端编程python 编辑:程序博客网 时间:2024/04/28 00:07

1. 首先,编译环境说明:

Centos5.6 X86_64 (64位)

gcc 4.1.2

cuda 4.0


2. 进入路径,编译

[jliu@localhost chapter04]$ cd /media/disk/cuda_me/CUDA by example/chapter04
[jliu@localhost chapter04]$ nvcc julia_gpu.cu
在包含自 ../common/cpu_bitmap.h:20 的文件中,
从 julia_gpu.cu:18:
../common/gl_helper.h:44:21: 错误:GL/glut.h:没有那个文件或目录
[jliu@localhost chapter04]$


3. 查看../common/gl_helper.h:44../common/gl_helper.h:44

     glut.h和glext.h在../common目录下,但glx.h是在标准库/usr/include/GL下(可用locate命令查找一下),可见头文件中的GL不是同一个。所以,将#include <GL/glut.h>和#include <GL/glext.h>更改为#include “GL/glut.h”和#include “GL/glext.h”即可。


4. 再次编译

    错误提示:

    julia_gpu.cu(42): error: calling a host function("cuComplex::cuComplex") from a __device__/__global__ function("julia") is not allowed

    据说这个错误官网上有说明(个人还未验证),结构体cuComplex构造函数前需要添加限定符__device__。如下图所示:



5. 再次编译,如下图:

提示错误:

    undefined reference to ‘glutInit’

    undefined reference to 'glutInitWindowSize'

    ........

6. 编译时添加flags增加glut库:

       nvcc julia_gpu.cu -lglut。

  若提示/usr/bin/ld:cannot find -lglut先检查LD_LIBRARY_PATH,加入/usr/lib64和/usr/lib,编译还是没用,则查找下glut:locate glut。

 

  注意:这里的gult库不是CUDA by example中的,而是系统自带的glut库,所以编译添加这个库目录依旧没有用。

  -lglut是为了找到系统库检索路径下的libglut.so文件,通常,libglut.so安装在/usr/lib64 (64-bit) 或 /usr/lib(32-bit)下,显然我的没有。

  所以,安装glut库: yum install glut

  再 updatedb。

  再次查找glut: locate glut,结果如下图:


  再次编译,还是一样的错误:/usr/bin/ld:cannot find -lglut

[jliu@localhost ~]$ ls -l /usr/lib64/ | grep glut
lrwxrwxrwx   1 root root       16 08-15 21:50 libglut.so.3 -> libglut.so.3.8.0
-rwxr-xr-x   1 root root   212740 2007-03-17 libglut.so.3.8.0
[jliu@localhost ~]$ 

  可以看出,/usr/lib和/usr/lib64目录下还是没有libglut.so文件,而libglut.so是指向libglut.so.3的,所以可以添加软链接:

  [root@localhost lib64]# ln -s libglut.so.3 libglut.so

  再次查看:

  [jliu@localhost ~]$ ls -l /usr/lib64/ | grep glut
  lrwxrwxrwx  1 root root       12 08-16 08:21 libglut.so -> libglut.so.3
  lrwxrwxrwx  1 root root       16 08-15 21:50 libglut.so.3 -> libglut.so.3.8.0
  -rwxr-xr-x  1 root root   276472 2007-03-17 libglut.so.3.8.0
  [jliu@localhost ~]$ 


7. 再次编译:nvcc julia_gpu.cu -lglut,成功!

   运行脚本:./a.out,结果如下图:



还有注意的是,有时候需要添加-lGL库,即:nvcc julia_gpu.cu -lglut -lGL