[Kokkos] Remove defining View layout as Kokkos does it correctly by default.
This fixes #43.
This commit is contained in:
parent
b93ac5d7cf
commit
0092d23461
@ -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.
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user