Skip to content

Commit

Permalink
Update to gridtools 1.07.00 (#28)
Browse files Browse the repository at this point in the history
  • Loading branch information
havogt authored May 18, 2018
1 parent 9816063 commit 6472116
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 150 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ project(gridtools-verification CXX C)

include(ExternalProject)

set(GRIDTOOLS_VERIFICATION_VERSION_STRING "0.8")
set(GRIDTOOLS_VERIFICATION_VERSION_STRING "0.9")
set(SERIALBOX_VERSION_REQUIRED "2.3.1")

#----------------- CMake options
Expand Down
38 changes: 19 additions & 19 deletions src/core/serialization.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,13 +95,17 @@ namespace gt_verification {
// Get info of serialized field
const ser::field_meta_info &info = serializer_->get_field_meta_info(name);

std::vector< int > field_sizes{field.i_size(), field.j_size(), field.k_size()};

auto mask = mask_for_killed_dimensions(info.dims(), field_sizes);
field_sizes = apply_mask(mask, field_sizes);
auto mask = mask_for_killed_dimensions({field.i_stride(), field.j_stride(), field.k_stride()});
auto field_sizes = apply_mask(mask, {field.i_size(), field.j_size(), field.k_size()});

// case where gridtools data_store is completely masked (-1,-1,-1) == 0D,
// but serializer is 1D with length 1: we fix the field_size and the mask
if (info.dims()[0] == 1 && field_sizes.size() == 0) {
field_sizes.push_back(1);
mask[0] = true;
}

VERIFICATION_LOG() << boost::format(" - loading %-15s (%2i, %2i, %2i)") % name % field_sizes[0] %
field_sizes[1] % field_sizes[2]
VERIFICATION_LOG() << boost::format(" - loading %-15s (%s)") % name % to_string(field_sizes)
<< logger_action::endl;

// Check dimensions
Expand All @@ -119,8 +123,7 @@ namespace gt_verification {
"the requested field '%s' has a different type than the provided field.", name);

// Deserialize field
std::vector< int > strides{field.i_stride(), field.j_stride(), field.k_stride()};
strides = apply_mask(mask, strides);
auto strides = apply_mask(mask, {field.i_stride(), field.j_stride(), field.k_stride()});
serializer_->read(name, savepoint, field.data(), strides, also_previous);

field.sync();
Expand Down Expand Up @@ -203,7 +206,7 @@ namespace gt_verification {

bool sizes_compatible(const std::vector< int > &serialized_sizes, const std::vector< int > &verifier_sizes) {
for (size_t i = 0; i < serialized_sizes.size(); ++i) {
if (serialized_sizes[i] == 0)
if (serialized_sizes[i] == 0) // additional 0s at the end
return true;
else if (serialized_sizes[i] != verifier_sizes[i] &&
!can_transform_dimension(serialized_sizes[i], verifier_sizes[i]))
Expand All @@ -216,23 +219,20 @@ namespace gt_verification {
if (v.size() == 0)
return std::string("<empty-vector>");
else
return std::accumulate(
std::next(v.begin()), v.end(), std::string(std::to_string(v[0])), [](std::string s, int i) {
return s + ", " + std::to_string(i);
});
return std::accumulate(std::next(v.begin()),
v.end(),
std::string(std::to_string(v[0])),
[](std::string s, int i) { return s + ", " + std::to_string(i); });
}

// FIXME: hack the mapping of killed dimension
std::vector< bool > mask_for_killed_dimensions(
const std::vector< int > &serialized_sizes, const std::vector< int > &verifier_sizes) const {
std::vector< bool > mask_for_killed_dimensions(const std::vector< int > &strides) const {
std::vector< bool > mask;
size_t i_serialized = 0;
for (size_t i = 0; i < verifier_sizes.size(); ++i) {
if (verifier_sizes[i] != serialized_sizes[i_serialized] && verifier_sizes[i] == 1) {
for (size_t i = 0; i < strides.size(); ++i) {
if (strides[i] == 0) {
mask.push_back(false);
} else {
mask.push_back(true);
i_serialized++;
}
}
return mask;
Expand Down
160 changes: 31 additions & 129 deletions src/core/type_erased_field.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,31 +84,16 @@ namespace gt_verification {
*/
virtual int i_size() const noexcept = 0;

/**
* First dimension (i-direction) including potential padding
*/
virtual int i_size_padded() const noexcept = 0;

/**
* Second dimension (j-direction) including halo-boundaries
*/
virtual int j_size() const noexcept = 0;

/**
* First dimension (i-direction) including potential padding
*/
virtual int j_size_padded() const noexcept = 0;

/**
* Third dimension (k-direction)
*/
virtual int k_size() const noexcept = 0;

/**
* Third dimension (k-direction) including potential padding
*/
virtual int k_size_padded() const noexcept = 0;

/**
* Stride in i-direction
*/
Expand Down Expand Up @@ -138,55 +123,29 @@ namespace gt_verification {

type_erased_field_view_base(FieldType field) : field_(field) {}

virtual const T &access(int i, int j, int k) const noexcept override {
return make_host_view(field_)(i, j, k);
}
const T &access(int i, int j, int k) const noexcept override { return make_host_view(field_)(i, j, k); }

virtual T &access(int i, int j, int k) noexcept override { return make_host_view(field_)(i, j, k); }
T &access(int i, int j, int k) noexcept override { return make_host_view(field_)(i, j, k); }

virtual T *data() noexcept override { return &make_host_view(field_)(0, 0, 0); }
T *data() noexcept override { return &make_host_view(field_)(0, 0, 0); }

virtual const T *data() const noexcept override { return &make_host_view(field_)(0, 0, 0); }
const T *data() const noexcept override { return &make_host_view(field_)(0, 0, 0); }

virtual const char *name() const noexcept override { return field_.name().c_str(); }
const char *name() const noexcept override { return field_.name().c_str(); }

virtual int i_size() const noexcept override {
return field_.get_storage_info_ptr()->template unaligned_dim< 0 >();
}
int i_size() const noexcept override { return field_.get_storage_info_ptr()->template total_length< 0 >(); }

virtual int i_size_padded() const noexcept override {
return field_.get_storage_info_ptr()->template dim< 0 >();
}
int j_size() const noexcept override { return field_.get_storage_info_ptr()->template total_length< 1 >(); }

virtual int j_size() const noexcept override {
return field_.get_storage_info_ptr()->template unaligned_dim< 1 >();
}
int k_size() const noexcept override { return field_.get_storage_info_ptr()->template total_length< 2 >(); }

virtual int j_size_padded() const noexcept override {
return field_.get_storage_info_ptr()->template dim< 1 >();
}
int i_stride() const noexcept override { return field_.get_storage_info_ptr()->template stride< 0 >(); }

virtual int k_size() const noexcept override {
return field_.get_storage_info_ptr()->template unaligned_dim< 2 >();
}

virtual int k_size_padded() const noexcept override {
return field_.get_storage_info_ptr()->template dim< 2 >();
}
int j_stride() const noexcept override { return field_.get_storage_info_ptr()->template stride< 1 >(); }

virtual int i_stride() const noexcept override {
return field_.get_storage_info_ptr()->template stride< 0 >();
}
int k_stride() const noexcept override { return field_.get_storage_info_ptr()->template stride< 2 >(); }

virtual int j_stride() const noexcept override {
return field_.get_storage_info_ptr()->template stride< 1 >();
}

virtual int k_stride() const noexcept override {
return field_.get_storage_info_ptr()->template stride< 2 >();
}

virtual void sync() noexcept override { field_.sync(); }
void sync() noexcept override { field_.sync(); }

private:
FieldType field_;
Expand All @@ -199,9 +158,9 @@ namespace gt_verification {
std::is_same< typename FieldType::storage_t::data_t, T >::value, "internal error: types do not match");

type_erased_field_base(const FieldType &field)
: metaData_(field.get_storage_info_ptr()->template unaligned_dim< 0 >(),
field.get_storage_info_ptr()->template unaligned_dim< 1 >(),
field.get_storage_info_ptr()->template unaligned_dim< 2 >()),
: metaData_(field.get_storage_info_ptr()->template total_length< 0 >(),
field.get_storage_info_ptr()->template total_length< 1 >(),
field.get_storage_info_ptr()->template total_length< 2 >()),
field_(metaData_, -1, field.name()) {

// Update field on host
Expand All @@ -219,55 +178,29 @@ namespace gt_verification {
dst(i, j, k) = src(i, j, k);
}

virtual const T &access(int i, int j, int k) const noexcept override {
return make_host_view(field_)(i, j, k);
}

virtual T &access(int i, int j, int k) noexcept override { return make_host_view(field_)(i, j, k); }
const T &access(int i, int j, int k) const noexcept override { return make_host_view(field_)(i, j, k); }

virtual T *data() noexcept override { return &make_host_view(field_)(0, 0, 0); }
T &access(int i, int j, int k) noexcept override { return make_host_view(field_)(i, j, k); }

virtual const T *data() const noexcept override { return &make_host_view(field_)(0, 0, 0); }

virtual const char *name() const noexcept override { return field_.name().c_str(); }

virtual int i_size() const noexcept override {
return field_.get_storage_info_ptr()->template unaligned_dim< 0 >();
}
T *data() noexcept override { return &make_host_view(field_)(0, 0, 0); }

virtual int i_size_padded() const noexcept override {
return field_.get_storage_info_ptr()->template dim< 0 >();
}
const T *data() const noexcept override { return &make_host_view(field_)(0, 0, 0); }

virtual int j_size() const noexcept override {
return field_.get_storage_info_ptr()->template unaligned_dim< 1 >();
}
const char *name() const noexcept override { return field_.name().c_str(); }

virtual int j_size_padded() const noexcept override {
return field_.get_storage_info_ptr()->template dim< 1 >();
}
int i_size() const noexcept override { return field_.get_storage_info_ptr()->template total_length< 0 >(); }

virtual int k_size() const noexcept override {
return field_.get_storage_info_ptr()->template unaligned_dim< 2 >();
}
int j_size() const noexcept override { return field_.get_storage_info_ptr()->template total_length< 1 >(); }

virtual int k_size_padded() const noexcept override {
return field_.get_storage_info_ptr()->template dim< 2 >();
}
int k_size() const noexcept override { return field_.get_storage_info_ptr()->template total_length< 2 >(); }

virtual int i_stride() const noexcept override {
return field_.get_storage_info_ptr()->template stride< 0 >();
}
int i_stride() const noexcept override { return field_.get_storage_info_ptr()->template stride< 0 >(); }

virtual int j_stride() const noexcept override {
return field_.get_storage_info_ptr()->template stride< 1 >();
}
int j_stride() const noexcept override { return field_.get_storage_info_ptr()->template stride< 1 >(); }

virtual int k_stride() const noexcept override {
return field_.get_storage_info_ptr()->template stride< 2 >();
}
int k_stride() const noexcept override { return field_.get_storage_info_ptr()->template stride< 2 >(); }

virtual void sync() noexcept override { field_.sync(); }
void sync() noexcept override { field_.sync(); }

private:
typename FieldType::storage_info_t metaData_;
Expand Down Expand Up @@ -327,8 +260,7 @@ namespace gt_verification {
// The const cast is ugly here but the signature of this constructor needs to be the same as
// the copy constructor. Hence, we need to capture the field by const ref.. maybe this can
// be improved.
base_ = std::make_shared< internal::type_erased_field_view_base< FieldType, T > >(
field);
base_ = std::make_shared< internal::type_erased_field_view_base< FieldType, T > >(field);
}

/**
Expand Down Expand Up @@ -362,33 +294,18 @@ namespace gt_verification {
*/
int i_size() const noexcept { return base_->i_size(); }

/**
* @brief First dimension (i-direction) including potential padding
*/
int i_size_padded() const noexcept { return base_->i_size_padded(); }

/**
* @brief Second dimension (j-direction) including halo-boundaries
*/
int j_size() const noexcept { return base_->j_size(); }

/**
* @brief First dimension (i-direction) including potential padding
*/
int j_size_padded() const noexcept { return base_->j_size_padded(); }

/**
* @brief Third dimension (k-direction)
*/
int k_size() const noexcept { return base_->k_size(); }

/**
* @brief Third dimension (k-direction) including potential padding
*/
int k_size_padded() const noexcept { return base_->k_size_padded(); }

/**
* @brief Total size of field the field including potential padding
* @brief Total size of field the field
*/
int size() const noexcept { return i_size() * j_size() * k_size(); }

Expand Down Expand Up @@ -486,35 +403,20 @@ namespace gt_verification {
*/
int i_size() const noexcept { return base_->i_size(); }

/**
* @brief First dimension (i-direction) including potential padding
*/
int i_size_padded() const noexcept { return base_->i_size_padded(); }

/**
* @brief Second dimension (j-direction) including halo-boundaries
*/
int j_size() const noexcept { return base_->j_size(); }

/**
* @brief First dimension (i-direction) including potential padding
*/
int j_size_padded() const noexcept { return base_->j_size_padded(); }

/**
* @brief Third dimension (k-direction)
*/
int k_size() const noexcept { return base_->k_size(); }

/**
* @brief Third dimension (k-direction) including potential padding
*/
int k_size_padded() const noexcept { return base_->k_size_padded(); }

/**
* @brief Total size of field the field including potential padding
* @brief Total size of field the field
*/
int size() const noexcept { return i_size() * j_size_padded() * k_size(); }
int size() const noexcept { return i_size() * j_size() * k_size(); }

/**
* @brief Stride in i-direction
Expand Down
2 changes: 1 addition & 1 deletion src/verification/verification.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ namespace gt_verification {
// Check dimensions
if ((iSizeOut != iSizeRef) || (jSizeOut != jSizeRef) || (kSizeOut != kSizeRef))
return verification_result(false,
(boost::format("the output field '%s' has a diffrent size than the refrence "
(boost::format("the output field '%s' has a different size than the reference "
"field '%s'.\n %-15s as: (%i, %i, %i)\n %-15s as: (%i, %i, %i)") %
nameOut % nameRef % nameOut % iSizeOut % jSizeOut % kSizeOut % nameRef % iSizeRef % jSizeRef %
kSizeRef)
Expand Down

0 comments on commit 6472116

Please sign in to comment.