mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-05-14 18:17:44 +00:00
* Squashed 'src/composable_kernel/' content from commitf6edda611git-subtree-dir: src/composable_kernel git-subtree-split:f6edda6119* add solver ConvIgemmFwdV6r1DlopsNchwKcyxNkhw; rename static ck source files * Squashed 'src/composable_kernel/' changes from f6edda611..5781adf5c5781adf5cUpdate develop (#5) (#6)97e6d514fMerge pull request #4 from ROCmSoftwarePlatform/separate_online_compile7b1ec41e5refactor49c33aaearefactor54b3e73d1rename git-subtree-dir: src/composable_kernel git-subtree-split:5781adf5cf* fix * refactor * remove online compilation from CK * refactor * fix * add ctest * add c-style pointer cast * vector/scalar pointer cast use c-style pointer cast instead of reinterpret_cast * fix clang warning suppression * tidy * suppress cppcheck * fix enum issue * revert chagnes to hip build * fix kernel filename * update CK build script * rename * rename * make innner product compatiable on gfx900 * Update src/include/miopen/solver/ck_utility_common.hpp Co-authored-by: JD <Jehandad.Khan@amd.com> * compiler parameter use stream * use int instead of index_t in kernel wrapper * DynamicBuffer, StaticBuffer, amd_buffer_load support customized value for invalid element * refactor * refactor * change cmakelist * change ck common utility * fix Co-authored-by: JD <Jehandad.Khan@amd.com> [ROCm/composable_kernel commit:6fe3627a9e]
49 lines
1.4 KiB
C++
49 lines
1.4 KiB
C++
#include <boost/range/adaptor/transformed.hpp>
|
|
#include <cassert>
|
|
|
|
#include "host_tensor.hpp"
|
|
|
|
void HostTensorDescriptor::CalculateStrides()
|
|
{
|
|
mStrides.clear();
|
|
mStrides.resize(mLens.size(), 0);
|
|
if(mStrides.empty())
|
|
return;
|
|
|
|
mStrides.back() = 1;
|
|
std::partial_sum(
|
|
mLens.rbegin(), mLens.rend() - 1, mStrides.rbegin() + 1, std::multiplies<std::size_t>());
|
|
}
|
|
|
|
std::size_t HostTensorDescriptor::GetNumOfDimension() const { return mLens.size(); }
|
|
|
|
std::size_t HostTensorDescriptor::GetElementSize() const
|
|
{
|
|
assert(mLens.size() == mStrides.size());
|
|
return std::accumulate(
|
|
mLens.begin(), mLens.end(), std::size_t{1}, std::multiplies<std::size_t>());
|
|
}
|
|
|
|
std::size_t HostTensorDescriptor::GetElementSpace() const
|
|
{
|
|
auto ls = mLens | boost::adaptors::transformed([](std::size_t v) { return v - 1; });
|
|
return std::inner_product(ls.begin(), ls.end(), mStrides.begin(), std::size_t{0}) + 1;
|
|
}
|
|
|
|
const std::vector<std::size_t>& HostTensorDescriptor::GetLengths() const { return mLens; }
|
|
|
|
const std::vector<std::size_t>& HostTensorDescriptor::GetStrides() const { return mStrides; }
|
|
|
|
void ostream_HostTensorDescriptor(const HostTensorDescriptor& desc, std::ostream& os)
|
|
{
|
|
os << "dim " << desc.GetNumOfDimension() << ", ";
|
|
|
|
os << "lengths {";
|
|
LogRange(os, desc.GetLengths(), ", ");
|
|
os << "}, ";
|
|
|
|
os << "strides {";
|
|
LogRange(os, desc.GetStrides(), ", ");
|
|
os << "}" << std::endl;
|
|
}
|