A physical binding has a scope.
G binds ref c to a slot for D’s execution: ready → running → done. The binding can end with D, while ref c and its dependency meaning stay unchanged. Placement is temporary; identity is not.
#GPUProgramming #ProgrammingLanguages
A physical binding has a scope.
G binds ref c to a slot for D’s execution: ready → running → done. The binding can end with D, while ref c and its dependency meaning stay unchanged. Placement is temporary; identity is not.
#GPUProgramming #ProgrammingLanguages
Bind placement as late as possible.
The graph carries ref c, not an address. When D becomes ready, G resolves ref c to a physical slot. Late binding keeps dependencies stable while leaving placement free until execution.
#GPUProgramming #ProgrammingLanguages
Bind placement as late as possible.
The graph carries ref c, not an address. When D becomes ready, G resolves ref c to a physical slot. Late binding keeps dependencies stable while leaving placement free until execution.
#GPUProgramming #ProgrammingLanguages
Placement changes should not rewrite the graph.
A resolver maps ref c to current storage only when execution needs it. The edge still names ref c. G keeps graph identity stable while placement remains a local runtime choice.
#GPUProgramming #ProgrammingLanguages
Placement changes should not rewrite the graph.
A resolver maps ref c to current storage only when execution needs it. The edge still names ref c. G keeps graph identity stable while placement remains a local runtime choice.
#GPUProgramming #ProgrammingLanguages
A reference identity is not a memory address.
ref c names one immutable result, even if storage moves or is reused. G separates dependency identity from placement, so graph meaning does not change with physical memory layout.
#GPUProgramming #ProgrammingLanguages
A reference identity is not a memory address.
ref c names one immutable result, even if storage moves or is reused. G separates dependency identity from placement, so graph meaning does not change with physical memory layout.
#GPUProgramming #ProgrammingLanguages
A reference is a fact, not a mutable slot.
Once ref c is available, its value cannot change. A later result is ref d on a new edge. G expresses evolution by producing references, so readers never race with in-place mutation.
#GPUProgramming #ProgrammingLanguages
A reference is a fact, not a mutable slot.
Once ref c is available, its value cannot change. A later result is ref d on a new edge. G expresses evolution by producing references, so readers never race with in-place mutation.
#GPUProgramming #ProgrammingLanguages
Join our 2-day, hands-on online Bootcamp to explore:
💡 OpenACC
💡 OpenMP
💡 stdpar
💡 CUDA
You’ll also learn to analyse GPU applications with NVIDIA® Nsight™ Systems.
👉 Register:
buff.ly/JAzGPm1
#HPC #GPUProgramming
Join our 2-day, hands-on online Bootcamp to explore:
💡 OpenACC
💡 OpenMP
💡 stdpar
💡 CUDA
You’ll also learn to analyse GPU applications with NVIDIA® Nsight™ Systems.
👉 Register:
buff.ly/JAzGPm1
#HPC #GPUProgramming
Reference availability is monotonic.
Once ref c is available, it never becomes unavailable. Downstream readiness cannot be revoked. G treats references as stable facts, so the dependency graph advances without rollback.
#GPUProgramming #ProgrammingLanguages
Reference availability is monotonic.
Once ref c is available, it never becomes unavailable. Downstream readiness cannot be revoked. G treats references as stable facts, so the dependency graph advances without rollback.
#GPUProgramming #ProgrammingLanguages
Completion is an output reference.
C does not announce that a task ended. RUNNING completes when ref c becomes available. Downstream consumers observe that reference: completion re-enters G as data, not a control event.
#GPUProgramming #ProgrammingLanguages
Completion is an output reference.
C does not announce that a task ended. RUNNING completes when ref c becomes available. Downstream consumers observe that reference: completion re-enters G as data, not a control event.
#GPUProgramming #ProgrammingLanguages
Admission consumes readiness.
When C moves from READY to RUNNING, readiness is replaced, not copied. A second admission cannot see that eligibility. Launch is one transition, so duplicate execution is excluded by construction.
#GPUProgramming #ProgrammingLanguages
Admission consumes readiness.
When C moves from READY to RUNNING, readiness is replaced, not copied. A second admission cannot see that eligibility. Launch is one transition, so duplicate execution is excluded by construction.
#GPUProgramming #ProgrammingLanguages
Readiness is a state, not a pulse.
Once C's inputs are available, C stays ready until admitted. No arrival event must be replayed. G keeps eligibility in the computation state, so waiting loses no dependency information.
#GPUProgramming #ProgrammingLanguages
Readiness is a state, not a pulse.
Once C's inputs are available, C stays ready until admitted. No arrival event must be replayed. G keeps eligibility in the computation state, so waiting loses no dependency information.
#GPUProgramming #ProgrammingLanguages
Ready does not mean running.
Once every required reference is available, C is eligible. This is a semantic fact, not an immediate launch command. Execution can begin later; readiness and admission are separate states.
#GPUProgramming #ProgrammingLanguages
Ready does not mean running.
Once every required reference is available, C is eligible. This is a semantic fact, not an immediate launch command. Execution can begin later; readiness and admission are separate states.
#GPUProgramming #ProgrammingLanguages
Readiness is local to a consumer's inputs.
If C consumes ref a and ref b, it becomes eligible when both are available. Unrelated references do not enter this decision. C's own dependency set defines the gate.
#GPUProgramming #ProgrammingLanguages
Readiness is local to a consumer's inputs.
If C consumes ref a and ref b, it becomes eligible when both are available. Unrelated references do not enter this decision. C's own dependency set defines the gate.
#GPUProgramming #ProgrammingLanguages
A dependency edge is also a readiness condition.
B does not wait for A as a named task. It becomes eligible when ref a is available. Readiness follows data arrival, leaving unrelated work free to proceed.
#GPUProgramming #ProgrammingLanguages
A dependency edge is also a readiness condition.
B does not wait for A as a named task. It becomes eligible when ref a is available. Readiness follows data arrival, leaving unrelated work free to proceed.
#GPUProgramming #ProgrammingLanguages
Ordering is written as data dependence.
To require A before B, G uses no statement position or implicit barrier. B consumes a reference from A. That dependency becomes an edge both compiler and GPU can see.
#GPUProgramming #ProgrammingLanguages
Ordering is written as data dependence.
To require A before B, G uses no statement position or implicit barrier. B consumes a reference from A. That dependency becomes an edge both compiler and GPU can see.
#GPUProgramming #ProgrammingLanguages
Textual order is not execution order.
In G, A written before B does not imply A < B. Only a reference path creates that relation. Independent declarations remain incomparable, so layout cannot serialize GPU work.
#GPUProgramming #ProgrammingLanguages
Textual order is not execution order.
In G, A written before B does not imply A < B. Only a reference path creates that relation. Independent declarations remain incomparable, so layout cannot serialize GPU work.
#GPUProgramming #ProgrammingLanguages
G has no single global next instruction.
Its reference DAG defines a partial order: R1 < R3 and R2 < R3, while R1 and R2 remain incomparable. Only edges impose order; everything else stays available for parallel execution.
#GPUProgramming #ProgrammingLanguages
G has no single global next instruction.
Its reference DAG defines a partial order: R1 < R3 and R2 < R3, while R1 and R2 remain incomparable. Only edges impose order; everything else stays available for parallel execution.
#GPUProgramming #ProgrammingLanguages
Branches rejoin without merging identities.
Given R1 and R2, G creates R3 through two incoming edges: R1 -> R3 and R2 -> R3. The inputs remain distinct; convergence creates a successor, not a mutable shared object.
#GPUProgramming #ProgrammingLanguages
Branches rejoin without merging identities.
Given R1 and R2, G creates R3 through two incoming edges: R1 -> R3 and R2 -> R3. The inputs remain distinct; convergence creates a successor, not a mutable shared object.
#GPUProgramming #ProgrammingLanguages
Acyclic does not mean serial.
From R0, G may emit R1 and R2 as distinct forward successors. Neither overwrites R0, and neither must wait on the other. Reference history is a branching DAG, not a single mutable chain.
#GPUProgramming #ProgrammingLanguages
Acyclic does not mean serial.
From R0, G may emit R1 and R2 as distinct forward successors. Neither overwrites R0, and neither must wait on the other. Reference history is a branching DAG, not a single mutable chain.
#GPUProgramming #ProgrammingLanguages
A reference path cannot loop into its own past.
If R0 --advance--> R1 --advance--> R2, G rejects R2 --advance--> R0. That cycle would make every reference both earlier and later. Directed evolution must remain acyclic.
#GPUProgramming #ProgrammingLanguages
A reference path cannot loop into its own past.
If R0 --advance--> R1 --advance--> R2, G rejects R2 --advance--> R0. That cycle would make every reference both earlier and later. Directed evolution must remain acyclic.
#GPUProgramming #ProgrammingLanguages
Direction gives evolution its order.
For R --advance--> R', the successor may follow R, but R never follows R'. G reads order from the edge itself: evolution moves forward while recorded history remains immutable.
#GPUProgramming #ProgrammingLanguages
Direction gives evolution its order.
For R --advance--> R', the successor may follow R, but R never follows R'. G reads order from the edge itself: evolution moves forward while recorded history remains immutable.
#GPUProgramming #ProgrammingLanguages
Evolution is an edge, not an overwrite.
G records R --advance--> R'. R keeps its original identity; R' names the successor. The edge carries continuity, letting later computation follow evolution without rewriting history.
#GPUProgramming #ProgrammingLanguages
Evolution is an edge, not an overwrite.
G records R --advance--> R'. R keeps its original identity; R' names the successor. The edge carries continuity, letting later computation follow evolution without rewriting history.
#GPUProgramming #ProgrammingLanguages
Continuation creates a new reference.
Moving state from S@gMAX to S'@g0 does not retarget R=(S,gMAX). G creates R'=(S',g0) for the successor. Continuity is an explicit reference transition, never hidden pointer mutation.
#GPUProgramming #ProgrammingLanguages
Continuation creates a new reference.
Moving state from S@gMAX to S'@g0 does not retarget R=(S,gMAX). G creates R'=(S',g0) for the successor. Continuity is an explicit reference transition, never hidden pointer mutation.
#GPUProgramming #ProgrammingLanguages
Retiring a slot does not retire computation.
After S reaches gMAX, G allocates S'@g0. Generation restarts safely because the slot changed: (S,g0) != (S',g0). Work continues without stale references aliasing new storage.
#GPUProgramming #ProgrammingLanguages
Retiring a slot does not retire computation.
After S reaches gMAX, G allocates S'@g0. Generation restarts safely because the slot changed: (S,g0) != (S',g0). Work continues without stale references aliasing new storage.
#GPUProgramming #ProgrammingLanguages
A generation must never wrap into an old identity.
At gMAX, G retires slot S instead of resetting it to g0. Reuse stops before a stale (S,g0) can match again. Identity ends; it never cycles.
#GPUProgramming #ProgrammingLanguages
A generation must never wrap into an old identity.
At gMAX, G retires slot S instead of resetting it to g0. Reuse stops before a stale (S,g0) can match again. Identity ends; it never cycles.
#GPUProgramming #ProgrammingLanguages
Storage reuse advances generation.
After W0@g0 is reclaimed, slot S may hold W2@g2. The address is reused; identity is not. Reference (S,g0) must fail against (S,g2). G rejects stale references without forbidding reuse.
#GPUProgramming #ProgrammingLanguages
Storage reuse advances generation.
After W0@g0 is reclaimed, slot S may hold W2@g2. The address is reused; identity is not. Reference (S,g0) must fail against (S,g2). G rejects stale references without forbidding reuse.
#GPUProgramming #ProgrammingLanguages