Exophase said:The documents do not say outright, however if you look at the timing charts for NEON instructions you will see that the results are written when the relevant execution stage is ready, which varies per instruction. So the latency should only be the difference between the result stage for the register you want and the source stage for the instruction where you want to use it. For floating point operations that's usually N5 (as opposed to N6) and for integer it's quite sooner.
I imagine that the reason why VFP on NEON takes the full pipeline latency (probably always writes back at N6 and probably always reads at N1 if not sooner) is because of the conversion boilerplate going between the two and not because of general limitations in the NEON pipeline. The NEON pipe might not be capable of writing partial results (scalar instead of vector) or to non-aligned regions, which would require VFP operations to go to a temporary register so that the operation doesn't damage the register file.
you're right, after revisiting of the specs it seems the full NFP pipeline ride is a special service to VFP clients. i stand corrected.
Exophase said:Personally, I think Laurent has been greatly exaggerating the cost here. A latency of 7 cycles instead of 6 cycles is not exactly earth shattering, or at least it's nothing compared to going to that from a throughput of 8-9+ cycles. The VFP11 that you have much praise for also only saved one latency cycle by forwarding. In fact, forwarding makes the latency for the main arithmetic instructions on VFP11 exactly the same as it is in runfast mode on NEON. 7-8 cycles is hardly anything praiseworthy.
unless i'm reading something wrong, the difference between scalar VFP11 and VFPv3_lite + NFP is quite seriously not in favor of the latter. forget latency differencies between the two (yes, they're comparable) - it's the throughput that kills the scalar fp on the A8: the documents clearly state 'execution time' for all fastrun VFPv3 delegations. no pipelining whatsoever - just an execution speed-up. in comparison, VFP11 murders them with its fully-pipelined design across its three largely-independent pipelines.
now, the situation entirely reverses when it comes to vector performance - neon clearly has to upper hand there, if nothing else for its modeless vector execution - VFP11 suffers badly there from serialization at mode changes, as was already noted in this thread, and then some (vector divisions stall bath the DS and FMAC pipes, etc).
i, too, don't think q2 is a good fpu benchmark, not in its software-rasterized form anyway. there the integer rasterization should be the single most tight spot in the rendition loop. unless i'm thinking of Q1 - it's been years since i looked at them closely.Exophase said:I think that a proper benchmark for runfast vs IEEE VFP needs to be done. Bytemark results are not valid because they use double precision. All we've seen is the improvement in Quake 2, which may not be as floating point dependent as we've been led to believe (or else I don't think Wiz would be running it at even the speed it does).
Last edited by a moderator: