#[repr(C, align(256))]pub struct GpuPartialOrderTrace {Show 13 fields
pub trace_id: u64,
pub case_id: u64,
pub event_count: u32,
pub activity_count: u32,
pub start_time: HybridTimestamp,
pub end_time: HybridTimestamp,
pub max_width: u32,
pub flags: u32,
pub precedence_matrix: [u16; 16],
pub activity_ids: [u32; 16],
pub activity_start_secs: [u16; 16],
pub activity_duration_secs: [u16; 16],
pub _reserved: [u8; 32],
}Expand description
GPU-compatible partial order trace (256 bytes).
Contains a 16x16 bit precedence matrix representing ordering relationships.
Fields§
§trace_id: u64Trace identifier.
case_id: u64Case identifier.
event_count: u32Number of events in the trace.
activity_count: u32Number of unique activities.
start_time: HybridTimestampStart timestamp.
end_time: HybridTimestampEnd timestamp.
max_width: u32Maximum concurrency level (width).
flags: u32Flags: has_cycles, is_total_order, has_transitive_closure.
precedence_matrix: [u16; 16]Precedence matrix (16x16 bits = 32 bytes). Row i bit j set means activity i precedes activity j.
activity_ids: [u32; 16]Activity ID mapping (index -> activity ID), up to 16 activities.
activity_start_secs: [u16; 16]Activity start times (relative to trace start, in SECONDS), up to 16 activities. Using seconds instead of ms to avoid u16 overflow for long-running activities.
activity_duration_secs: [u16; 16]Activity durations (in SECONDS), up to 16 activities. Using seconds instead of ms to avoid u16 overflow for long-running activities.
_reserved: [u8; 32]Reserved padding to reach 256 bytes.
Implementations§
Source§impl GpuPartialOrderTrace
impl GpuPartialOrderTrace
Sourcepub fn set_precedence(&mut self, i: usize, j: usize)
pub fn set_precedence(&mut self, i: usize, j: usize)
Set precedence: i precedes j.
Sourcepub fn is_concurrent(&self, i: usize, j: usize) -> bool
pub fn is_concurrent(&self, i: usize, j: usize) -> bool
Check if i and j are concurrent (neither precedes the other).
Sourcepub fn add_activity(&mut self, activity_id: ActivityId) -> Option<usize>
pub fn add_activity(&mut self, activity_id: ActivityId) -> Option<usize>
Add an activity and return its index.
Sourcepub fn get_activity_index(&self, activity_id: ActivityId) -> Option<usize>
pub fn get_activity_index(&self, activity_id: ActivityId) -> Option<usize>
Get activity index by ID.
Sourcepub fn compute_transitive_closure(&mut self)
pub fn compute_transitive_closure(&mut self)
Compute transitive closure using Floyd-Warshall.
Sourcepub fn has_cycles(&self) -> bool
pub fn has_cycles(&self) -> bool
Check if has cycles (after transitive closure, if i precedes i).
Sourcepub fn is_total_order(&self) -> bool
pub fn is_total_order(&self) -> bool
Check if this is a total order (all pairs are ordered).
Sourcepub fn compute_width(&mut self) -> u32
pub fn compute_width(&mut self) -> u32
Compute width (maximum antichain size = maximum concurrency).
Sourcepub fn concurrent_with(&self, activity_idx: usize) -> Vec<usize>
pub fn concurrent_with(&self, activity_idx: usize) -> Vec<usize>
Get concurrent activities with given activity.
Trait Implementations§
Source§impl Archive for GpuPartialOrderTrace
impl Archive for GpuPartialOrderTrace
Source§type Archived = ArchivedGpuPartialOrderTrace
type Archived = ArchivedGpuPartialOrderTrace
Source§type Resolver = GpuPartialOrderTraceResolver
type Resolver = GpuPartialOrderTraceResolver
Source§impl Clone for GpuPartialOrderTrace
impl Clone for GpuPartialOrderTrace
Source§fn clone(&self) -> GpuPartialOrderTrace
fn clone(&self) -> GpuPartialOrderTrace
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for GpuPartialOrderTrace
impl Debug for GpuPartialOrderTrace
Source§impl Default for GpuPartialOrderTrace
impl Default for GpuPartialOrderTrace
Source§impl<__D: Fallible + ?Sized> Deserialize<GpuPartialOrderTrace, __D> for Archived<GpuPartialOrderTrace>where
u64: Archive,
Archived<u64>: Deserialize<u64, __D>,
u32: Archive,
Archived<u32>: Deserialize<u32, __D>,
HybridTimestamp: Archive,
Archived<HybridTimestamp>: Deserialize<HybridTimestamp, __D>,
[u16; 16]: Archive,
Archived<[u16; 16]>: Deserialize<[u16; 16], __D>,
[u32; 16]: Archive,
Archived<[u32; 16]>: Deserialize<[u32; 16], __D>,
[u8; 32]: Archive,
Archived<[u8; 32]>: Deserialize<[u8; 32], __D>,
impl<__D: Fallible + ?Sized> Deserialize<GpuPartialOrderTrace, __D> for Archived<GpuPartialOrderTrace>where
u64: Archive,
Archived<u64>: Deserialize<u64, __D>,
u32: Archive,
Archived<u32>: Deserialize<u32, __D>,
HybridTimestamp: Archive,
Archived<HybridTimestamp>: Deserialize<HybridTimestamp, __D>,
[u16; 16]: Archive,
Archived<[u16; 16]>: Deserialize<[u16; 16], __D>,
[u32; 16]: Archive,
Archived<[u32; 16]>: Deserialize<[u32; 16], __D>,
[u8; 32]: Archive,
Archived<[u8; 32]>: Deserialize<[u8; 32], __D>,
Source§fn deserialize(
&self,
deserializer: &mut __D,
) -> Result<GpuPartialOrderTrace, __D::Error>
fn deserialize( &self, deserializer: &mut __D, ) -> Result<GpuPartialOrderTrace, __D::Error>
impl Copy for GpuPartialOrderTrace
Auto Trait Implementations§
impl Freeze for GpuPartialOrderTrace
impl RefUnwindSafe for GpuPartialOrderTrace
impl Send for GpuPartialOrderTrace
impl Sync for GpuPartialOrderTrace
impl Unpin for GpuPartialOrderTrace
impl UnwindSafe for GpuPartialOrderTrace
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> ArchiveUnsized for Twhere
T: Archive,
impl<T> ArchiveUnsized for Twhere
T: Archive,
Source§type Archived = <T as Archive>::Archived
type Archived = <T as Archive>::Archived
Archive, it may be unsized. Read moreSource§type MetadataResolver = ()
type MetadataResolver = ()
Source§unsafe fn resolve_metadata(
&self,
_: usize,
_: <T as ArchiveUnsized>::MetadataResolver,
_: *mut <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata,
)
unsafe fn resolve_metadata( &self, _: usize, _: <T as ArchiveUnsized>::MetadataResolver, _: *mut <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata, )
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.