CUDAテストの続き
前回に続き、CUDAを試してみる。動作環境は以前のエントリを参照。
Makefile
CUDAのツールキット類をインストールすると下記のフォルダにサンプルコードが多数入るのだが、全てのプロジェクトで共通の長いmakefileを使っており、これは少々扱いにくい。
/Developer/GPU_Computing/C/src
そんなわけで簡単なmakefileを用意した。
BIN := cuda002 # flags CUDA_INSTALL_PATH := /usr/local/cuda CUDA_SDK_PATH := /Developer/GPU_Computing/C INCLUDES := -I$(CUDA_SDK_PATH)/common/inc LIBS := -L$(CUDA_SDK_PATH)/lib -L$(CUDA_INSTALL_PATH)/lib -lcutil -lcudart -lstdc++ CFLAGS := -O3 LDFLAGS := # compilers NVCC := $(CUDA_INSTALL_PATH)/bin/nvcc CC := gcc LINKER := gcc # files C_SOURCES := $(wildcard *.c) CU_SOURCES := $(wildcard *.cu) HEADERS := $(wildcard *.h) C_OBJS := $(patsubst %.c, %.o, $(C_SOURCES)) CU_OBJS := $(patsubst %.cu, %.o, $(CU_SOURCES)) $(BIN): clean $(C_OBJS) $(CU_OBJS) $(HEADERS) $(LINKER) -o $(BIN) $(CU_OBJS) $(C_OBJS) $(LDFLAGS) $(INCLUDES) $(LIBS) $(C_OBJS): $(C_SOURCES) $(HEADERS) $(CC) -c $(C_SOURCES) $(CFLAGS) $(INCLUDES) $(CU_OBJS): $(CU_SOURCES) $(HEADERS) $(NVCC) -c $(CU_SOURCES) $(INCLUDES) run: $(BIN) LD_LIBRARY_PATH=$(CUDA_INSTALL_PATH)/lib ./$(BIN) clean: rm -f $(BIN) *.o
ビルド・実行
ビルドして実行する。
$ make run rm -f cuda002 *.o /usr/local/cuda/bin/nvcc -c cuda002.cu -I/Developer/GPU_Computing/C/common/inc gcc -o cuda002 cuda002.o -I/Developer/GPU_Computing/C/common/inc -L/Developer/GPU_Computing/C/lib -L/usr/local/cuda/lib -lcutil -lcudart -lstdc++ LD_LIBRARY_PATH=/usr/local/cuda/lib ./cuda002 Using device 0: GeForce 9400M Input, Output 0.000000, 0.000000 1.000000, 2.000000 2.000000, 4.000000 3.000000, 6.000000 (中略) 99.000000, 198.000000 Processing time: 32.800999 (ms) Press ENTER to exit...
単なる計算処理だけど、CPUではなくGPU上で行われている。