Tag: 高性能

为什么循环指令很慢? 英特尔能不能有效地实现它?

loop递减ecx / rcx,然后在非零时跳转 。 速度很慢,但英特尔不能以低廉的速度让它变得更快? 一个dec和分支uop已经是可能的了(唯一的区别是设置标志)。 从Agner Fog的指令表中 loop使用各种微架构: K8 / K10:7米 推土机家族/ Ryzen:1 m-op(与macros电子testing分支相同的成本,或jecxz ) P4:4个jecxz (与jecxz相同) P6(PII / PIII):8个 Pentium M,Core2:11 uops Nehalem:6个uops。 (11 loope / loopne ) SnB系列:7个。 (11个为loope / loopne )。 对于jecxz只有2个jecxz Silvermont:7个uops AMD捷豹(低功耗):8个微处理器,5c吞吐量 通过Nano3000:2微软 难道解码器只是解码像lea rcx, [rcx-1] / jrcxz ? 那将是3个微笑。 至less在没有地址大小的前缀的情况下是这样,否则如果跳转被使用,则必须使用ecx并截断RIP到EIP 。 也许地址大小控制的减less宽度的奇数select解释了许多微软。 或者更好,只是将它解码为一个融合的十进制分支,不设置标志? jnz上的dec ecx / jnz解码为单个uop(设置标志)。 我知道真正的代码并没有使用它(因为它至lessP5或者其他东西已经很慢了),但是AMD决定让推土机变得很快是值得的。 […]

我怎样才能确定一个二维点是否在一个多边形?

我正尝试在多边形algorithm中创build一个快速的 2D点,用于命中testing(例如Polygon.contains(p:Point) )。 有效的技术build议,将不胜感激。