Skip to content

Commit 88bbd80

Browse files
authored
[DFT] Fix deprecation warnings for oneMKL >= 2025.0 (#671)
Signed-off-by: Carsten Uphoff <carsten.uphoff@intel.com>
1 parent 0dd8313 commit 88bbd80

File tree

4 files changed

+88
-123
lines changed

4 files changed

+88
-123
lines changed

src/dft/backends/mklgpu/backward.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ inline auto compute_backward(dft::detail::descriptor<prec, dom>& desc, ArgTs&&..
5656
}
5757
auto handle = reinterpret_cast<handle_t*>(commit_handle->get_handle());
5858
auto mklgpu_desc = handle->second; // Second because backward DFT.
59-
int commit_status{ DFTI_UNCOMMITTED };
59+
auto commit_status = uncommitted;
6060
mklgpu_desc->get_value(oneapi::mkl::dft::config_param::COMMIT_STATUS, &commit_status);
61-
if (commit_status != DFTI_COMMITTED) {
61+
if (commit_status != committed) {
6262
throw math::invalid_argument("DFT", "compute_backward",
6363
"MKLGPU DFT descriptor was not successfully committed.");
6464
}

src/dft/backends/mklgpu/commit.cpp

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,20 @@
4040
#include <mkl_version.h>
4141
#if INTEL_MKL_VERSION < 20250000
4242
#include <mkl/dfti.hpp>
43+
namespace oneapi::math::dft::mklgpu::detail {
44+
template <typename D, typename C, typename V>
45+
void set_vector_value(D& desc, C p, V const& vec) {
46+
desc.set_value(p, vec.data());
47+
}
48+
} // namespace oneapi::math::dft::mklgpu::detail
4349
#else
4450
#include <mkl/dft.hpp>
51+
namespace oneapi::math::dft::mklgpu::detail {
52+
template <typename D, typename C, typename V>
53+
void set_vector_value(D& desc, C p, V const& vec) {
54+
desc.set_value(p, vec);
55+
}
56+
} // namespace oneapi::math::dft::mklgpu::detail
4557
#endif
4658

4759
// Intel oneMKL 2024.1 deprecates input/output strides.
@@ -159,14 +171,19 @@ class mklgpu_commit final : public dft::detail::commit_impl<prec, dom> {
159171
desc.set_value(backend_param::FORWARD_SCALE, config.fwd_scale);
160172
desc.set_value(backend_param::BACKWARD_SCALE, config.bwd_scale);
161173
desc.set_value(backend_param::NUMBER_OF_TRANSFORMS, config.number_of_transforms);
162-
desc.set_value(backend_param::COMPLEX_STORAGE,
163-
to_mklgpu<onemath_param::COMPLEX_STORAGE>(config.complex_storage));
174+
if (config.complex_storage != dft::detail::config_value::COMPLEX_COMPLEX) {
175+
throw math::unimplemented("dft/backends/mklgpu", "commit",
176+
"MKLGPU only supports complex-complex complex storage.");
177+
}
164178
if (config.real_storage != dft::detail::config_value::REAL_REAL) {
165-
throw math::invalid_argument("dft/backends/mklgpu", "commit",
166-
"MKLGPU only supports real-real real storage.");
179+
throw math::unimplemented("dft/backends/mklgpu", "commit",
180+
"MKLGPU only supports real-real real storage.");
181+
}
182+
if (config.conj_even_storage != dft::detail::config_value::COMPLEX_COMPLEX) {
183+
throw math::unimplemented(
184+
"dft/backends/mklgpu", "commit",
185+
"MKLGPU only supports complex-complex conjugate even storage.");
167186
}
168-
desc.set_value(backend_param::CONJUGATE_EVEN_STORAGE,
169-
to_mklgpu<onemath_param::CONJUGATE_EVEN_STORAGE>(config.conj_even_storage));
170187
desc.set_value(backend_param::PLACEMENT,
171188
to_mklgpu<onemath_param::PLACEMENT>(config.placement));
172189

@@ -175,30 +192,29 @@ class mklgpu_commit final : public dft::detail::commit_impl<prec, dom> {
175192
throw math::unimplemented("dft/backends/mklgpu", "commit",
176193
"MKLGPU does not support nonzero offsets.");
177194
}
178-
desc.set_value(backend_param::FWD_STRIDES, config.fwd_strides.data());
179-
desc.set_value(backend_param::BWD_STRIDES, config.bwd_strides.data());
195+
set_vector_value(desc, backend_param::FWD_STRIDES, config.fwd_strides);
196+
set_vector_value(desc, backend_param::BWD_STRIDES, config.bwd_strides);
180197
}
181198
else {
182199
if (config.input_strides[0] != 0 || config.output_strides[0] != 0) {
183200
throw math::unimplemented("dft/backends/mklgpu", "commit",
184201
"MKLGPU does not support nonzero offsets.");
185202
}
186203
if (assume_fwd_dft) {
187-
desc.set_value(backend_param::FWD_STRIDES, config.input_strides.data());
188-
desc.set_value(backend_param::BWD_STRIDES, config.output_strides.data());
204+
set_vector_value(desc, backend_param::FWD_STRIDES, config.input_strides);
205+
set_vector_value(desc, backend_param::BWD_STRIDES, config.output_strides);
189206
}
190207
else {
191-
desc.set_value(backend_param::FWD_STRIDES, config.output_strides.data());
192-
desc.set_value(backend_param::BWD_STRIDES, config.input_strides.data());
208+
set_vector_value(desc, backend_param::FWD_STRIDES, config.output_strides);
209+
set_vector_value(desc, backend_param::BWD_STRIDES, config.input_strides);
193210
}
194211
}
195212
desc.set_value(backend_param::FWD_DISTANCE, config.fwd_dist);
196213
desc.set_value(backend_param::BWD_DISTANCE, config.bwd_dist);
197214
if (config.workspace_placement == dft::detail::config_value::WORKSPACE_EXTERNAL) {
198215
// Setting WORKSPACE_INTERNAL (default) causes FFT_INVALID_DESCRIPTOR.
199-
desc.set_value(backend_param::WORKSPACE,
200-
to_mklgpu_config_value<onemath_param::WORKSPACE_PLACEMENT>(
201-
config.workspace_placement));
216+
desc.set_value(backend_param::WORKSPACE, to_mklgpu<onemath_param::WORKSPACE_PLACEMENT>(
217+
config.workspace_placement));
202218
}
203219
// Setting the ordering causes an FFT_INVALID_DESCRIPTOR. Check that default is used:
204220
if (config.ordering != dft::detail::config_value::ORDERED) {
@@ -214,11 +230,11 @@ class mklgpu_commit final : public dft::detail::commit_impl<prec, dom> {
214230

215231
// This is called by the workspace_helper, and is not part of the user API.
216232
virtual std::int64_t get_workspace_external_bytes_impl() override {
217-
std::size_t workspaceSizeFwd = 0, workspaceSizeBwd = 0;
233+
std::int64_t workspaceSizeFwd = 0, workspaceSizeBwd = 0;
218234
using backend_param = oneapi::mkl::dft::config_param;
219235
handle.first->get_value(backend_param::WORKSPACE_BYTES, &workspaceSizeFwd);
220236
handle.second->get_value(backend_param::WORKSPACE_BYTES, &workspaceSizeBwd);
221-
return static_cast<std::int64_t>(std::max(workspaceSizeFwd, workspaceSizeFwd));
237+
return std::max(workspaceSizeFwd, workspaceSizeFwd);
222238
}
223239
};
224240
} // namespace detail

src/dft/backends/mklgpu/forward.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ inline auto compute_forward(dft::detail::descriptor<prec, dom>& desc, ArgTs&&...
6262
}
6363
auto handle = reinterpret_cast<handle_t*>(commit_handle->get_handle());
6464
auto mklgpu_desc = handle->first; // First because forward DFT.
65-
int commit_status{ DFTI_UNCOMMITTED };
65+
auto commit_status = uncommitted;
6666
mklgpu_desc->get_value(oneapi::mkl::dft::config_param::COMMIT_STATUS, &commit_status);
67-
if (commit_status != DFTI_COMMITTED) {
67+
if (commit_status != committed) {
6868
throw math::invalid_argument("DFT", "compute_forward",
6969
"MKLGPU DFT descriptor was not successfully committed.");
7070
}

src/dft/backends/mklgpu/mklgpu_helpers.hpp

Lines changed: 51 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,16 @@
2727
#include <mkl_version.h>
2828
#if INTEL_MKL_VERSION < 20250000
2929
#include <mkl/dfti.hpp>
30+
namespace oneapi::math::dft::mklgpu::detail {
31+
constexpr int committed = DFTI_COMMITTED;
32+
constexpr int uncommitted = DFTI_UNCOMMITTED;
33+
} // namespace oneapi::math::dft::mklgpu::detail
3034
#else
3135
#include <mkl/dft.hpp>
36+
namespace oneapi::math::dft::mklgpu::detail {
37+
constexpr auto committed = oneapi::mkl::dft::config_value::COMMITTED;
38+
constexpr auto uncommitted = oneapi::mkl::dft::config_value::UNCOMMITTED;
39+
} // namespace oneapi::math::dft::mklgpu::detail
3240
#endif
3341

3442
namespace oneapi {
@@ -57,120 +65,61 @@ inline constexpr oneapi::mkl::dft::precision to_mklgpu(dft::detail::precision do
5765
}
5866
}
5967

60-
/// Convert a config_param to equivalent backend native value.
61-
inline constexpr oneapi::mkl::dft::config_param to_mklgpu(dft::detail::config_param param) {
62-
using iparam = dft::detail::config_param;
63-
using oparam = oneapi::mkl::dft::config_param;
64-
switch (param) {
65-
case iparam::FORWARD_DOMAIN: return oparam::FORWARD_DOMAIN;
66-
case iparam::DIMENSION: return oparam::DIMENSION;
67-
case iparam::LENGTHS: return oparam::LENGTHS;
68-
case iparam::PRECISION: return oparam::PRECISION;
69-
case iparam::FORWARD_SCALE: return oparam::FORWARD_SCALE;
70-
case iparam::NUMBER_OF_TRANSFORMS: return oparam::NUMBER_OF_TRANSFORMS;
71-
case iparam::COMPLEX_STORAGE: return oparam::COMPLEX_STORAGE;
72-
case iparam::CONJUGATE_EVEN_STORAGE: return oparam::CONJUGATE_EVEN_STORAGE;
73-
case iparam::FWD_DISTANCE: return oparam::FWD_DISTANCE;
74-
case iparam::BWD_DISTANCE: return oparam::BWD_DISTANCE;
75-
case iparam::WORKSPACE: return oparam::WORKSPACE;
76-
case iparam::PACKED_FORMAT: return oparam::PACKED_FORMAT;
77-
case iparam::WORKSPACE_PLACEMENT: return oparam::WORKSPACE; // Same as WORKSPACE
78-
case iparam::WORKSPACE_EXTERNAL_BYTES: return oparam::WORKSPACE_BYTES;
79-
case iparam::COMMIT_STATUS: return oparam::COMMIT_STATUS;
80-
default:
81-
throw math::invalid_argument("dft", "MKLGPU descriptor set_value()",
82-
"Invalid config param.");
83-
return static_cast<oparam>(0);
84-
}
85-
}
68+
template <dft::detail::config_param Param>
69+
struct to_mklgpu_impl;
8670

8771
/** Convert a config_value to the backend's native value. Throw on invalid input.
8872
* @tparam Param The config param the value is for.
8973
* @param value The config value to convert.
9074
**/
9175
template <dft::detail::config_param Param>
92-
inline constexpr int to_mklgpu(dft::detail::config_value value);
93-
94-
template <>
95-
inline constexpr int to_mklgpu<dft::detail::config_param::COMPLEX_STORAGE>(
96-
dft::detail::config_value value) {
97-
if (value == dft::detail::config_value::COMPLEX_COMPLEX) {
98-
return DFTI_COMPLEX_COMPLEX;
99-
}
100-
else {
101-
throw math::unimplemented("dft", "MKLGPU descriptor set_value()",
102-
"MKLGPU only supports complex-complex for complex storage.");
103-
return 0;
104-
}
105-
}
106-
107-
template <>
108-
inline constexpr int to_mklgpu<dft::detail::config_param::CONJUGATE_EVEN_STORAGE>(
109-
dft::detail::config_value value) {
110-
if (value == dft::detail::config_value::COMPLEX_COMPLEX) {
111-
return DFTI_COMPLEX_COMPLEX;
112-
}
113-
else {
114-
throw math::invalid_argument("dft", "MKLGPU descriptor set_value()",
115-
"Invalid config value for conjugate even storage.");
116-
return 0;
117-
}
76+
inline constexpr auto to_mklgpu(dft::detail::config_value value) {
77+
return to_mklgpu_impl<Param>{}(value);
11878
}
11979

80+
#if INTEL_MKL_VERSION < 20250000
12081
template <>
121-
inline constexpr int to_mklgpu<dft::detail::config_param::PLACEMENT>(
122-
dft::detail::config_value value) {
123-
if (value == dft::detail::config_value::INPLACE) {
124-
return DFTI_INPLACE;
125-
}
126-
else if (value == dft::detail::config_value::NOT_INPLACE) {
127-
return DFTI_NOT_INPLACE;
128-
}
129-
else {
130-
throw math::invalid_argument("dft", "MKLGPU descriptor set_value()",
131-
"Invalid config value for inplace.");
132-
return 0;
133-
}
134-
}
135-
82+
struct to_mklgpu_impl<dft::detail::config_param::PLACEMENT> {
83+
inline constexpr auto operator()(dft::detail::config_value value) -> int {
84+
switch (value) {
85+
case dft::detail::config_value::INPLACE: return DFTI_INPLACE;
86+
case dft::detail::config_value::NOT_INPLACE: return DFTI_NOT_INPLACE;
87+
default:
88+
throw math::invalid_argument("dft", "MKLGPU descriptor set_value()",
89+
"Invalid config value for inplace.");
90+
}
91+
}
92+
};
93+
#else
13694
template <>
137-
inline constexpr int to_mklgpu<dft::detail::config_param::PACKED_FORMAT>(
138-
dft::detail::config_value value) {
139-
if (value == dft::detail::config_value::CCE_FORMAT) {
140-
return DFTI_CCE_FORMAT;
141-
}
142-
else {
143-
throw math::invalid_argument("dft", "MKLGPU descriptor set_value()",
144-
"Invalid config value for packed format.");
145-
return 0;
146-
}
147-
}
148-
149-
/** Convert a config_value to the backend's native value. Throw on invalid input.
150-
* @tparam Param The config param the value is for.
151-
* @param value The config value to convert.
152-
**/
153-
template <dft::detail::config_param Param>
154-
inline constexpr oneapi::mkl::dft::config_value to_mklgpu_config_value(
155-
dft::detail::config_value value);
95+
struct to_mklgpu_impl<dft::detail::config_param::PLACEMENT> {
96+
inline constexpr auto operator()(dft::detail::config_value value) {
97+
switch (value) {
98+
case dft::detail::config_value::INPLACE: return oneapi::mkl::dft::config_value::INPLACE;
99+
case dft::detail::config_value::NOT_INPLACE:
100+
return oneapi::mkl::dft::config_value::NOT_INPLACE;
101+
default:
102+
throw math::invalid_argument("dft", "MKLGPU descriptor set_value()",
103+
"Invalid config value for inplace.");
104+
}
105+
}
106+
};
107+
#endif
156108

157109
template <>
158-
inline constexpr oneapi::mkl::dft::config_value
159-
to_mklgpu_config_value<dft::detail::config_param::WORKSPACE_PLACEMENT>(
160-
dft::detail::config_value value) {
161-
if (value == dft::detail::config_value::WORKSPACE_AUTOMATIC) {
162-
// NB: oneapi::mkl::dft::config_value != dft::detail::config_value
163-
return oneapi::mkl::dft::config_value::WORKSPACE_INTERNAL;
164-
}
165-
else if (value == dft::detail::config_value::WORKSPACE_EXTERNAL) {
166-
return oneapi::mkl::dft::config_value::WORKSPACE_EXTERNAL;
167-
}
168-
else {
169-
throw math::invalid_argument("dft", "MKLGPU descriptor set_value()",
170-
"Invalid config value for workspace placement.");
171-
return oneapi::mkl::dft::config_value::WORKSPACE_INTERNAL;
172-
}
173-
}
110+
struct to_mklgpu_impl<dft::detail::config_param::WORKSPACE_PLACEMENT> {
111+
inline constexpr auto operator()(dft::detail::config_value value) {
112+
switch (value) {
113+
case dft::detail::config_value::WORKSPACE_AUTOMATIC:
114+
return oneapi::mkl::dft::config_value::WORKSPACE_INTERNAL;
115+
case dft::detail::config_value::WORKSPACE_EXTERNAL:
116+
return oneapi::mkl::dft::config_value::WORKSPACE_EXTERNAL;
117+
default:
118+
throw math::invalid_argument("dft", "MKLGPU descriptor set_value()",
119+
"Invalid config value for inplace.");
120+
}
121+
}
122+
};
174123
} // namespace detail
175124
} // namespace mklgpu
176125
} // namespace dft

0 commit comments

Comments
 (0)