スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

NVIDIA GPU Computing SDK をUbuntu上でmake

NVIDIA GPU Computing SDKにはCUDA、OpenCLの有用なサンプルが数多く収録されているが、数年にわたって集積されてきたものであり、おそらく特定の個人なりチームなりがサンプル全体の単一のソースツリーとしての整合性を管理しているとは考えにくい。実際にUbuntu上でmakeして実行してみようと思うと、けっこうちょこちょこと引っかかって面倒である。

そこでとりあえずやっつけで作成したパッチファイルを公開しておく。これは自分の環境(Ubuntu 11.04、x86_64、CUDA toolkit 4.1)上で作成したものであり、他の環境のことは考えていない。ディレクトリツリー内の複数のMakefileや*.mkに対する修正をまとめたものである。私が試した時点では、SDKのソースはgcc 4.6にまだ対応していなかったので、gcc-4.5をインストールする必要があった。Makefileを修正して内部で明示的にgcc-4.5を呼び出すようにしているので、/usr/bin/gcc及び/usr/bin/g++については4.6へのリンクになったままでかまわない。

なお、すでにちょっとあやふやだが、OpenGLがらみでfreeGLUTのインストールが必要だったかもしれない。

このパッチファイルを例えばNVIDIA_GPU_Computing_SDK.patchというファイル名で、例えば~/tmpにセーブしたら、SDKのソースディレクトリがデォルトの~/NVIDIA_GPU_Computing_SDKに展開されているとすると、

The following is my ghetto patch to build NVIDIA GPU Computing SDK on Ubuntu 11.04 x86_64 /w CUDA toolkit 4.1. To apply the patch, assuming you have expanded the source tree for SDK in the default location (~/NVIDA_GPU_Computing_SDK), and assuming you have saved the patch file as ~/tmp/NVIDIA_GPU_Computing_SDK.patch,


cd ~/NVIDIA_GPU_Computing_SDK
patch -p1 < ~/tmp/NVIDIA_GPU_Computing_SDK.patch

make

でmakeできる…はずである。
should run the make process successfully. Note that you will need to install gcc-4.5 and g++-4.5, (the SDK cannot be compiled with gcc 4.6 yet) and you might also need to install freeglut to satisfy missing dependencies.

dropbox上のファイルへのリンク(patch file uploaded on dropbox)

--- NVIDIA_GPU_Computing_SDK.orig/CUDALibraries/common/UtilNPP/defines.mk 2012-04-18 00:21:32.930567264 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/CUDALibraries/common/UtilNPP/defines.mk 2012-04-17 21:08:03.346846496 +0900
@@ -77,9 +77,9 @@

# Compilers
NVCC := $(CUDA_INSTALL_PATH)/bin/nvcc
-CXX := g++
-CC := gcc
-LINK := g++ -fPIC
+CXX := g++-4.5
+CC := gcc-4.5
+LINK := g++-4.5 -fPIC

# Includes
INCLUDES += -I. -I$(CUDA_INSTALL_PATH)/include -I$(ROOTDIR)/inc -I$(NPP_INCLUDE_PATH) -I../FreeImage/include
--- NVIDIA_GPU_Computing_SDK.orig/CUDALibraries/common/common_npplib.mk 2012-04-18 00:21:32.930567264 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/CUDALibraries/common/common_npplib.mk 2012-04-17 21:44:46.784988125 +0900
@@ -97,7 +97,7 @@
FREEIMAGELIBARCH := _$(OS_VERSION)
endif

-CXX := g++ -fPIC $(CXX_ARCH_FLAGS)
+CXX := g++-4.5 -fPIC $(CXX_ARCH_FLAGS)
INC := -I. -I../../common/UtilNPP/ -I../../common/FreeImage/include -I../../../shared/inc -I$(CUDA_INSTALL_PATH)/include/

LIB := -L$(SDK_INSTALL_PATH)/common/lib -L$(CUDA_INSTALL_PATH)/lib$(CUDALIBARCH) -lnpp -lcudart
--- NVIDIA_GPU_Computing_SDK.orig/CUDALibraries/common/common_cudalib.mk 2012-04-18 00:21:32.930567264 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/CUDALibraries/common/common_cudalib.mk 2012-04-18 00:14:42.742748366 +0900
@@ -59,9 +59,9 @@

# Compilers
NVCC := $(CUDA_INSTALL_PATH)/bin/nvcc
-CXX := g++ -fPIC
-CC := gcc -fPIC
-LINK := g++ -fPIC
+CXX := g++-4.5 -fPIC
+CC := gcc-4.5 -fPIC
+LINK := g++-4.5 -fPIC

# Includes
INCLUDES += -I. -I$(CUDA_INSTALL_PATH)/include -I$(COMMONDIR)/inc -I$(SHAREDDIR)/inc
@@ -92,7 +92,7 @@
# architecture flag for nvcc and gcc compilers build
CUBIN_ARCH_FLAG :=
CXX_ARCH_FLAGS :=
-NVCCFLAGS :=
+NVCCFLAGS := --compiler-bindir /usr/bin/gcc-4.5
LIB_ARCH := $(OSARCH)

# Determining the necessary Cross-Compilation Flags
@@ -361,7 +361,7 @@
LINKLINE = ar rucv $(TARGET) $(OBJS)
else
ifneq ($(OMIT_CUTIL_LIB),1)
- LIB += -lcutil_$(LIB_ARCH)$(LIBSUFFIX) -lshrutil_$(LIB_ARCH)$(LIBSUFFIX)
+ LIB += -lcutil_$(LIB_ARCH)$(LIBSUFFIX) -lshrutil_$(LIB_ARCH)$(LIBSUFFIX) -lGLU
endif
# Device emulation configuration
ifeq ($(emu), 1)
--- NVIDIA_GPU_Computing_SDK.orig/CUDALibraries/src/freeImageInteropNPP/Makefile 2012-04-18 00:21:32.738569221 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/CUDALibraries/src/freeImageInteropNPP/Makefile 2012-04-17 21:49:51.197941765 +0900
@@ -38,7 +38,7 @@
# Targets
################################################################################
all:
- $(CXX) $(INC) $(LIB) -o freeImageInteropNPP freeImageInteropNPP.cpp -lUtilNPP_$(LIB_ARCH) -lfreeimage$(FREEIMAGELIBARCH)
+ $(CXX) $(INC) $(LIB) -o freeImageInteropNPP freeImageInteropNPP.cpp -lUtilNPP_$(LIB_ARCH) -lfreeimage$(FREEIMAGELIBARCH) -lcudart -lnpp
mkdir -p ../../bin
mkdir -p ../../bin/$(OSLOWER)
mkdir -p ../../bin/$(OSLOWER)/release
--- NVIDIA_GPU_Computing_SDK.orig/CUDALibraries/src/histEqualizationNPP/Makefile 2012-04-18 00:21:32.742569180 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/CUDALibraries/src/histEqualizationNPP/Makefile 2012-04-17 23:45:16.860705236 +0900
@@ -38,7 +38,7 @@
# Targets
################################################################################
all:
- $(CXX) $(INC) $(LIB) -o histEqualizationNPP histEqualizationNPP.cpp -lUtilNPP_$(LIB_ARCH) -lfreeimage$(FREEIMAGELIBARCH)
+ $(CXX) $(INC) $(LIB) -o histEqualizationNPP histEqualizationNPP.cpp -lUtilNPP_$(LIB_ARCH) -lfreeimage$(FREEIMAGELIBARCH) -lnpp -lcudart
mkdir -p ../../bin
mkdir -p ../../bin/$(OSLOWER)
mkdir -p ../../bin/$(OSLOWER)/release
--- NVIDIA_GPU_Computing_SDK.orig/CUDALibraries/src/imageSegmentationNPP/Makefile 2012-04-18 00:21:32.754569058 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/CUDALibraries/src/imageSegmentationNPP/Makefile 2012-04-17 23:46:00.448265302 +0900
@@ -38,7 +38,7 @@
# Targets
################################################################################
all:
- $(CXX) $(INC) $(LIB) -o imageSegmentationNPP imageSegmentationNPP.cpp -lUtilNPP_$(LIB_ARCH) -lfreeimage$(FREEIMAGELIBARCH)
+ $(CXX) $(INC) $(LIB) -o imageSegmentationNPP imageSegmentationNPP.cpp -lUtilNPP_$(LIB_ARCH) -lfreeimage$(FREEIMAGELIBARCH) -lnpp -lcudart
mkdir -p ../../bin
mkdir -p ../../bin/$(OSLOWER)
mkdir -p ../../bin/$(OSLOWER)/release
--- NVIDIA_GPU_Computing_SDK.orig/CUDALibraries/src/boxFilterNPP/Makefile 2012-04-18 00:21:32.754569058 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/CUDALibraries/src/boxFilterNPP/Makefile 2012-04-17 23:46:38.983876376 +0900
@@ -38,7 +38,7 @@
# Targets
################################################################################
all:
- $(CXX) $(INC) $(LIB) -o boxFilterNPP boxFilterNPP.cpp -lUtilNPP_$(LIB_ARCH) -lfreeimage$(FREEIMAGELIBARCH)
+ $(CXX) $(INC) $(LIB) -o boxFilterNPP boxFilterNPP.cpp -lUtilNPP_$(LIB_ARCH) -lfreeimage$(FREEIMAGELIBARCH) -lnpp -lcudart
mkdir -p ../../bin
mkdir -p ../../bin/$(OSLOWER)/
mkdir -p ../../bin/$(OSLOWER)/debug
--- NVIDIA_GPU_Computing_SDK.orig/C/common/common.mk 2012-04-18 00:21:32.930567264 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/C/common/common.mk 2012-04-18 00:08:20.406648885 +0900
@@ -57,9 +57,9 @@

# Compilers
NVCC := $(CUDA_INSTALL_PATH)/bin/nvcc
-CXX := g++ -fPIC
-CC := gcc -fPIC
-LINK := g++ -fPIC
+CXX := g++-4.5 -fPIC
+CC := gcc-4.5 -fPIC
+LINK := g++-4.5 -fPIC

# Includes
INCLUDES += -I. -I$(CUDA_INSTALL_PATH)/include -I$(COMMONDIR)/inc -I$(SHAREDDIR)/inc
@@ -90,7 +90,7 @@
# architecture flag for nvcc and gcc compilers build
CUBIN_ARCH_FLAG :=
CXX_ARCH_FLAGS :=
-NVCCFLAGS :=
+NVCCFLAGS := --compiler-bindir /usr/bin/gcc-4.5
LIB_ARCH := $(OSARCH)

# Determining the necessary Cross-Compilation Flags
@@ -185,7 +185,8 @@
OPENGLLIB += -lGL -lGLU $(COMMONDIR)/lib/$(OSLOWER)/libGLEW.a
else
# this case for linux platforms
- OPENGLLIB := -lGL -lGLU -lX11 -lXi -lXmu
+ OPENGLLIB := -lGL -lGLU
+ LDLIBS += -lGLU -lX11 -lXi -lXmu
# check if x86_64 flag has been set, otherwise, check HP_64 is i386/x86_64
ifeq ($(x86_64),1)
OPENGLLIB += -lGLEW_x86_64 -L/usr/X11R6/lib64
@@ -194,7 +195,7 @@
ifeq "$(strip $(HP_64))" ""
OPENGLLIB += -lGLEW -L/usr/X11R6/lib
else
- OPENGLLIB += -lGLEW_x86_64 -L/usr/X11R6/lib64
+ OPENGLLIB += -lGLEW_x86_64 -L/usr/lib -L/usr/X11R6/lib64
endif
endif
endif
@@ -221,7 +222,7 @@
OPENGLLIB += -lglut -L/usr/lib64
endif
ifeq ($(i386),1)
- OPENGLLIB += -lglut -L/usr/lib
+ OPENGLLIB += L/usr/lib -lglut -lGLU
endif

ifeq ($(x86_64),)
@@ -237,7 +238,7 @@
endif

ifeq ($(USERENDERCHECKGL),1)
- RENDERCHECKGLLIB := -lrendercheckgl_$(LIB_ARCH)$(LIBSUFFIX)
+ RENDERCHECKGLLIB := -lrendercheckgl_$(LIB_ARCH)$(LIBSUFFIX) -lGLU
endif

ifeq ($(USENVCUVID), 1)
@@ -271,7 +272,7 @@
else
# static linking, we will statically link against CUDA and CUDART
ifeq ($(USEDRVAPI),1)
- LIB += -lcuda ${OPENGLLIB} $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB}
+ LIB += -L/usr/lib/nvidia-current -lcuda $(PARAMGLLIB) $(RENDERCHECKGLLIB) ${LIB} ${OPENGLLIB}
else
ifeq ($(emu),1)
LIB += -lcudartemu
--- NVIDIA_GPU_Computing_SDK.orig/OpenCL/common/common_opencl.mk 2012-04-18 00:21:32.930567264 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/OpenCL/common/common_opencl.mk 2012-04-18 00:01:29.462845185 +0900
@@ -55,9 +55,9 @@
INCDIR ?= .

# Compilers
-CXX := g++
-CC := gcc
-LINK := g++ -fPIC
+CXX := g++-4.5
+CC := gcc-4.5
+LINK := g++-4.5 -fPIC

# Includes
INCLUDES += -I$(INCDIR) -I$(OCLCOMMONDIR)/inc -I$(SHAREDDIR)/inc
@@ -195,7 +195,7 @@
LIB += -framework OpenCL -framework OpenGL ${OPENGLLIB} -framework AppKit ${ATF} ${LIB}
else
LIB := ${USRLIBDIR} -L${OCLLIBDIR} -L$(LIBDIR) -L$(SHAREDDIR)/lib/$(OSLOWER)
- LIB += -lOpenCL ${OPENGLLIB} ${LIB}
+ LIB += -L/usr/lib -lOpenCL ${OPENGLLIB} ${LIB}
endif


--- NVIDIA_GPU_Computing_SDK.orig/shared/common.mk 2012-04-18 00:21:32.926567304 +0900
+++ NVIDIA_GPU_Computing_SDK.patched/shared/common.mk 2012-04-17 21:08:03.770842318 +0900
@@ -57,9 +57,9 @@

# Compilers
NVCC := $(CUDA_INSTALL_PATH)/bin/nvcc
-CXX := g++
-CC := gcc
-LINK := g++ -fPIC
+CXX := g++-4.5
+CC := gcc-4.5
+LINK := g++-4.5 -fPIC

# Includes
INCLUDES += -I. -I$(CUDA_INSTALL_PATH)/include -I$(COMMONDIR)/inc -I$(SHAREDDIR)/inc
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

GM3D

Author:GM3D
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。