【问题标题】:Max size of thread local memory of a GPU thread (C++ AMP)GPU线程的线程本地内存的最大大小(C++ AMP)
【发布时间】:2015-01-11 21:00:58
【问题描述】:

我想在每个线程上创建一个 100 的整数数组和另一个约 10-100 个整数(因用户输入而异)的数组。我将在一个线程上多次重用array_views 中的数据,因此我想将array_views 的内容复制为本地数据以增加内存访问时间。 (每个线程负责它“自己的”array_view 的 100 个元素,使用我的算法不可能为每个元素创建一个线程)如果不可能,平铺静态内存也可以解决问题,但是本地线程会会更好。

我的问题是,我可以在线程上分配多少字节作为局部变量/数组(适用于大多数 GPU 的最小数量)? 此外,我可以使用哪个软件查询我的 GPU 的功能(每个线程的寄存器数、每个图块的静态内存大小等)。CUDA SDK 有一个实用程序应用程序可以查询 GPU 的功能,但我有一个 AMD一,Radeon HD 5770,如果我是正确的,它将无法与我的 GPU 一起使用。

【问题讨论】:

    标签: gpu c++-amp


    【解决方案1】:

    Opencl api 可以查询 gpu 或 cpu 设备以获取 opencl 程序的功能,但对于任何本机优化的结构,结果应该相似。但是如果你的 C++ AMP 基于 HLSL 或类似的,你可能无法使用 LDS。

    每个计算单元 32kB LDS 和 24kB 常量缓存意味着当您选择每个计算单元 32 个线程时,每个线程可以有 1kB LDS + 0.75kB。但是驱动程序可能会将其中一些用于其他目的,您始终可以测试不同的尺寸。看看恒定的缓存带宽,它的性能是 LDS bw 的 2 倍。

    如果您在不与其他线程共享(或没有任何同步)的情况下使用这些数组,则可以使用每个计算单元 256kB 的寄存器空间(每个线程 8kB(每个 cu 设置 32 个线程)),带宽是 LDS 的六倍.但总有一些限制,所以实际可用价值可能是这个的一半。

    取自附录 - d of http://developer.amd.com/wordpress/media/2013/07/AMD_Accelerated_Parallel_Processing_OpenCL_Programming_Guide-rev-2.7.pdf

    【讨论】:

    • 非常感谢!这正是我一直在寻找的。是的,我不与其他线程共享数据,也不使用任何同步。
    • 你知道你的 C++ AMP 是基于什么的吗? HLSL语言还是其他?这可能在某些地方有一些瓶颈。
    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2017-12-11
    • 2011-07-27
    • 2015-07-10
    • 2019-12-09
    • 1970-01-01
    相关资源
    最近更新 更多