[Kokkos] Remove defining View layout as Kokkos does it correctly by default.

This fixes #43.
This commit is contained in:
Tom Deakin 2018-02-14 22:13:46 +00:00
parent b93ac5d7cf
commit 0092d23461
4 changed files with 30 additions and 38 deletions

View File

@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file.
### Removed ### Removed
- Superfluous OpenMP 4.5 map(to:) clauses on kernel target regions. - Superfluous OpenMP 4.5 map(to:) clauses on kernel target regions.
- Kokkos namespace not used by default so the API is easier to spot. - Kokkos namespace not used by default so the API is easier to spot.
- Manual specification of Kokkos layout (DEVICE) as the Kokkos library sets this by default.
### Fixed ### Fixed
- Kokkos now compiles and links separately to fix complication with Kokkos 2.05.00. - Kokkos now compiles and links separately to fix complication with Kokkos 2.05.00.

View File

@ -29,20 +29,17 @@ $(info $(target_help))
TARGET=CPU TARGET=CPU
endif endif
ifeq ($(TARGET), CPU) ifeq ($(TARGET), GPU)
TARGET_DEF = -DKOKKOS_TARGET_CPU
else ifeq ($(TARGET), GPU)
CXX = $(NVCC_WRAPPER) CXX = $(NVCC_WRAPPER)
TARGET_DEF =
endif endif
OBJ = main.o KokkosStream.o OBJ = main.o KokkosStream.o
kokkos-stream: $(OBJ) $(KOKKOS_CPP_DEPENDS) kokkos-stream: $(OBJ) $(KOKKOS_CPP_DEPENDS)
$(CXX) $(KOKKOS_LDFLAGS) $(KOKKOS_LIBS) -DKOKKOS $(TARGET_DEF) -O3 $(EXTRA_FLAGS) $(OBJ) -o $@ $(CXX) $(KOKKOS_LDFLAGS) $(KOKKOS_LIBS) -DKOKKOS -O3 $(EXTRA_FLAGS) $(OBJ) -o $@
%.o: %.cpp %.o: %.cpp
$(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) -DKOKKOS $(TARGET_DEF) -O3 $(EXTRA_FLAGS) -c $< $(CXX) $(KOKKOS_CPPFLAGS) $(KOKKOS_CXXFLAGS) -DKOKKOS -O3 $(EXTRA_FLAGS) -c $<
.PHONY: clean .PHONY: clean
clean: clean:

View File

@ -14,12 +14,12 @@ KokkosStream<T>::KokkosStream(
{ {
Kokkos::initialize(); Kokkos::initialize();
d_a = new Kokkos::View<double*, DEVICE>("d_a", ARRAY_SIZE); d_a = new Kokkos::View<double*>("d_a", ARRAY_SIZE);
d_b = new Kokkos::View<double*, DEVICE>("d_b", ARRAY_SIZE); d_b = new Kokkos::View<double*>("d_b", ARRAY_SIZE);
d_c = new Kokkos::View<double*, DEVICE>("d_c", ARRAY_SIZE); d_c = new Kokkos::View<double*>("d_c", ARRAY_SIZE);
hm_a = new Kokkos::View<double*, DEVICE>::HostMirror(); hm_a = new Kokkos::View<double*>::HostMirror();
hm_b = new Kokkos::View<double*, DEVICE>::HostMirror(); hm_b = new Kokkos::View<double*>::HostMirror();
hm_c = new Kokkos::View<double*, DEVICE>::HostMirror(); hm_c = new Kokkos::View<double*>::HostMirror();
*hm_a = create_mirror_view(*d_a); *hm_a = create_mirror_view(*d_a);
*hm_b = create_mirror_view(*d_b); *hm_b = create_mirror_view(*d_b);
*hm_c = create_mirror_view(*d_c); *hm_c = create_mirror_view(*d_c);
@ -34,9 +34,9 @@ KokkosStream<T>::~KokkosStream()
template <class T> template <class T>
void KokkosStream<T>::init_arrays(T initA, T initB, T initC) void KokkosStream<T>::init_arrays(T initA, T initB, T initC)
{ {
Kokkos::View<double*, DEVICE> a(*d_a); Kokkos::View<double*> a(*d_a);
Kokkos::View<double*, DEVICE> b(*d_b); Kokkos::View<double*> b(*d_b);
Kokkos::View<double*, DEVICE> c(*d_c); Kokkos::View<double*> c(*d_c);
Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index) Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index)
{ {
a[index] = initA; a[index] = initA;
@ -64,9 +64,9 @@ void KokkosStream<T>::read_arrays(
template <class T> template <class T>
void KokkosStream<T>::copy() void KokkosStream<T>::copy()
{ {
Kokkos::View<double*, DEVICE> a(*d_a); Kokkos::View<double*> a(*d_a);
Kokkos::View<double*, DEVICE> b(*d_b); Kokkos::View<double*> b(*d_b);
Kokkos::View<double*, DEVICE> c(*d_c); Kokkos::View<double*> c(*d_c);
Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index) Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index)
{ {
@ -78,9 +78,9 @@ void KokkosStream<T>::copy()
template <class T> template <class T>
void KokkosStream<T>::mul() void KokkosStream<T>::mul()
{ {
Kokkos::View<double*, DEVICE> a(*d_a); Kokkos::View<double*> a(*d_a);
Kokkos::View<double*, DEVICE> b(*d_b); Kokkos::View<double*> b(*d_b);
Kokkos::View<double*, DEVICE> c(*d_c); Kokkos::View<double*> c(*d_c);
const T scalar = startScalar; const T scalar = startScalar;
Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index) Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index)
@ -93,9 +93,9 @@ void KokkosStream<T>::mul()
template <class T> template <class T>
void KokkosStream<T>::add() void KokkosStream<T>::add()
{ {
Kokkos::View<double*, DEVICE> a(*d_a); Kokkos::View<double*> a(*d_a);
Kokkos::View<double*, DEVICE> b(*d_b); Kokkos::View<double*> b(*d_b);
Kokkos::View<double*, DEVICE> c(*d_c); Kokkos::View<double*> c(*d_c);
Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index) Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index)
{ {
@ -107,9 +107,9 @@ void KokkosStream<T>::add()
template <class T> template <class T>
void KokkosStream<T>::triad() void KokkosStream<T>::triad()
{ {
Kokkos::View<double*, DEVICE> a(*d_a); Kokkos::View<double*> a(*d_a);
Kokkos::View<double*, DEVICE> b(*d_b); Kokkos::View<double*> b(*d_b);
Kokkos::View<double*, DEVICE> c(*d_c); Kokkos::View<double*> c(*d_c);
const T scalar = startScalar; const T scalar = startScalar;
Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index) Kokkos::parallel_for(array_size, KOKKOS_LAMBDA (const long index)
@ -122,8 +122,8 @@ void KokkosStream<T>::triad()
template <class T> template <class T>
T KokkosStream<T>::dot() T KokkosStream<T>::dot()
{ {
Kokkos::View<double *, DEVICE> a(*d_a); Kokkos::View<double *> a(*d_a);
Kokkos::View<double *, DEVICE> b(*d_b); Kokkos::View<double *> b(*d_b);
T sum = 0.0; T sum = 0.0;

View File

@ -17,12 +17,6 @@
#define IMPLEMENTATION_STRING "Kokkos" #define IMPLEMENTATION_STRING "Kokkos"
#ifdef KOKKOS_TARGET_CPU
#define DEVICE Kokkos::OpenMP
#else
#define DEVICE Kokkos::Cuda
#endif
template <class T> template <class T>
class KokkosStream : public Stream<T> class KokkosStream : public Stream<T>
{ {
@ -31,9 +25,9 @@ class KokkosStream : public Stream<T>
unsigned int array_size; unsigned int array_size;
// Device side pointers to arrays // Device side pointers to arrays
Kokkos::View<double*, DEVICE>* d_a; Kokkos::View<double*>* d_a;
Kokkos::View<double*, DEVICE>* d_b; Kokkos::View<double*>* d_b;
Kokkos::View<double*, DEVICE>* d_c; Kokkos::View<double*>* d_c;
Kokkos::View<double*>::HostMirror* hm_a; Kokkos::View<double*>::HostMirror* hm_a;
Kokkos::View<double*>::HostMirror* hm_b; Kokkos::View<double*>::HostMirror* hm_b;
Kokkos::View<double*>::HostMirror* hm_c; Kokkos::View<double*>::HostMirror* hm_c;