17 namespace host_common {
20 static inline void dumpBufferToFile(
const char* fileName, T* data,
size_t dataNumItems)
22 std::ofstream outFile(fileName, std::ios::binary);
25 outFile.write(
reinterpret_cast<const char*
>(data), dataNumItems *
sizeof(T));
27 std::cout <<
"Write output to file " << fileName << std::endl;
31 std::cout <<
"Could not open file " << fileName <<
" for writing" << std::endl;
36 static inline T getSingleValueFromString(
const std::string& valueStr)
38 std::istringstream iss(valueStr);
48 static inline std::vector<T> getTypeValuesFromString(
const char* cstr_values)
50 std::string valuesStr(cstr_values);
52 std::vector<T> values;
56 new_pos = valuesStr.find(
',', pos);
57 while(new_pos != std::string::npos)
59 const std::string sliceStr = valuesStr.substr(pos, new_pos - pos);
61 T val = getSingleValueFromString<T>(sliceStr);
63 values.push_back(val);
66 new_pos = valuesStr.find(
',', pos);
69 std::string sliceStr = valuesStr.substr(pos);
70 T val = getSingleValueFromString<T>(sliceStr);
72 values.push_back(val);
78 static inline std::vector<std::array<index_t, NDim>>
79 get_index_set(
const std::array<index_t, NDim>& dim_lengths)
81 static_assert(NDim >= 1,
"NDim >= 1 is required to use this function!");
83 if constexpr(NDim == 1)
85 std::vector<std::array<index_t, NDim>> index_set;
87 for(
int i = 0; i < dim_lengths[0]; i++)
89 std::array<index_t, 1> index{i};
91 index_set.push_back(index);
98 std::vector<std::array<index_t, NDim>> index_set;
99 std::array<
index_t, NDim - 1> partial_dim_lengths;
101 std::copy(dim_lengths.begin() + 1, dim_lengths.end(), partial_dim_lengths.begin());
103 std::vector<std::array<
index_t, NDim - 1>> partial_index_set;
105 partial_index_set = get_index_set<NDim - 1>(partial_dim_lengths);
107 for(
index_t i = 0; i < dim_lengths[0]; i++)
108 for(
const auto& partial_index : partial_index_set)
110 std::array<index_t, NDim> index;
114 std::copy(partial_index.begin(), partial_index.end(), index.begin() + 1);
116 index_set.push_back(index);
124 static inline size_t get_offset_from_index(
const std::array<index_t, NDim>& strides,
125 const std::array<index_t, NDim>& index)
129 for(
int i = 0; i < NDim; i++)
130 offset += index[i] * strides[i];
auto copy(InputRange &&range, OutputIterator iter) -> decltype(std::copy(std::begin(std::forward< InputRange >(range)), std::end(std::forward< InputRange >(range)), iter))
Definition: algorithm.hpp:14
int32_t index_t
Definition: ck.hpp:298