Update Kokkos library in LAMMPS to v2.7.24

This commit is contained in:
Stan Moore
2018-11-12 15:16:26 -07:00
parent 1651a21f92
commit b3f08b38a2
320 changed files with 42934 additions and 1993 deletions

View File

@ -0,0 +1,55 @@
KOKKOS_DEVICES=Cuda
KOKKOS_CUDA_OPTIONS=enable_lambda
KOKKOS_ARCH = "SNB,Kepler35"
#KOKKOS_DEVICES=OpenMP
#KOKKOS_CUDA_OPTIONS=enable_lambda
#KOKKOS_ARCH = "SNB"
MAKEFILE_PATH := $(subst Makefile,,$(abspath $(lastword $(MAKEFILE_LIST))))
ifndef KOKKOS_PATH
KOKKOS_PATH = $(MAKEFILE_PATH)../..
endif
SRC = $(wildcard $(MAKEFILE_PATH)*.cpp)
HEADERS = $(wildcard $(MAKEFILE_PATH)*.hpp)
vpath %.cpp $(sort $(dir $(SRC)))
default: build
echo "Start Build"
LINKFLAGS =
ifneq (,$(findstring Cuda,$(KOKKOS_DEVICES)))
CXX = ${KOKKOS_PATH}/bin/nvcc_wrapper
EXE = virtual.cuda
override LINKFLAGS += --remove-duplicate-link-files
else
CXX = g++
EXE = virtual.host
endif
CXXFLAGS ?= -O3 -g
override CXXFLAGS += -I$(MAKEFILE_PATH)
DEPFLAGS = -M
LINK = ${CXX}
OBJ = $(notdir $(SRC:.cpp=.o))
LIB =
include $(KOKKOS_PATH)/Makefile.kokkos
build: $(EXE)
$(EXE): $(OBJ) $(KOKKOS_LINK_DEPENDS)
$(LINK) $(KOKKOS_LDFLAGS) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(KOKKOS_LIBS) $(LIB) -o $(EXE)
clean: kokkos-clean
rm -f *.o *.cuda *.host
# Compilation rules
%.o:%.cpp $(KOKKOS_CPP_DEPENDS) $(HEADERS)
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) $(CXXFLAGS) $(EXTRA_INC) -c $< -o $(notdir $@)

View File

@ -0,0 +1,26 @@
#include<classes.hpp>
KOKKOS_FUNCTION
Foo::Foo() {
val = 0;
}
KOKKOS_FUNCTION
Foo_1::Foo_1() {
val = 1;
}
KOKKOS_FUNCTION
int Foo_1::value() {
return val;
}
KOKKOS_FUNCTION
Foo_2::Foo_2() {
val = 2;
}
KOKKOS_FUNCTION
int Foo_2::value() {
return val;
}

View File

@ -0,0 +1,39 @@
#ifndef KOKKOS_EXAMPLE_VIRTUAL_FUNCTIONS_CLASSES_HPP
#define KOKKOS_EXAMPLE_VIRTUAL_FUNCTIONS_CLASSES_HPP
#include<Kokkos_Core.hpp>
class Foo {
protected:
int val;
public:
KOKKOS_FUNCTION
Foo();
KOKKOS_FUNCTION
virtual int value() { return 0; };
KOKKOS_FUNCTION
virtual ~Foo() {}
};
class Foo_1: public Foo {
public:
KOKKOS_FUNCTION
Foo_1();
KOKKOS_FUNCTION
int value();
};
class Foo_2: public Foo {
public:
KOKKOS_FUNCTION
Foo_2();
KOKKOS_FUNCTION
int value();
};
#endif //KOKKOS_EXAMPLE_VIRTUAL_FUNCTIONS_CLASSES_HPP

View File

@ -0,0 +1,36 @@
#include<classes.hpp>
int main(int argc, char* argv[]) {
Kokkos::initialize(argc,argv);
{
Foo* f_1 = (Foo*) Kokkos::kokkos_malloc(sizeof(Foo_1));
Foo* f_2 = (Foo*) Kokkos::kokkos_malloc(sizeof(Foo_2));
Kokkos::parallel_for("CreateObjects",1, KOKKOS_LAMBDA (const int&) {
new ((Foo_1*)f_1) Foo_1();
new ((Foo_2*)f_2) Foo_2();
});
int value_1,value_2;
Kokkos::parallel_reduce("CheckValues",1, KOKKOS_LAMBDA (const int&, int& lsum) {
lsum = f_1->value();
},value_1);
Kokkos::parallel_reduce("CheckValues",1, KOKKOS_LAMBDA (const int&, int& lsum) {
lsum = f_2->value();
},value_2);
printf("Values: %i %i\n",value_1,value_2);
Kokkos::parallel_for("DestroyObjects",1, KOKKOS_LAMBDA (const int&) {
f_1->~Foo();
f_2->~Foo();
});
Kokkos::kokkos_free(f_1);
Kokkos::kokkos_free(f_2);
}
Kokkos::finalize();
}