GPU memory: beam-centre point transforms in two spectra and one work area; a probe on a small card indexes with one FFT indexer
- BeamCenterFFTGPU's point surfaces: each spectrum product goes in the place of a spectrum that is finished with (a.a where m's spectrum goes before it is there, a.m and m.m and a^2.m in a's), so the third spectrum buffer goes, and the forward and inverse plans share one work area - they never run at once. The same transforms and products in the same order, so the surfaces are unchanged. 2.6 -> 2.05 GB on a 16 Mpx detector, the largest single holder at the first pass's peak; DeviceMemoryNeeded counts it so. - Rugnux::FirstPassIndexerThreads: a probe pass beside the main line on a card below the take-turns size (gpu_takes_turns(), 12 GB on the first card's total) builds one FFT indexer for its pools instead of two, and indexes its two schemes one after the other. Which indexer indexes a frame does not change what it finds. Measured with the RTX 5080's total read as 8.55 GB: first-pass peak 6.50 -> 5.92 GB (8qaw), 5.76 -> 4.84 GB (4nwv) together with the batched FFT indexer; the speculative probe after the output 6.30 -> 4.35 GB (8qaw). Output unchanged: p.hkl byte-identical on cytc_x10sa, myob_x10sa, 4nwv and 8qaw on this card and on the 8.55 GB simulation; run times unchanged within noise. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
39bba12587
commit
bf8f0a482d
7 files changed
+49
-27
No files matched your search
@@ -56,6 +56,10 @@ namespace {
|
||||
}
|
||||
}
|
||||
|
||||
bool gpu_takes_turns() {
|
||||
return take_turns();
|
||||
}
|
||||
|
||||
GPUWorkBeside::GPUWorkBeside(bool after_merges) {
|
||||
std::unique_lock lock(gpu_work_m);
|
||||
if (take_turns())
|
||||
|
||||
Reference in new issue
Block a user