【问题标题】:x64 vs x86 for CUDACUDA 的 x64 与 x86
【发布时间】:2016-02-12 14:46:47
【问题描述】:

在这个线程x64 allows less threads per block than Win32? 中有一个关于寄存器用完的问题。我的印象是 Nvidia 在 CUDA 7.5 及更高版本中已经放弃了对 x86 的支持。这可能是一个愚蠢的问题,但这是否意味着所有指针都需要两个寄存器?可能更少的线程/块将是未来的工作方式?

【问题讨论】:

    标签: c++ cuda emgucv managed-cuda


    【解决方案1】:

    这可能是一个愚蠢的问题,但这是否意味着所有指针都需要两个寄存器?

    是的。 x64 模式下的所有指针都需要 2 个(32 位)寄存器进行存储。

    那么可能更少的线程/块将是未来的工作方式?

    当然,可以启动的块数应该没有影响。关于线程,是的,可能会对每个块的线程产生影响(因为每个块启动的线程乘积每个线程的寄存器必须低于机器限制),但正如我在回答您链接的问题时所说,通常可以使用那里提到的几种方法之一来解决对线程的限制。许多内核不会受到影响,因为它们没有“达到极限”。对于那些“达到极限”的内核,有一些成熟的技术可以减轻这种影响,并允许您在每个块中运行所需数量的线程,最多 1024 个。

    最终这意味着出现的问题不是功能问题,而是性能优化问题之一,这个问题将一直存在。

    【讨论】:

    • 在 64 位平台上,CUDA 使用 64 位通用指针。在有限的情况下,编译器可以确定指针始终特定于已知小于 4 GB 的特定内存空间(特别是共享内存),并且可以通过使用 32 位内存进行优化。空间特定,指针代替。这种优化是否在实践中发生,我不确定;我隐约记得见过这样的例子。唯一确定的方法是检查机器代码 (SASS)。
    猜你喜欢
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2012-05-06
    • 2019-06-18
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    相关资源
    最近更新 更多