[原创] 在ubuntu用cuda运行folding@home

Wine、Cedega、CrossOver 等配置
回复
fn_dolphin
帖子: 260
注册时间: 2007-04-24 14:23

[原创] 在ubuntu用cuda运行folding@home

#1

帖子 fn_dolphin » 2009-06-29 15:14

文章欢迎转载,转载请注明出处:嘉骏苑 http://luckiss.blogcn.com

今天终于成功在ubuntu9.04下用cuda运行folding@home了,少说废话,以下是详细安装过程,部分安装过程对于已经接触过 ubuntu的朋友已经比较熟悉,可以直接跳过阅读重要的部分,另外要注意的是只有nvidia gf8400 并且显存是256mb以上的显卡才能运行cuda。

1. 安装跟配置ubuntu

我用的是ubuntu9.04 64位desktop版本, 关于ubuntu的安装跟配置方法,请参考《ubuntu8.04速成手册》,里面有详细说明,这里不再一一叙述。需要注意的是我们使用的是64位系统,它是能兼容32位程序,但需要在系统终端里面执行以下命令来安装相应的32位库文件:
sudo apt-get install ia32-libs ia32-libs-gtk linux32 lib32asound2
这些问题在《ubuntu8.04速成手册》里面都有详细说明,ubuntu新手建议先按着手册上的内容从头到尾做一遍,就能很快掌握并熟悉ubuntu系统环境。
9.04光盘可到 http://www.ubuntu.com下载

2. 安装最新的 wine版本
首先加入最新wine的源地址,目前wine的最新版本是 1.1.24
在终端输入:sudo gedit /etc/apt/sources.list
在文件的最后加入:
deb http://wine.budgetdedicated.com/apt jaunty main
保存退出
然后执行以下命令:
sudo apt-get update
sudo apt-get install wine
这样就安装了wine,配置wine,则在终端运行 winecfg命令,更详细的wine配置问题,请参考ubuntu中文官网论坛相关文章:http://forum.ubuntu.org.cn /viewtopic.php?f=121&t=174310

3. 安装nvidia显卡驱程 (关键步骤)
首先说明一下,我一共测试了180.51,180.60,185.18.04,185.18.14 四个版本的驱程,只有前两个180版本搭配任何版本的cudatoolkit都能运行成功,但185版本驱程均告测试失败。所以我以180.60版本来进行说明:
首先到nvidia网站下载显卡驱程:ftp://download.nvidia.com/XFree86/Linux-x86_64/ ,这里进入180.60目录,里面有3个驱程文件,只有第三个 pkg2的驱程才是支持cuda的驱动文件,所以我们下载:ftp://download.nvidia.com/XFree86/Linux- x86_64/180.60/NVIDIA-Linux-x86_64-180.60-pkg2.run
然后备份xorg.conf文件,以防驱程安装失败后的恢复(严格遵询此安装过程,出错几率很低)
sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bak
然后修改 /etc/default/linux-restricted-modules-common文件
sudo gedit /etc/default/linux-restricted-modules-common
将最后那行 DISABLED_MODULES="" 改为:DISABLED_MODULES="nv nvidia_new"也就是在双引号里面加入nv nvidia_new 子句,保存退出。
然后就需要安装编译环境
sudo apt-get install linux-headers-$(uname -r)$ build-essential
OK,基本工作做好后,戏玉开始了:
首先我们按 ctrl+alt+F1退出X,输入用户名跟密码后,进入超级终端:
然后我们需要停止X服务:
sudo /etc/init.d/gdm stop
如果运行这个命令后听到显卡风扇声音加大,代表X服务已经停止了,如果没什么动静,可能需要重启系统,再重新进入超级终端再运行这个命令
关闭X服务,我们就要彻底卸载系统原有的nvidia驱动程序跟内核模块,依顺序执行以下几个命令:
sudo apt-get --prege remove nvidia-glx-*
sudo apt-get autoremove
sudo rmmod nvidia
然后进入目录:
cd /lib/modules/2.6.28-13-generic/kernel/drivers/video ,这里要注意的是2.6.28-13-generic是我的linux系统内核,你用的系统内核版本可能不一样,请用命令 “uname -r” 来查看自己的内核版本,再进入相应的版本目录,进入video目录后,把相关的nvidia文件删除
sudo rm nv*
到这里,旧有的nvidia驱程就算彻底删除完毕了,接下来我们就安装新驱程,先进入你下载新驱程的目录下,执行以下命令安装驱程:
sudo sh ./NVIDIA-Linux-x86_64-180.60-pkg2.run
安装的过程中除了在询问 是否要联网下载内核那一步选择 NO以外,其余步骤一直选择yes或accept就可以顺利安装,驱程安装完毕后,需要重启系统:
sudo reboot
一切顺利的话,重启系统后就会进入X,判断新驱程是否安装成功有以下三个原则:
1. 能进入 X
2. 能启动3D桌面
3. 打开 “系统--首选项--Nvidia X server Settings”看看驱程版本是否你新安装的版本:

图片
看,新显卡驱动安装成功了!

4. 安装cuda toolkit (关键步骤)
在这里需要说明,我在测试过程用不同版本的显卡驱程搭配不同版本的cuda toolkit,185系列均告失败,而 180.51跟180.60驱程搭配 2.0, 2.1 2.2的cuda toolkit均成功运行,并且关键的是必须使用32位的cudatoolkit ,如果使用64位的cudatoolkit,在后面的配置时会报某些文件找不到的错误。
首先我们到nvidia的官网下载cuda toolkit:
http://www.nvidia.cn/object/cuda_get_cn.html
这里我选择了32位2.2版本的 cuda toolkit, 最新的版本不一定是最好最稳定的,我建议你熟悉以后可以自己多尝试不同版本的运行效果会否更好些,里面说是for ubuntu8.10的,这个并不重要,我们就下载cudatoolkit_2.2_linux_32_ubuntu8.10.run
安装toolkit :
sudo sh ./cudatoolkit_2.2_linux_32_ubuntu8.10.run
把它安装到默认目录,默认安装路径是 /usr/local/cuda ,以后想删除的话,只要把这个cuda目录直接删除就可以了
安装完后需要把cuda的路径添加到系统环境变量中,依次在终端执行以下命令:
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH
sudo sh -c "echo '/usr/local/cuda/lib' > /etc/ld.so.conf.d/cuda.conf"
sudo ldconfig
修改完毕后,可以重启一下系统让新的系统环境生效 ,到这里cuda toolkit就算安装完成

5. 下载,安装,配置 cuda wrapper (关键步骤)
首先我们下载cuda wrapper:
http://www.gpu2.twomurs.com/wrapper2ndg ... art.dll.so
如果下载不了,那是因为天朝起了长城阻碍我们访问外国网站,在这里我们先严重鄙视一下天朝,大家自己找代理服务器去下载这个文件吧,下载之后把它放到以下wine目录:
/home/用户名/.wine/drive_c/windows/system32目录下,注意wine目录是隐藏目录,前面有一个.代表隐藏,然后把文件的名称改为 cudart.dll
然后在终端输入以下命令建一个链接:
ln -s ~/.wine/drive_c/windows/system32/cudart.dll ~/.wine/drive_c/windows/system32/nvcuda.dll
然后我们进入以下目录:
/usr/local/lib/,在这里我们新建一个wine目录
sudo mkdir wine
然后把cudart.dll.so复制到这里,然后再复制多一次cudart.dll.so,并改名为nvcuda.dll.so
OK,我们来检验一下以上的配置是否已经成功了,执行命令:
ldd /usr/local/lib/wine/cudart.dll.so
应该会看到显示类似如下的提示:
linux-gate.so.1 => (0xf7f43000)
libcudart.so.2 => /usr/local/cuda/lib/libcudart.so.2 (0xf7ee6000)
libwine.so.1 => /usr/lib32/libwine.so.1 (0xf7d87000)
libm.so.6 => /lib32/libm.so.6 (0xf7d61000)
libc.so.6 => /lib32/libc.so.6 (0xf7bfe000)
libdl.so.2 => /lib32/libdl.so.2 (0xf7bfa000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7be1000)
librt.so.1 => /lib32/librt.so.1 (0xf7bd8000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf7ae9000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7ad9000)
/lib/ld-linux.so.2 (0xf7f44000)
这里细心观察有没有提示哪个文件是 not found的,例如像报称libcudart.so.2 => not found,这个可能是你装了64位版本的cuda toolkit造成的,只要装32位版本就能解决。
如果没有报文件 not found,那就代表wrapper安装并且配置成功!

6. 安装虚拟cuda设备 (关键步骤)
首先我们先编写一个代码文件,文件名称就cudainit,文件代码如下:
#!/bin/bash

PATH=$PATH:/usr/local/cuda/bin

modprobe nvidia

if [ "$?" -eq 0 ]; then

# Count the number of NVIDIA controllers found.
N3D=`/usr/bin/lspci | grep -i NVIDIA | grep "3D controller" | wc -l`
NVGA=`/usr/bin/lspci | grep -i NVIDIA | grep "VGA compatible controller" | wc -l`

N=`expr $N3D + $NVGA - 1`
for i in `seq 0 $N`; do
mknod -m 666 /dev/nvidia$i c 195 $i;
done

mknod -m 666 /dev/nvidiactl c 195 255

else
exit 1
fi
保存后,然后依顺序执行以下命令:
chmod u+x cudainit
sudo ./cudainit
这样就会在 /dev目录下生成两个名称为nvidia0和nvidiactl的虚拟设备文件

7. 下载 FAH cuda并运行!
紧张的时刻到了,我们先下载支持cuda的FAH客户端:
http://www.stanford.edu/group/pandegrou ... XP-623.zip
解压后,进入该目录,执行以下命令:
nice wine Folding@home-Win32-GPU.exe -verbosity 9 -forcegpu nvidia_g80
程序会问你在FAH注册的用户名跟团队号码(例如可以填FAH中国团队号码 3213),然后其余的都可以用默认选项,如果你以上的配置都正确无误的话,你就会看到FAH cuda运行成功了!恭喜你!

图片



关于安装外的一些题外话:
1. 关于 fahmon linux版本的安装
fahmon 是一个检测fah客户端运行情况的软件,有兴趣的可以到fahmon.net去下载最新版本的源代码,然后自己编译安装,安装过程若出现库文件找不到的情况,可以到新立德搜索相关关键字,下载其dev版本,编译安装完毕后,若提示找不到文件libwxcurl.so.1,则需要在终端运行一次命令:
sudo ldconfig
一般就能解决。

2. wine需要再安装nvidia的windows驱程跟directx吗?
均不需要安装windows驱程跟directx,一切均使用原生的linux驱程

3. 如何让fah 在进入系统时自动运行
首先建立启动文件,执行以下程序:
sudo gedit /etc/init.d/fahautorun
在里面添加以下内容:
#!/bin/bash

pushd /home/用户名/Folding@home-Win32-GPU_XP-623/
su 用户名 -c "nice wine Folding@home-Win32-GPU.exe -verbosity 9 -forcegpu nvidia_g80"
popd
保存,退出。这里说明的是第三行是你的FAH目录路径。
然后修改文件属性为可执行:
sudo chmod +x /etc/init.d/fahautorun
执行以下命令,建立链接到启动目录(注意大小写):
sudo ln -s /etc/init.d/fahautorun /etc/rc2.d/S99fahautorun
这样每次进入系统都会自动运行fah

4. 如何终止程序的运行
如果在X下只要打开“系统--系统管理--系统监视器”,在里面查看 Fahcore_11.exe 跟Folding@home-Win32-Gpu.exe两个进程,然后关闭这两个进程就行
如果在终端下就要用 ps -auxw命令查看这两个进程的PID号码 ,然后用kill把相应PID进程杀掉。

5. 关于ubuntu下fah cuda 跟xp下 fah cuda的性能对比
这个理论上可能是xp下的效率会略高一点,毕竟在ubuntu下是经过wine层跟cuda wrapper,但性能相差的并不明显,因为使用的是64位系统,而且也是原生的64位显卡驱程,有兴趣的朋友可以对比一下,但对于我这个已经习惯用 ubuntu的人来说,这些性能上的微小差距意义并不大。同时也希望FAH能早日推出64位linux系统支持cuda的客户端,这样性能应该会有更明显的提高。
回复