mirror of
https://github.com/pfloos/quack
synced 2025-01-03 01:56:09 +01:00
dRPA-CUDA: saving
This commit is contained in:
parent
cff0232eb5
commit
3009ffe8f7
@ -1,63 +1,45 @@
|
|||||||
NVCC = nvcc
|
NVCC = nvcc
|
||||||
NFLAGS = -O2 --compiler-options '-fPIC'
|
NVFLAGS = -O2 --compiler-options '-O2 -Wall'
|
||||||
NDFLAGS = --shared
|
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CFLAGS = -fPIC -O2 -Wall -g
|
CFLAGS = -O2 -Wall -g
|
||||||
|
|
||||||
FC = gfortran
|
FC = gfortran
|
||||||
FFLAGS = -O2 -Wall -g
|
FFLAGS = -O2 -Wall -g
|
||||||
|
|
||||||
SRC_DIR = src
|
SRC_DIR = src
|
||||||
INC_DIR = include
|
INC_DIR = include
|
||||||
|
|
||||||
BIN_DIR = bin
|
|
||||||
BLD_DIR = build
|
BLD_DIR = build
|
||||||
$(shell mkdir -p $(BIN_DIR))
|
|
||||||
$(shell mkdir -p $(BLD_DIR))
|
$(shell mkdir -p $(BLD_DIR))
|
||||||
|
|
||||||
CU_SRC = $(wildcard $(SRC_DIR)/*.cu)
|
CU_SRC = $(wildcard $(SRC_DIR)/*.cu)
|
||||||
CU_OBJ = $(CU_SRC:$(SRC_DIR)/%.cu=$(BLD_DIR)/%.o)
|
CU_OBJ = $(CU_SRC:$(SRC_DIR)/%.cu=$(BLD_DIR)/%.o)
|
||||||
|
|
||||||
C_SRC = $(SRC_DIR)/ph_drpa.c
|
C_SRC = $(wildcard $(SRC_DIR)/*.c)
|
||||||
C_OBJ = $(BLD_DIR)/ph_drpa.o
|
C_OBJ = $(CU_SRC:$(SRC_DIR)/%.c=$(BLD_DIR)/%.o)
|
||||||
|
|
||||||
F_SRC = $(SRC_DIR)/cu_quack_module.f90
|
F_SRC = $(SRC_DIR)/cu_quack_module.f90
|
||||||
F_OBJ = $(BLD_DIR)/cu_quack_module.f90
|
F_OBJ = $(BLD_DIR)/cu_quack_module.o
|
||||||
|
|
||||||
MAIN_SRC = $(SRC_DIR)/cu_quack.f90
|
|
||||||
MAIN_OBJ = $(BLD_DIR)/cu_quack.o
|
|
||||||
|
|
||||||
OUTPUT_LIB = $(BLD_DIR)/libcuquack.so
|
|
||||||
|
|
||||||
CUDA_LIBS = -lcudart -lcublas
|
|
||||||
|
|
||||||
|
OUTPUT_LIB = $(BLD_DIR)/cuda.a
|
||||||
|
|
||||||
all: $(OUTPUT_LIB)
|
all: $(OUTPUT_LIB)
|
||||||
|
|
||||||
$(OUTPUT_LIB): $(CU_OBJ) $(C_OBJ)
|
$(OUTPUT_LIB): $(CU_OBJ) $(C_OBJ) $(F_OBJ)
|
||||||
$(NVCC) $(NFLAGS) $(NLDFLAGS) $^ -o $@ $(CUDA_LIBS) -I$(INC_DIR)
|
ar rcs $(OUTPUT_LIB) $(CU_OBJ) $(C_OBJ) $(F_OBJ)
|
||||||
|
|
||||||
$(BLD_DIR)/%.o: $(SRC_DIR)/%.cu
|
$(CU_OBJ): $(CU_SRC)
|
||||||
$(NVCC) $(NFLAGS) -c $< -o $@ -I$(INC_DIR)
|
$(NVCC) $(NVFLAGS) -c -o $@ $< -I$(INC_DIR)
|
||||||
|
|
||||||
$(C_OBJ): $(C_SRC)
|
$(C_OBJ): $(C_SRC)
|
||||||
@for src in $(C_SRC); do \
|
$(CC) $(CFLAGS) -c -o $@ $< -I$(INC_DIR)
|
||||||
obj=$(BLD_DIR)/$$(basename $${src} .c).o; \
|
|
||||||
echo "$(CC) $(CFLAGS) -c $$src -o $$obj -I$(INC_DIR)"; \
|
|
||||||
$(CC) $(CFLAGS) -c $$src -o $$obj -I$(INC_DIR); \
|
|
||||||
done
|
|
||||||
|
|
||||||
$(F_OBJ): $(F_SRC)
|
$(F_OBJ): $(F_SRC)
|
||||||
$(FC) $(FFLAGS) -c $< -o $@ -J$(BLD_DIR)
|
$(FC) $(FFLAGS) -c -o $@ $< -J$(BLD_DIR)
|
||||||
|
|
||||||
$(MAIN_OBJ): $(MAIN_SRC)
|
|
||||||
$(FC) $(FFLAGS) -c $< -o $@ -J$(BLD_DIR)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
rm -f $(BLD_DIR)/*.o $(BLD_DIR)/*.so $(BLD_DIR)/*.mod $(BIN_DIR)/*
|
rm -f $(BLD_DIR)/*
|
||||||
|
|
||||||
|
|
||||||
|
26
src/cuda/src/cu_quack_module.f90
Normal file
26
src/cuda/src/cu_quack_module.f90
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
module cu_quack_module
|
||||||
|
|
||||||
|
use, intrinsic :: iso_c_binding
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
! ---
|
||||||
|
|
||||||
|
subroutine ph_drpa(nO, nBas, eps, ERI) bind(C, name = "cutc_int")
|
||||||
|
|
||||||
|
import c_int, c_double
|
||||||
|
integer(c_int), intent(in), value :: nO, nBas
|
||||||
|
real(c_double), intent(in) :: eps(nBas)
|
||||||
|
real(c_double), intent(in) :: ERI(nBas,nBas,nBas,nBas)
|
||||||
|
|
||||||
|
end subroutine ph_drpa
|
||||||
|
|
||||||
|
! ---
|
||||||
|
|
||||||
|
end interface
|
||||||
|
|
||||||
|
end module cu_quack_module
|
||||||
|
|
||||||
|
|
@ -9,8 +9,6 @@
|
|||||||
|
|
||||||
int ph_drpa(int nO, int nBas, double *h_eps, double *h_ERI) {
|
int ph_drpa(int nO, int nBas, double *h_eps, double *h_ERI) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
double *d_eps;
|
double *d_eps;
|
||||||
double *d_ERI;
|
double *d_ERI;
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ elif sys.platform.lower() == "linux" or os.path.exists('/proc/version'):
|
|||||||
else:
|
else:
|
||||||
if check_compiler_exists('ifort'):
|
if check_compiler_exists('ifort'):
|
||||||
compiler = """
|
compiler = """
|
||||||
FC = ifort -qmkl=parallel -qopenmp
|
FC = ifort -mkl=parallel -qopenmp
|
||||||
AR = ar crs
|
AR = ar crs
|
||||||
FFLAGS = -I$IDIR -module $IDIR -traceback -g -Ofast -xHost
|
FFLAGS = -I$IDIR -module $IDIR -traceback -g -Ofast -xHost
|
||||||
CC = icc
|
CC = icc
|
||||||
@ -182,9 +182,10 @@ build_main = "\n".join([
|
|||||||
rule_git_clone,
|
rule_git_clone,
|
||||||
])
|
])
|
||||||
|
|
||||||
exe_dirs = [ "QuAcK"]
|
exe_dirs = ["QuAcK"]
|
||||||
lib_dirs = list(filter(lambda x: os.path.isdir(x) and \
|
lib_dirs = list(filter(lambda x: os.path.isdir(x) and \
|
||||||
x not in exe_dirs, os.listdir(".")))
|
x not in ["cuda"] and \
|
||||||
|
x not in exe_dirs, os.listdir(".")))
|
||||||
|
|
||||||
def create_ninja_in_libdir(directory):
|
def create_ninja_in_libdir(directory):
|
||||||
def write_rule(f, source_file, replace):
|
def write_rule(f, source_file, replace):
|
||||||
|
Loading…
Reference in New Issue
Block a user