我想使用CUDA和C ++自动编译玩具库。然后我按如下方式编写Makefile
tokenUnikWeight = sortHashMap();
for (String key5 : tokenUnikWeight.keySet()) {
System.out.printf("%s - %d - %d - %f\n", key5, tokenUnikTF.get(key5), tokenUnikDF.get(key5), tokenUnikWeight.get(key5));
}
键入CC=g++
NVCC=nvcc
CXXFLAGS= -fopenmp -O3 -Wextra -std=c++11
CUDAFLAGS= -std=c++11 -c -arch=sm_20
LIBS= -lopenblas -lpthread -lcudart -lcublas
LIBDIRS=-L/usr/local/cuda-7.5/lib64
INCDIRS=-I/usr/local/cuda-7.5/include
matrix_cuda.o: marix_cuda.cu
$(NVCC) $(CUDAFLAGS) matrix_cuda.cu
all: matrix_cuda.o
$(CC) -o test matrix_blas.cpp alg.cpp test.cpp matrix_cuda.o $(LIBDIRS) $(INCDIRS) $(LIBS) $(CXXFLAGS)
clean:
rm -rf test *.o
我
make
我以前从未写过Makefile。我哪里出错了?
答案 0 :(得分:3)
我认为您的CUDA文件名中有拼写错误
matrix_cuda.o: marix_cuda.cu
$(NVCC) $(CUDAFLAGS) matrix_cuda.cu
恕我直言,它应该是
matrix_cuda.o: matrix_cuda.cu
$(NVCC) $(CUDAFLAGS) matrix_cuda.cu
答案 1 :(得分:1)
这可能需要几次迭代。
1)首先尝试这个:
nvcc -std=c++11 -c -arch=sm_20 matrix_cuda.cu
如果有效(并产生matrix_cuda.o
,我推测),删除matrix_cuda.o
和
2)试试这个makefile:
matrix_cuda.o: matrix_cuda.cu
nvcc -std=c++11 -c -arch=sm_20 matrix_cuda.cu
如果有效,
3)试试这个:
g++ -o test matrix_blas.cpp alg.cpp test.cpp matrix_cuda.o -L/usr/local/cuda-7.5/lib64 -I/usr/local/cuda-7.5/include -lopenblas -lpthread -lcudart -lcublas -fopenmp -O3 -Wextra -std=c++11
如果有效,请删除test
和
4)试试这个makefile:
test: matrix_cuda.o
g++ -o test matrix_blas.cpp alg.cpp test.cpp matrix_cuda.o -L/usr/local/cuda-7.5/lib64 -I/usr/local/cuda-7.5/include -lopenblas -lpthread -lcudart -lcublas -fopenmp -O3 -Wextra -std=c++11
matrix_cuda.o: matrix_cuda.cu
nvcc -std=c++11 -c -arch=sm_20 matrix_cuda.cu
如果可行,请删除test
和matrix_cuda.o
以及
5)再次尝试makefile。
如果有效,我们可以进一步改进。
答案 2 :(得分:0)
此外,您的第一个制作规则对应于编译目标文件matrix_cuda.o
。由于make文件中的第一个规则是在调用命令all
时首先更新的规则,因此make
make规则应该首先出现。 GNU Make有很好的文档说明如何制作简单到复杂的makefile。你可以在这里查看:
https://www.gnu.org/software/make/manual/make.html
您要遇到的另一个问题是,在all
规则的make recipe中,您应该只将目标文件链接在一起以创建最终的可执行文件。但是,您尝试在此链接步骤中包含matrix_blas.cpp alg.cpp test.cpp
。它们不是.cpp
版本的这些文件,而是.o
版本(编译对象)。 Make
可以为您生成这些目标文件。你只需要为每个人制定一个制定规则和配方。例如:
matrix_blas.o: matrix_blas.cpp
$(CC) $(CXXFLAGS) -c matrix_blas.cpp -o matrix_blas.o