CUDA編譯器nvcc的用法用例與問題簡答

2021-07-09 02:51:37 字數 2119 閱讀 4792

書寫makefile時,使用-fopenmp命令選項時會報nvcc fatal : unknown option 『fopenmp』錯誤。正確的編譯選項是:

-xcompiler

-fopenmp

在核心中呼叫原子函式(例如atomicadd)時,如果編譯的時候出現」error: identifier 「atomicadd」 is undefined」;

那麼首先要確定的gpu顯示卡計算能力是否在1.1或者1.1以上,原子性操作在低端的計算能力 gpu 是不支援的,1.1 以上的計算能力才支援全域性記憶體的原子操作,1.2 以上的計算能力才支援共享記憶體的原子操作。

使用原子操作的話在編譯的時候需要指明gpu的計算能力,新增如下nvcc的編譯選項:

-gencode=arch=compute_35,code=\"sm_35,compute_35\"
使用nvcc -wall時會提示nvcc fatal : unknown option 『wall』的錯誤。原來nvcc預設開啟所有警告,如果想禁止警告,使用-w編譯選項。

具體使用nvcc --help檢視幫助。

# check for 32-bit vs 64-bit

proc_type = $(strip $(shell uname -m | grep 64))

ifeq ($(

proc_type),)

flags+= -m32

else

flags+= -m64

endif

#cuda install path

cuda_install_path ?= /usr/local/cuda-5.5

#environment variable vpath

vpath=./include

#gpu architecture

gencode_sm35 := -gencode=arch=compute_35,code=\"sm_35,compute_35\"

cxx=nvcc

cxxflags=-g -xcompiler -fopenmp -ddebug

cxxflags+=$(

flags) $(

gencode_sm35)

#source files

cxxfiles = $(wildcard src/*.cpp)

cufiles =$(wildcard src/*.cu)

#header files

includes= -iinclude -i

$/include

#static lib

libdir=./lib

libs=$(

libdir)/libxmlextern.a

#preprocess

objdir=./obj

notdir_cxxfiles=$(notdir $)

notdir_cufiles=$(notdir $)

objs=$(addprefix ./obj/,$(patsubst %.cpp,%.o,$))

objs+=$(addprefix ./obj/,$(patsubst %.cu,%.o,$))

#compile

dicualg.out:

$ $(

make) -c ./src/xmlparser

$(cxx) -xcompiler -fopenmp -o $@

$^$(

libs)

$/%.o :src/%.cpp

$(cxx) $ $ -c $< -o $@

$/%.o :src/%.cu

$(cxx) $ $ -c $< -o $@

$/md5.o $/common.o:macro.h

$/gpu_decomposer3.o:cnre.h gpu_define3.h global.h

.phony:clean

clean:

rm obj/* ./dicualg.out

[1]nvcc命令編譯選項.

[2]

CUDA中NVCC的編譯器選項

cuda bin path nvcc.exe ccbin vcinstalldir bin c d debug dwin32 d console d mbcs xcompiler ehsc,w3,nologo,wp64,od,zi,rtc1,mtd i cuda inc path i.i.commo...

CUDA學習(一) NVCC的編譯過程

nvcc的編譯過程總體可以用乙個圖進行描述 nvcc的編譯過程分為離線編譯和即時編譯兩部分組成 離線編譯 綠色虛線框內 cuda源程式 即 cu檔案 在編譯前的預處理會被分為主機端 和裝置段 即圖中的左右分支 1.如圖右分支 在裝置端 會被編譯成ptx檔案 可以看作是用於裝置端的彙編檔案 或是直接可...

BCC編譯器幹嘛用的?

最近碰到奇葩的編譯器了,bcc gcc m32 fno stack protector dbios build date date m d y e p rombios.c rombios c bcc o rombios.s c c d i86 0 s rombios c make bcc 命令未找到...