Refinement: the engine polls for its evaluations and the pair count comes back pinned; the slots beyond one per card go to the cards the ladder's long trials leave free
The GPU engine's waits on its stream (every evaluation, the refits' transforms) and the model density's wait for the (brick, atom) pair count were blocking event and stream synchronisations; where a weight trial has a card to itself, as on a box with a card per trial, the wake-up of the sleeping thread is on the critical path of every evaluation. Both now poll, and the pair count and overflow flag come back into pinned memory instead of a pageable int (a pageable copy back is staged and blocks the host for the whole stream). OwnSlotDevices places the slots beyond one per card on the cards the ladder's long trials (those refining B) leave free, so that on four cards the three B rungs have a card each and the three B-held rungs share the fourth, instead of two cards each carrying a B rung beside a B-held one. The outcome does not depend on the placement. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu
This commit is contained in:
1 parent
68e567bd02
commit
3189f71e8f
4 files changed
+32
-10
No files matched your search
@@ -87,6 +87,7 @@ private:
|
||||
CudaDevicePtr<int> box;
|
||||
CudaDevicePtr<int> overflow; // an atom's box over MAX_BRICKS_PER_AXIS
|
||||
CudaDevicePtr<int> count, offset, key, value, key_sorted, value_sorted, brick_start, brick_end;
|
||||
CudaHostPtr<int> host_count; // the pair count and the overflow flag Compute() reads back, pinned
|
||||
CudaDevicePtr<char> cub_temp;
|
||||
size_t cub_bytes = 0;
|
||||
};
|
||||
Reference in new issue
Block a user