From 83b7b89e7fcf17b3665edd79336f05debd83832d Mon Sep 17 00:00:00 2001 From: lucasdelimanogueira Date: Mon, 29 Apr 2024 12:35:57 -0300 Subject: [PATCH] makefile cuda --- build/Makefile | 62 ++++++++++-------------- build/cuda.cu.o | Bin 0 -> 9464 bytes build/libtensor.so | Bin 20992 -> 27776 bytes build/tensor.o | Bin 0 -> 16496 bytes csrc/cuda.cu | 12 +++-- csrc/cuda.h | 2 +- csrc/tensor.cpp | 18 ++++--- csrc/tensor.o | Bin 16280 -> 0 bytes norch/__pycache__/tensor.cpython-38.pyc | Bin 6388 -> 6405 bytes norch/tensor.py | 2 +- 10 files changed, 45 insertions(+), 51 deletions(-) create mode 100644 build/cuda.cu.o create mode 100644 build/tensor.o delete mode 100644 csrc/tensor.o diff --git a/build/Makefile b/build/Makefile index 84b977e..9d38c99 100644 --- a/build/Makefile +++ b/build/Makefile @@ -1,50 +1,38 @@ # Compiler -CXX := g++ -NVCC := $(shell command -v nvcc 2>/dev/null) +CC = g++ +NVCC = nvcc # Compiler flags -CXXFLAGS := -Wall -Werror -fpic -NVCCFLAGS := -Xcompiler -fPIC +CFLAGS = -Wall -Wextra -std=c++11 +NVCCFLAGS = -std=c++11 -# CUDA flags -CUDAFLAGS := -arch=sm_75 +# Directories +SRCDIR = ../csrc +BUILDDIR = ../build +TARGET = ../build/libtensor.so -# Source files -SRCS := ../csrc/tensor.cpp -CU_SRCS := $(wildcard ../csrc/*.cu) +# Files +SRCS = $(wildcard $(SRCDIR)/*.cpp) +CU_SRCS = $(wildcard $(SRCDIR)/*.cu) +OBJS = $(patsubst $(SRCDIR)/%.cpp, $(BUILDDIR)/%.o, $(SRCS)) +CU_OBJS = $(patsubst $(SRCDIR)/%.cu, $(BUILDDIR)/%.cu.o, $(CU_SRCS)) -# Object files -OBJS := $(SRCS:.cpp=.o) +# CUDA flags and libraries +CUDAFLAGS = -arch=sm_75 +CUDALIBS = -lcudart -# CUDA object files (only if nvcc is available) -ifeq ($(NVCC),) -CU_OBJS := -else -CU_OBJS := $(CU_SRCS:%.cu=%.cu.o) -endif - -# Target shared object file -TARGET := libtensor.so - -# Default target -all: $(TARGET) - -# Rule to build the shared object file +# Rule to build the target $(TARGET): $(OBJS) $(CU_OBJS) - $(CXX) -shared -o $@ $^ + $(NVCC) --shared -o $(TARGET) $(OBJS) $(CU_OBJS) $(CUDALIBS) -# Rule to compile each source file into an object file -%.o: %.cpp - $(CXX) $(CXXFLAGS) -c $< -o $@ +# Rule to compile C++ source files +$(BUILDDIR)/%.o: $(SRCDIR)/%.cpp + $(CC) $(CFLAGS) -fPIC -c $< -o $@ -# Rule to compile each CUDA source file into an object file (only if nvcc is available) -%.cu.o: %.cu -ifneq ($(NVCC),) - $(NVCC) $(NVCCFLAGS) $(CUDAFLAGS) -c $< -o $@ -else - @echo "No CUDA compiler found, skipping CUDA compilation of $<" -endif +# Rule to compile CUDA source files +$(BUILDDIR)/%.cu.o: $(SRCDIR)/%.cu + $(NVCC) $(NVCCFLAGS) $(CUDAFLAGS) -Xcompiler -fPIC -c $< -o $@ # Clean rule clean: - $(RM) $(OBJS) $(CU_OBJS) $(TARGET) + rm -f $(BUILDDIR)/*.o $(TARGET) diff --git a/build/cuda.cu.o b/build/cuda.cu.o new file mode 100644 index 0000000000000000000000000000000000000000..63691b1dc1d348085053119d96a2e57d83cc172f GIT binary patch literal 9464 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 N`B_$h^M#hv{y(TBxxN4Z literal 0 HcmV?d00001 diff --git a/build/libtensor.so b/build/libtensor.so index 5f6e5169b6e614c725b77aa1eeab1376b9a4c0a6..80dc3bc60cfa0c890da8f7febd8165635c3fbebf 100755 GIT binary patch literal 27776 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 SN+thHli;B9YGW`Z*?$6224K_x literal 20992 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 ZO&;N_muYEjTZsR*m5O4Dhrv@7{{vuk?|T3M diff --git a/build/tensor.o b/build/tensor.o new file mode 100644 index 0000000000000000000000000000000000000000..377f3e86741c61ddbc0d9a1671950bca0beac2a4 GIT binary patch literal 16496 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, "cpu") == 0)) { float* data_tmp; @@ -84,6 +85,7 @@ extern "C" { free(tensor_data); tensor->data = data_tmp; + tensor->device = device; } else if ((strcmp(device, "cpu") == 0) && (strcmp(tensor->device, "cuda") == 0)) { @@ -93,7 +95,10 @@ extern "C" { cudaFree(tensor->data); tensor->data = data_tmp; + tensor->device = device; } + #else + printf("Warning: CUDA is not available. Cannot perform GPU operations.\n"); #endif } @@ -107,7 +112,7 @@ extern "C" { } if (strcmp(tensor1->device, tensor2->device) != 0) { - fprintf(stderr, "Tensors must be on the same device\n"); + fprintf(stderr, "Tensors must be on the same device: %s and %s\n", tensor1->device, tensor2->device); exit(1); } @@ -165,7 +170,7 @@ extern "C" { shape[i] = tensor1->shape[i]; } - #ifdef __NVCC__ + #ifdef __CUDACC__ if (strcmp(tensor1->device, "cuda") != 0) { float* result_data; @@ -289,7 +294,7 @@ extern "C" { } if (strcmp(tensor1->device, tensor2->device) != 0) { - fprintf(stderr, "Tensors must be on the same device\n"); + fprintf(stderr, "Tensors must be on the same device: %s and %s\n", tensor1->device, tensor2->device); exit(1); } @@ -369,7 +374,7 @@ extern "C" { } if (strcmp(tensor1->device, tensor2->device) != 0) { - fprintf(stderr, "Tensors must be on the same device\n"); + fprintf(stderr, "Tensors must be on the same device: %s and %s\n", tensor1->device, tensor2->device); exit(1); } @@ -496,5 +501,4 @@ extern "C" { stride *= new_shape[i]; } } -} - +} \ No newline at end of file diff --git a/csrc/tensor.o b/csrc/tensor.o deleted file mode 100644 index 633f43700598943b3d59e13f6f996e080c86251e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16280 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 diff --git a/norch/__pycache__/tensor.cpython-38.pyc b/norch/__pycache__/tensor.cpython-38.pyc index 4fbabb12a1e58ad12776b2e1fb56b83fad903db1..20683050c21c440d262e5de6367fa86e3b7aa075 100644 GIT binary patch delta 90 zcmexj*lNTZ%FD~e00b`k^wZW)&w8~3ah=eWg^T$+-o$u~Ju!ilxW9B9Vm)e^2OYK%Ng05LBXjQ{`u delta 72 zcmZoQ`eMi%%FD~e00jE8_0yJ2