标签: hip

理解 AMD GPU 中的 oneAPI 和 SYCL

我是一名 GPGPU 开发人员,我使用 CUDA 完成了所有工作。最近,我为我的家庭设置购买了 AMD GPU,并且我一直在阅读有关 SYCL 和 oneAPI 的文章,但我不确定我是否理解它们是什么,它们是如何互补的。如果我理解正确的话,SYCL 是 Khronos 开发的一个标准,它允许在 C++ 中创建并行软件。它需要一个由 SYCL 实现提供的自定义工具链,并且存在多个实现。

另一方面,oneAPI 是 SYCL 的一个实现,带有一些额外的扩展(将来可能会添加到 SYCL 标准中)和一些带有典型并行库的库,对吗?

因为我有一个AMD GPU,我想用它来做一些GPGPU,但生态系统有点吓人。我们有台面驱动程序、AMD 驱动程序、不同的 openCL 实现、HIP ……这一切是如何组合在一起的?

amd-gpu hip sycl intel-oneapi

10
推荐指数
1
解决办法
1781
查看次数

GPU 编程,CUDA 还是 OpenCL 还是?

GPU 编程的最佳方法是什么?

我知道:

  • CUDA 非常好,有很多开发人员支持和非常好的 zo 调试,但仅限于 NVidia 硬件
  • OpenCL 非常灵活,可以在 NVidia、AMD 和 Intel 硬件上运行,可以在加速器、GPU 和 CPU 上运行,但据我所知,NVidia 不再支持。
  • Coriander ( https://github.com/hughperkins/coriander ) 将 CUDA 转换为 OpenCL
  • HIP https://github.com/ROCm-Developer-Tools/HIP由 AMD 制作,可以以转换为 AMD 和 NVidia CUDA 的方式编写。它还可以将 CUDA 转换为 HIP。

OpenCL 是我更喜欢的方式,我希望在硬件支持方面非常灵活。但如果不再得到 NVidia 的支持,那就是淘汰赛了。对于我来说,HIP 对于不同的发布文件来说是最好的。但英特尔即将推出的硬件的支持情况如何呢?

还有其他选择吗?对我来说重要的是许多受支持的硬件,长期支持,以便在几年内也可以编译并独立制造。附加:应该能够使用obe以上的编译器,在Linux和Windows上都支持。

cpu cuda gpu opencl hip

7
推荐指数
1
解决办法
1万
查看次数

Haskell HIP:将滤镜应用于图像

我正在尝试使用 Haskell 图像处理包HIP向图像添加过滤器,我能够使用ByteString包读取图像并使用 HIP 将图像转换为类型Image VS YCbCr Word8。现在,我如何从 转换Image VS YCbCr Word8Border (Pixel cs e)or Pixel cs e?我仍在学习 Haskell 所以请保持简单。请参阅下面的代码:

addFilterJpg :: FilePath -> IO ()
addFilterJpg fc = do
    case validPath fc of 
        Left err -> putStrLn err
        Right img -> do
            case readImage img of
                Left err -> putStrLn err
                Right img -> do
                  -- convert img::(Image VS YCbCr Word8) to Border (Pixel cs e)
                  -- apply …
Run Code Online (Sandbox Code Playgroud)

haskell image-processing hip

2
推荐指数
1
解决办法
209
查看次数

了解 C++ 函数指针在 HIP 中按引用传递

HIP是与NVIDIA的CUDA对应的AMD GPU编程模型。我有一个来自 HIP 源代码的代码片段,我无法完全理解。提醒一下,理解以下代码snippnet不需要任何HIP背景知识,但更多的是C++模板/函数指针的问题。

typedef int hipLaunchParm;    
template <typename... Args, typename F = void (*)(hipLaunchParm, Args...)>
inline void hipLaunchKernel(F&& kernel, const dim3& numBlocks, const dim3& dimBlocks,
                        std::uint32_t groupMemBytes, hipStream_t stream, Args... args) 
{
    hipLaunchKernelGGL(kernel, numBlocks, dimBlocks, groupMemBytes, stream, 
        hipLaunchParm{}, std::move(args)...);
}
Run Code Online (Sandbox Code Playgroud)

我对以下内容感到困惑:

  • 如果 F 是一个函数指针,为什么它需要在参数中被双重引用?
  • 第一个模板参数typename... Args有什么用?
  • hipLaunchParm只是integer的别名,但是在参数中调用时{}是什么意思呢?

c++ templates function-pointers hip

0
推荐指数
1
解决办法
192
查看次数

Haskell、HIP 库、解码函数

请帮助我了解如何使用HIP 库中的函数decode

class ImageFormat format => Readable img format where
  decode :: format -> B.ByteString -> Either String img
Run Code Online (Sandbox Code Playgroud)

我不明白第一个参数应该是什么?例子会有所帮助。

haskell hip

-1
推荐指数
1
解决办法
69
查看次数