【问题标题】:OpenCL - how to spawn a separate math process on each coreOpenCL - 如何在每个核心上产生一个单独的数学进程
【发布时间】:2012-04-19 15:49:54
【问题描述】:

我是 OpenCL 的新手,我正在编写一个 RSA 分解应用程序。理想情况下,该应用程序应该在 NV 和 AMD GPU 目标上运行,但我没有找到一种简单的方法来确定每个 GPU 上的内核/流 proc 的总数。

是否有一种简单的方法可以确定任何硬件平台上总共有多少个核心/流 proc,然后在每个可用核心上生成一个分解线程?目标 RSA 模数将在共享内存中,并且每个因式分解线程对模数使用 Rho 因式分解攻击。

另外,是否知道 OpenCL 是否支持类似于 GNU MP 的多精度数学库来存储大型半素数?

提前致谢

【问题讨论】:

  • 我建议您将第二个问题移到一个单独的问题中。

标签: opencl gpu


【解决方案1】:

为了补充 Roger 的答案,您希望拥有比内核更多的线程的原因是因为 GPU 实现了非常有效的 context switching 以隐藏 memory latency。一般来说,就处理器接收请求数据所花费的时间而言,每次内存访问都是一项非常昂贵的操作。但是如果一个线程正在等待内存事务,它可以被“暂停”,同时另一个线程可以被激活来进行计算(或其他内存访问)。因此,如果您有足够多的线程,您可以从根本上隐藏内存访问延迟,并且您的软件可以在硬件的全部计算能力下运行(否则很少会发生这种情况)。

我会在对 Roger 帖子的评论中对此进行评论,但它的大小超出了限制。

【讨论】:

    【解决方案2】:

    在 GPU 上,您不会像在 CPU 上那样为每个内核生成一个线程。相反,您希望启动的线程数多于内核数。我不会担心给定目标平台上可用的内核的确切数量。相反,不要关注最适合您的问题的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2011-08-01
      相关资源
      最近更新 更多