Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update CK-based 2d/3d convolution solvers to support nchw/ncdhw layout #2429

Merged
merged 125 commits into from
Feb 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
7c7293e
WIP: updating 3d solver to support ncdhw layout
amberhassaan Oct 2, 2023
6927fac
WIP: finished code structure for forward conv with layout transformat…
amberhassaan Oct 4, 2023
fb05334
WIP: forward 3d conv working
amberhassaan Oct 6, 2023
eb48981
WIP: enable layout transform for Bwd, Weights and 2D NCHW layout as w…
amberhassaan Oct 6, 2023
9dae7fe
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Oct 6, 2023
a81b0bc
Bwd and WrW tests working. 2D fwd case also working with NCHW layout
amberhassaan Oct 7, 2023
3082342
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Oct 7, 2023
1062bd6
formatting fixes
amberhassaan Oct 7, 2023
8fd8275
fix build. Do some cleanup
amberhassaan Oct 9, 2023
7a8dbab
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Oct 9, 2023
ce9f023
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Oct 12, 2023
d9aec20
resolve conflicts and address errors
amberhassaan Oct 13, 2023
ceb6c4a
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Oct 16, 2023
1241dd3
fix formatting
amberhassaan Oct 16, 2023
9a6c1d1
fix fin hash
amberhassaan Oct 16, 2023
4f40720
WiP: redesign code
amberhassaan Oct 17, 2023
0135bd1
WIP: new design compiles
amberhassaan Oct 17, 2023
8c08fbb
WIP: debugging the new design
amberhassaan Oct 18, 2023
82f8d13
clean up and formatting
amberhassaan Oct 18, 2023
58cc9fb
use static assert for alignment
amberhassaan Oct 18, 2023
aa94868
replace move to enable RVO.
amberhassaan Oct 18, 2023
d797701
Merge pull request #2461 from ROCmSoftwarePlatform/amber/layout-conv-…
amberhassaan Oct 24, 2023
fdd597b
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Oct 27, 2023
fe69c64
fix build
amberhassaan Oct 27, 2023
f515a74
add checks for non-packed tensors with nchw layout
amberhassaan Oct 27, 2023
b93be94
fix bug with passing strides when using default layout
amberhassaan Oct 28, 2023
c217f9e
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Oct 28, 2023
c76c086
address review comments
amberhassaan Oct 29, 2023
9c5e6c7
fix hip-tidy failure
amberhassaan Oct 29, 2023
bdb8e28
Merge branch 'develop' into amber/layout-xform-conv
amberhassaan Oct 29, 2023
3c180ed
Merge branch 'develop' into amber/layout-xform-conv
amberhassaan Oct 30, 2023
5d9d7fc
added checks on workspace params
amberhassaan Nov 1, 2023
392a48c
add a method to solver to get workspace size
amberhassaan Nov 1, 2023
90d28f8
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Nov 1, 2023
a3acc97
Merge branch 'amber/add-workspace-check' into amber/layout-xform-conv
amberhassaan Nov 1, 2023
f7c5fea
WIP: debugging a workspace issue
amberhassaan Nov 2, 2023
75e18bb
addressed review comments
amberhassaan Nov 8, 2023
9859d97
Merge remote-tracking branch 'origin/develop' into amber/add-workspac…
amberhassaan Nov 9, 2023
9bb0750
fix release build warning
amberhassaan Nov 9, 2023
675b6a9
WIP: workspace abstraction
amberhassaan Nov 11, 2023
4b33079
added an abstraction for workspace
amberhassaan Nov 15, 2023
6b12bcf
Merge branch 'develop' into amber/add-workspace-check
amberhassaan Nov 15, 2023
cdb9325
fix a check
amberhassaan Nov 15, 2023
71f709b
fix format
amberhassaan Nov 15, 2023
ae5d50e
missed some instances
amberhassaan Nov 15, 2023
02bf9d0
Merge remote-tracking branch 'origin/develop' into amber/workspace-ab…
amberhassaan Nov 15, 2023
83d622b
bring back the workspace round up logic
amberhassaan Nov 15, 2023
4bd4253
formatting
amberhassaan Nov 15, 2023
6eef5fe
fix hip tidy issues. add more checks
amberhassaan Nov 16, 2023
f22aa2d
fix a bug with zeroing out rnn workspace
amberhassaan Nov 16, 2023
d6ae39f
fix hip-tidy error
amberhassaan Nov 16, 2023
385d816
Merge branch 'amber/add-workspace-check' into amber/workspace-abstrac…
amberhassaan Nov 21, 2023
815b73a
Merge remote-tracking branch 'origin/develop' into amber/workspace-ab…
amberhassaan Nov 21, 2023
98ec151
address review comments
amberhassaan Nov 21, 2023
d99f076
Remove a check that was missed for packed tensors (#2495)
amberhassaan Nov 2, 2023
445e3ae
Fix builds with rocBLAS that does not support F8 (#2480)
atamazov Nov 2, 2023
c0a13fd
[Workaround] Issue 2496 - disabling the unit test case in wrw solver …
carlushuang Nov 2, 2023
840d0be
[NFC] Replace miopen::ProblemDescription with conv::ProblemDescriptio…
averinevg Nov 2, 2023
2185bed
Bump rocm-docs-core from 0.26.0 to 0.27.0 in /docs/.sphinx (#2501)
dependabot[bot] Nov 5, 2023
9b8b355
WIP: added abort for debugging
amberhassaan Nov 6, 2023
5b8b026
Update the SyncDB tests to use multi-threading (#2407)
JehandadKhan Nov 7, 2023
3cfd534
Workaround for issue #2492 - disable ConvBinWinoRxS when granularity …
atamazov Nov 7, 2023
0d023ed
addressed review comments
amberhassaan Nov 8, 2023
861e450
Fix build after resolving conflicts
amberhassaan Nov 8, 2023
0f308f1
workaround the find api issue #2500
amberhassaan Nov 23, 2023
dc5fe1e
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Nov 23, 2023
b4b91a9
Merge remote-tracking branch 'origin/amber/workspace-abstraction' int…
amberhassaan Nov 24, 2023
639c468
fix build and use workspace abstraction
amberhassaan Nov 24, 2023
9361596
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Nov 24, 2023
2237f2c
fix formatting
amberhassaan Nov 24, 2023
ce7b0f7
add a row of values for pads and strides that are not 1
amberhassaan Nov 28, 2023
85a158c
Merge branch 'develop' into amber/conv3d-bwd-wrw-tests
junliume Dec 1, 2023
1399b97
wip: test against cpu ref
amberhassaan Dec 5, 2023
ac6640b
Merge remote-tracking branch 'origin/develop' into amber/conv3d-bwd-w…
amberhassaan Dec 5, 2023
60ddb34
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Dec 7, 2023
6b6693d
fix build post merge
amberhassaan Dec 7, 2023
d2a8cfe
fix format. add some debug prints
amberhassaan Dec 7, 2023
fa5c4e2
add debug prints
amberhassaan Dec 8, 2023
da689f8
bug fix for bwd pass
amberhassaan Dec 11, 2023
43aae4c
fix build. Syntax change to invoke conversion operator
amberhassaan Dec 11, 2023
19c18e5
fix format
amberhassaan Dec 11, 2023
61afb9e
fixed another in/out bug
amberhassaan Dec 12, 2023
aa96ed3
add workspace size to conv solution
amberhassaan Dec 12, 2023
f8976bf
WIP: bug fixed but needs clean up
amberhassaan Dec 13, 2023
c4da269
Merge remote-tracking branch 'origin/develop' into amber/conv3d-bwd-w…
amberhassaan Dec 13, 2023
06e0dc7
cleanup and formatting
amberhassaan Dec 13, 2023
3bf0988
Merge branch 'develop' into amber/conv3d-bwd-wrw-tests
amberhassaan Dec 14, 2023
b67acb3
Merge remote-tracking branch 'origin/amber/conv3d-bwd-wrw-tests' into…
amberhassaan Dec 14, 2023
c80355b
Merge branch 'develop' into amber/layout-xform-conv
junliume Dec 14, 2023
8fb21bf
WIP: still debugging wrw case
amberhassaan Dec 16, 2023
0b31b2d
fixed bug in wrw: zero out workspace buffer before calling CK kernel
amberhassaan Dec 16, 2023
65a0e64
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Dec 16, 2023
641cf69
fix formatting
amberhassaan Dec 16, 2023
58e9f09
bwd swap bug fix
amberhassaan Dec 16, 2023
7a2ab4a
fixed warning
amberhassaan Dec 17, 2023
d5eab9e
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Dec 18, 2023
aa209a2
new test for 2d bwd conv
amberhassaan Dec 18, 2023
094abe5
Merge branch 'develop' into amber/layout-xform-conv
junliume Dec 18, 2023
1672c15
WIP: debugging
amberhassaan Jan 17, 2024
10254b5
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Jan 17, 2024
276449f
fix fin commit hash
amberhassaan Jan 17, 2024
36dac04
fix build after merging latest develop
amberhassaan Jan 17, 2024
c762821
choose better name
amberhassaan Jan 17, 2024
2a7974a
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Jan 17, 2024
6185b7c
fix formatting
amberhassaan Jan 17, 2024
eefb1ac
bug fixes for bwd and wrw gtests
amberhassaan Jan 18, 2024
0a1e4dc
remove nchw support from non-grouped 2d convolution solvers
amberhassaan Jan 18, 2024
7a5ad48
fix build for NO_CK flag
amberhassaan Jan 18, 2024
435f3a3
Merge branch 'develop' into amber/layout-xform-conv
amberhassaan Jan 19, 2024
80e1a4a
add initializing transpose operation for convolution output. This is …
amberhassaan Jan 23, 2024
5628fa4
fix formatting
amberhassaan Jan 23, 2024
3c7a44d
Merge branch 'develop' into amber/layout-xform-conv
amberhassaan Jan 24, 2024
4f6eab1
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Jan 26, 2024
656ed63
code cleanup
amberhassaan Jan 26, 2024
4ce0c77
fix formatting
amberhassaan Jan 26, 2024
01aebb7
enable nchw convolution gtests. Enable 2d fwd grouped conv
amberhassaan Jan 26, 2024
368ccca
fix fin hash
amberhassaan Jan 26, 2024
e86e163
enable NCHW for 2D conv solvers as well. Fix bug in test fixture clas…
amberhassaan Jan 26, 2024
5c4cf59
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Feb 6, 2024
8b9b4a4
address review comments
amberhassaan Feb 6, 2024
f0629b6
align total size to 256 byte boundary
amberhassaan Feb 7, 2024
a5767da
fix running time accumulation logic.
amberhassaan Feb 7, 2024
ff01caf
Merge remote-tracking branch 'origin/develop' into amber/layout-xform…
amberhassaan Feb 7, 2024
83d9fd2
fix build after merge from develop
amberhassaan Feb 7, 2024
9088ac7
fix and simplify padding logic
amberhassaan Feb 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 11 additions & 9 deletions src/buffer_info.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,29 +148,31 @@ BuffInfo::BuffInfo(MemLayout_t layout, int nk, int c, int h, int w, int g, int _
}
}

MultiBufferWorkspaceTraits::MultiBufferWorkspaceTraits(std::initializer_list<size_t> v_size_,
size_t alignment_)
: v_size(v_size_), alignment(alignment_)
MultiBufferWorkspaceTraits::MultiBufferWorkspaceTraits(std::initializer_list<size_t> v_size_)
{

assert(v_size_.size() > 0);
size_t each_offset = 0;
v_offset.push_back(each_offset);
for(auto each_size : v_size)
for(auto each_size : v_size_)
{
size_t padding = (alignment - (each_size % alignment)) % alignment;
each_offset += each_size + padding;
auto padded_size = (each_size + max_padding) & (~max_padding);
each_offset += padded_size;
v_offset.push_back(each_offset);
}
}

size_t MultiBufferWorkspaceTraits::GetSize() const
{
return (&v_offset.back())[-1] + v_size.back();
assert(v_offset.size() > 1);
// last location contains the sum of all padded sizes
return v_offset.back();
}

size_t MultiBufferWorkspaceTraits::GetOffset(size_t index) const
{
if(index >= v_offset.size())
MIOPEN_THROW("index given overflows");
// last location contains the sum of all padded sizes
MIOPEN_THROW_IF(index >= (v_offset.size() - 1), "index given overflows");
return v_offset[index];
}

Expand Down
10 changes: 3 additions & 7 deletions src/conv/invokers/impl_gemm_dynamic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include <miopen/handle.hpp>
#include <miopen/tensor_ops.hpp>
#include <miopen/solver/implicitgemm_util.hpp>
#include <miopen/util_sol.hpp>
#include <miopen/batched_transpose_sol.hpp>
#include <boost/any.hpp>

namespace miopen {
Expand Down Expand Up @@ -561,8 +561,6 @@ InvokerFactory MakeImplGemmDynamicForwardXdlopsNHWCInvokerFactory(
int trans_weight_idx = -1;
int trans_output_idx = -1;

constexpr size_t buf_alignment = 256;

if(is_nchw)
{
TransposeSolutionDefault2Nhwc trans_input(ctx, problem.GetInDataType(), n, c, hi, wi);
Expand Down Expand Up @@ -601,7 +599,7 @@ InvokerFactory MakeImplGemmDynamicForwardXdlopsNHWCInvokerFactory(
const size_t cast_size = need_cast ? miopen::GetTypeSize(miopenFloat) * n * k * ho * wo : 0;

MultiBufferWorkspaceTraits wt(
{trans_input_size, trans_weight_size, trans_output_size, cast_size}, buf_alignment);
{trans_input_size, trans_weight_size, trans_output_size, cast_size});

trans_input_offset = wt.GetOffset(0);
trans_weight_offset = wt.GetOffset(1);
Expand Down Expand Up @@ -879,8 +877,6 @@ InvokerFactory MakeImplGemmDynamicBackwardDataXdlopsNHWCInvokerFactory(
int trans_weight_idx = -1;
int trans_output_idx = -1;

constexpr size_t buf_alignment = 256;

if(is_nchw)
{
TransposeSolutionNhwc2Default trans_input(ctx, problem.GetOutDataType(), n, c, hi, wi);
Expand Down Expand Up @@ -919,7 +915,7 @@ InvokerFactory MakeImplGemmDynamicBackwardDataXdlopsNHWCInvokerFactory(
const size_t cast_size = need_cast ? miopen::GetTypeSize(miopenFloat) * n * c * hi * wi : 0;

MultiBufferWorkspaceTraits wt(
{trans_input_size, trans_weight_size, trans_output_size, cast_size}, buf_alignment);
{trans_input_size, trans_weight_size, trans_output_size, cast_size});

trans_input_offset = wt.GetOffset(0);
trans_weight_offset = wt.GetOffset(1);
Expand Down
61 changes: 61 additions & 0 deletions src/include/miopen/batched_transpose_sol.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#define GUARD_MIOPEN_BATCHED_TRANSPOSE_SOL_HPP

#include <miopen/miopen.h>
#include <miopen/errors.hpp>
#include <miopen/kernel_info.hpp>
#include <miopen/op_kernel_args.hpp>
#include <miopen/execution_context.hpp>
Expand Down Expand Up @@ -66,6 +67,66 @@ struct BatchedTransposeSolution
BatchedTransposeParam kernel_param_heuristic;
};

struct TransposeSolutionDefault2Nhwc : public BatchedTransposeSolution
{
TransposeSolutionDefault2Nhwc(const ExecutionContext& ctx_,
miopenDataType_t data_type_,
uint32_t n_,
uint32_t c_,
uint32_t h_,
uint32_t w_)
: BatchedTransposeSolution(ctx_, data_type_, n_, c_, h_ * w_)
{
MIOPEN_THROW_IF(size_t(h_ * w_) != (size_t(h_) * size_t(w_)), "integer overflow");
}
};

struct TransposeSolutionNhwc2Default : public BatchedTransposeSolution
{
TransposeSolutionNhwc2Default(const ExecutionContext& ctx_,
miopenDataType_t data_type_,
uint32_t n_,
uint32_t c_,
uint32_t h_,
uint32_t w_)
: BatchedTransposeSolution(ctx_, data_type_, n_, h_ * w_, c_)
{
MIOPEN_THROW_IF(size_t(h_ * w_) != (size_t(h_) * size_t(w_)), "integer overflow");
}
};

struct TransposeSolutionDefault2Ndhwc : public BatchedTransposeSolution
{
TransposeSolutionDefault2Ndhwc(const ExecutionContext& ctx_,
miopenDataType_t data_type_,
uint32_t n_,
uint32_t c_,
uint32_t d_,
uint32_t h_,
uint32_t w_)
: BatchedTransposeSolution(ctx_, data_type_, n_, c_, d_ * h_ * w_)
{
MIOPEN_THROW_IF(size_t(d_ * h_ * w_) != (size_t(d_) * size_t(h_) * size_t(w_)),
"integer overflow");
}
};

struct TransposeSolutionNdhwc2Default : public BatchedTransposeSolution
{
TransposeSolutionNdhwc2Default(const ExecutionContext& ctx_,
miopenDataType_t data_type_,
uint32_t n_,
uint32_t c_,
uint32_t d_,
uint32_t h_,
uint32_t w_)
: BatchedTransposeSolution(ctx_, data_type_, n_, d_ * h_ * w_, c_)
{
MIOPEN_THROW_IF(size_t(d_ * h_ * w_) != (size_t(d_) * size_t(h_) * size_t(w_)),
"integer overflow");
}
};

} // namespace miopen

#endif
8 changes: 5 additions & 3 deletions src/include/miopen/buffer_info.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -310,13 +310,15 @@ struct WinogradBufferInfo

struct MultiBufferWorkspaceTraits
{
MultiBufferWorkspaceTraits(std::initializer_list<size_t> v_size_, size_t alignment_);
MultiBufferWorkspaceTraits(std::initializer_list<size_t> v_size_);
size_t GetSize() const;
size_t GetOffset(size_t index) const;

std::vector<size_t> v_size;
std::vector<size_t> v_offset;
size_t alignment;
// aligning and padding to 256 byte boundary
constexpr static size_t max_padding = 255ull;
static_assert((max_padding & (max_padding + 1)) == 0,
"max_padding should be 1 less than a power of 2");
};

} // namespace miopen
Expand Down
2 changes: 2 additions & 0 deletions src/include/miopen/conv/tensors.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ struct ConvDataTensors
out(tensors.dx)
{
}

operator ConvTensors() const { return {inDesc, in, wDesc, w, outDesc, out}; }
};

struct ConvWrwTensors
Expand Down
12 changes: 12 additions & 0 deletions src/include/miopen/errors.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,18 @@ template <class... Params>
miopen::MIOpenThrow(__FILE__, __LINE__, __VA_ARGS__); \
} while(false)

#define MIOPEN_THROW_IF(condition, msg) \
amberhassaan marked this conversation as resolved.
Show resolved Hide resolved
do \
{ \
if((condition)) \
{ \
miopen::MIOpenThrow(__FILE__, \
__LINE__, \
miopenStatusInternalError, \
std::string(msg) + ", failed condition: " #condition); \
} \
} while(false)

#define MIOPEN_THROW_CL_STATUS(...) \
MIOPEN_THROW(miopenStatusUnknownError, miopen::OpenCLErrorMessage(__VA_ARGS__))
#define MIOPEN_THROW_HIP_STATUS(...) \
Expand Down
1 change: 1 addition & 0 deletions src/include/miopen/handle.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ struct MIOPEN_EXPORT Handle : miopenHandle
template <class Container>
Allocator::ManageDataPtr Write(const Container& c)
{
assert(!c.empty());
using type = typename Container::value_type;
auto buf = this->Create<type>(c.size());
return std::move(
Expand Down
24 changes: 24 additions & 0 deletions src/include/miopen/solver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4545,6 +4545,10 @@ struct ConvHipImplicitGemmGroupFwdXdlops final
return 0.02f;
};

size_t GetWorkspaceSize(const ExecutionContext&,
const miopen::conv::ProblemDescription&) const override;
bool MayNeedWorkspace() const override { return true; }

private:
template <typename DataType>
bool CheckCKApplicability(const miopen::conv::ProblemDescription&) const;
Expand Down Expand Up @@ -4617,6 +4621,10 @@ struct ConvHipImplicitGemm3DGroupFwdXdlops final
return 0.02f;
};

size_t GetWorkspaceSize(const ExecutionContext&,
const miopen::conv::ProblemDescription&) const override;
bool MayNeedWorkspace() const override { return true; }

private:
template <typename DataType>
bool CheckCKApplicability(const miopen::conv::ProblemDescription&) const;
Expand Down Expand Up @@ -4694,6 +4702,10 @@ struct ConvHipImplicitGemm3DGroupWrwXdlops final
return 0.02f;
};

size_t GetWorkspaceSize(const ExecutionContext&,
const miopen::conv::ProblemDescription&) const override;
bool MayNeedWorkspace() const override { return true; }

private:
template <typename DataType>
bool CheckCKApplicability(const miopen::conv::ProblemDescription&) const;
Expand Down Expand Up @@ -4771,6 +4783,10 @@ struct ConvHipImplicitGemm3DGroupBwdXdlops final
return 0.02f;
};

size_t GetWorkspaceSize(const ExecutionContext&,
const miopen::conv::ProblemDescription&) const override;
bool MayNeedWorkspace() const override { return true; }

private:
template <typename DataType>
bool CheckCKApplicability(const miopen::conv::ProblemDescription&) const;
Expand Down Expand Up @@ -4847,6 +4863,10 @@ struct ConvHipImplicitGemmGroupBwdXdlops final
return 0.02f;
};

size_t GetWorkspaceSize(const ExecutionContext&,
const miopen::conv::ProblemDescription&) const override;
bool MayNeedWorkspace() const override { return true; }

private:
template <typename DataType>
bool CheckCKApplicability(const miopen::conv::ProblemDescription&) const;
Expand Down Expand Up @@ -4923,6 +4943,10 @@ struct ConvHipImplicitGemmGroupWrwXdlops final
return 0.02f;
};

size_t GetWorkspaceSize(const ExecutionContext&,
const miopen::conv::ProblemDescription&) const override;
bool MayNeedWorkspace() const override { return true; }

private:
template <typename DataType>
bool CheckCKApplicability(const miopen::conv::ProblemDescription&) const;
Expand Down
Loading