On a multi-GPU host the structure stage ran essentially on one card: the rotation
function's launches all went to the search's card, and the rigid-body engines of
model validation and MR were admitted only within half of that one card's budget,
although RigidBodyGPUPool already placed engines on other cards. On a 4x T4 server
4nwv's MR rotation function took 75.8 s on one card, validation queued its 10 fits
on one engine and MR's rescoring and null got one engine.
- PlanModelValidationGPU / PlanMolecularReplacementGPU: this card is planned
exactly as on a machine with it alone (GPU-vs-CPU placement unchanged: 80% of the
total, less what is resident). The rigid-body engines it has no room for go on the
other cards in turn, each against its own budget (80% of its total, less the
resident bytes, counted on every card) within half of it. MR also puts a copy of
the molecular transform on each other card within half of its budget.
- RigidBodyGPUPool::Reserve takes per-card engine counts.
- Validation forwards the most it holds on any card as gpu_bytes to a validation
beside, and may run one beside only where twice that fits every card's budget.
- MR splits every rotation and translation function into contiguous slices of
the orientation list over the cards holding a transform copy (and room for the
call's buffers), one thread per card, gathered back in order. Each orientation
is scored by itself (one block / one map), nothing is summed across
orientations, so N cards give the bytes of one.
- ScoreEngines keeps a room per card; score engines always go on the search's
own card; function buffers are held on the card they run on.
Byte-identical at N=1 (workstation, one RTX 5080): timing benchmark (myob, cytc,
4nwv) and 4nwv, 8tyy, 6oel, 3inp with --model give the same p.hkl, MTZ data,
p_model.pdb, maps and report against rc176. New tests: per-card plans on four
15.6 GB cards (validation 1/3/3/3 engines, MR T+1/T+2/T+2/T+2), and the split
driven over 1-4 virtual cards on one device, bitwise equal to one card.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4