2

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

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

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

提前致谢

4

2 回答 2

2

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

我会把它放在对罗杰帖子的评论中,但它的大小超出了限制。

于 2012-04-06T03:38:50.660 回答
2

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

于 2012-04-05T23:04:10.540 回答