c++ sycl矢量类型未标记为设备可复制

euoag5mw  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(155)

这一行:

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;
6jygbczu

6jygbczu1#

一个std::vector(对于任何T)都不是设备可复制的,因为它是用户提供的(相对于隐式定义)。
请找到以下链接:https://registry.khronos.org/SYCL/specs/sycl-2020/html/sycl-2020.html#sec::device.copyable

相关问题