我在SYCL中编写了一个矩阵乘法核,它是基于将子矩阵平铺到本地缓存的.我通过平铺(瓷砖大小为16x16)和不使用平铺(朴素)方法获得的性能提升高达2倍。
对于较低的瓷砖尺寸,我接近朴素的速度,这是预料中的。对于任何大于16的瓷砖大小(我会选择2的幂,因为我的矩阵大小也是如此),内核会抛出一个sycl异常。
我怀疑这是因为GPU无法在其本地缓存中容纳更大的块大小。
问题:
我试过检查ark.intel.com,但没有列出GPU本地缓存大小。当前设置: i7-8665U与Intel UHD 620
如果你想看我的内核代码,请添加评论,我会添加。我目前不觉得有必要显示内核代码和臃肿的帖子。
发布于 2020-10-23 11:20:31
@Artyom解释了在GPU上实现矩阵乘法时需要处理的问题。
关于这些问题,以下是SYCL中显示我正在寻找的内容的片段:
// Create a queue with device
default_selector d_selector;
queue q(d_selector, dpc_common::exception_handler);
std::cout << "Enumerated Device: "
<< q.get_device().get_info<info::device::name>() << "\n";
auto wgroup_size = q.get_device().get_info<info::device::max_work_group_size>();
auto local_mem_size = q.get_device().get_info<info::device::local_mem_size>();
auto global_mem_size = q.get_device().get_info<info::device::global_mem_size>();
std::cout << "Maximum workgroup size\t:" << wgroup_size << "\n"
<< "Global Memory Size\t:" << global_mem_size / 1024 / 1024 << " MB\n"
<< "Local Memory Size\t:" << local_mem_size / 1024 << " KB\n";这表明:
Enumerated Device: Intel(R) Gen9
Maximum workgroup size :256
Global Memory Size :3199 MB
Local Memory Size :64 KBhttps://stackoverflow.com/questions/64466437
复制相似问题