@[email protected] I mean, "A wants to transfer from B to itself" is just - I hate how I don't know any term for this other than "bus mastering". I need to find better language for it.
Posts
-
@lofty Hmm. -
does webgpu support spirv yet or are they still fucking around with the thing that is basically but not in actuality spirv@[email protected] I think the not-spirv thing was because Apple >.>
-
@lofty huh, yeah that sounds like a pain to deal with. I've not observed that myself, but aside from high EBR utilization nextpnr tells me I'm using ~0% of the logic tiles so I guess I'm not giving it much of a workout.@[email protected] it's a little funny to think about how nextpnr kinda differs compared to the classical academic flow.
classically, LUTs and flops get packed into what the ECP5 calls slices, and these slices get placed in physical locations on the FPGA ("bels").
nextpnr used to do that for ECP5 (if you feel like some nextpnr archaeology I can point you to what you need to do to build that), but at some amount of my nagging, Myrtle changed the ECP5 representation to make nextpnr directly place LUTs and flops into physical locations, without a packing pass. -
@lofty I would love that, though I also don't want to impose!@[email protected] determinism is useful for debugging for hopefully obvious reasons; but it's also worth pointing out that the simulated annealing refinement pass is still inherently based on randomness.
-
@lofty I would love that, though I also don't want to impose!@[email protected] pretty much exactly that, yes.
-
@lofty I would love that, though I also don't want to impose!it's tentatively the future
these days it feels like it's "the future" much like btrfs is "the future"...
grumbling aside: the default placer for ECP5 is HeAP (the reference paper is "analytical placement for heterogeneous FPGAs"), and HeAP works by treating the problem of placing cells together as a bunch of quadratic equations representing wire length. these can be mathematically minimised very efficiently, but the result you get has a bunch of overlapping cells. therefore the result is fed into a pass which snaps cells to their nearest legal position. these positions are then fed back into the quadratics and minimised again, and then the output goes through legalisation, and it all loops until the quadratic output and the legalised output are Close Enough.
static - multi-electrostatic placement - is similar at the high level: mathematical formula to be solved. however the formula this time is much more complex. it's called electrostatic placement because the formula used models cells as electrons with charges that repel each other; this means the explicit legalisation step in HeAP which took place outside the equations can be partially modelled within static. that means there are only two direct legalisation runs: one for non-logic stuff like RAM blocks and DSPs, usually near the start, and one for logic right at the very end.
there are a lot of challenges that mean that static might not take over heap in practice. with heap, after every iteration you have exact cell locations, so you can more accurately guesstimate and factor in timing; that's harder to do with static, where everything is fuzzier. also, calculating derivatives in heap is easy (they're linear equations), while calculating derivatives in static is monstrously hard, and so static has been plagued with issues - the math is difficult for both myself and Myrtle.
but, well, I assume you've tried--placer sa
, and anything is better than that. -
The obvious choice for ActivityPub’s birthday would be the 23rd of January 2018 - the day it was annointed as a W3C recommendation.@[email protected] huh, I share a birthday with ActivityPub.