我需要确定 CUDA 和 CPU(i5 750)中(无符号)模乘的延迟和吞吐量。
对于 CPU,我找到了这篇文档,第 121 页,对于 Sandy Bridge,我不确定我应该参考哪一个,但是对于“MUL IMUL r32”,我得到 4 个周期的延迟和倒数吞吐量等于 2。然后“DIV r64”的延迟为 30-94 和 rec.thr。22-76。
最坏的情况是:
延迟 94+4
rec.thr。76+2
正确的?虽然我使用 OpenSSL 来执行它们,但我很确定在最低级别它们总是运行简单的模乘法。
关于 CUDA,目前我在 PTX 中执行模乘:乘以 2 32b 数,将结果保存在 64b 寄存器上,在 64b 寄存器上加载 32b 模,然后执行 64b 模。
如果你看这里,第 76 页,他们说 Fermi 2.x 上 32b 整数乘法的吞吐量是 16(每个 MP 的每个时钟周期)。关于模数,他们只是说:“计算能力 2.x 的设备上的指令少于 20 条”......
这到底是什么意思?最坏的情况是每模每 MP 延迟 20 个周期?和吞吐量?每个 MP 有多少模数?
编辑:
如果我有一个扭曲,其中只有扭曲的前 16 个线程必须执行 32b 乘法(每个 MP 每个周期 16 个)。GPU 会忙一两个周期,尽管后半部分什么都不做?