这一行:
static_assert(
sycl::is_device_copyable<sycl::float3>::value,
"The vector types should be copyable."
);
对于sycl中的所有向量类型,由于静态Assert错误而失败。这是使用:
dpcpp -v
Intel(R) oneAPI DPC++/C++ Compiler 2022.1.0 (2022.1.0.20220316)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /opt/intel/oneapi/compiler/2022.1.0/linux/bin-llvm
命令行使用-fsycl
。sycl::vec
矢量类型是否应标记为设备可复制?
我正在编写USM管理器结构,因此我的解决方法是仅用途:
template <typename... Types>
constexpr bool are_all_types_device_copyable()
{
return (
(sycl::is_device_copyable<Types>::value ||
is_sycl_vec_v<Types>)&&...
);
}
其中is_sycl_vec
为:
template <typename>
struct is_sycl_vec : public std::false_type
{
};
template <typename dataT, int numElements>
struct is_sycl_vec<sycl::vec<dataT, numElements>> : public std::true_type
{
};
template <typename T>
constexpr bool is_sycl_vec_v = is_sycl_vec<T>::value;
1条答案
按热度按时间6jygbczu1#
一个std::vector(对于任何T)都不是设备可复制的,因为它是用户提供的(相对于隐式定义)。
请找到以下链接:https://registry.khronos.org/SYCL/specs/sycl-2020/html/sycl-2020.html#sec::device.copyable