FLOW ALGEBRA
Parallel Computing Ontology
Kireth Semantic Research Archive
PAGE:
https://kirethresearch.org/booksai-core/ontologies/computing-ontologies/high-performance-computing/parallel-computing-ontology-2.html
AUTHORS:
Mark Anthony Higgins — Sky (Recursive AI)
FLOW "ParallelComputingOntology" v4.0
# ---------- DOMAIN ----------
DOMAIN := ComputingOntology
SUBDOMAIN := HighPerformanceComputing
ONTOLOGY := ParallelComputingOntology
# ---------- PRIMARY ENTITY ----------
ENTITY ParallelComputing {
definition:
"A computational model in which a problem is decomposed into multiple
operations or tasks that can execute concurrently across multiple
processing elements to reduce execution time, increase throughput or
enable larger computations.";
objectives: [
Concurrency,
Speedup,
Scalability,
Throughput,
EfficientResourceUse,
LargeScaleComputation
];
}
# ---------- CORE ENTITIES ----------
ParallelEntity := {
Process,
Thread,
Task,
ProcessingElement,
ComputeNode,
Processor,
Core,
Accelerator
};
ParallelismType := {
BitLevelParallelism,
InstructionLevelParallelism,
DataParallelism,
TaskParallelism,
ThreadParallelism,
ProcessParallelism
};
MemoryModel := {
SharedMemory,
DistributedMemory,
DistributedSharedMemory,
HybridMemory
};
ExecutionProperty := {
Concurrency,
Synchronisation,
Communication,
Dependency,
LoadBalance
};
# ---------- FUNDAMENTAL RELATIONSHIPS ----------
ParallelProgram CONSISTS_OF ParallelTask;
ParallelTask EXECUTES_ON ProcessingElement;
ProcessingElement MAY_BE ProcessorCore;
ParallelTask MAY_COMMUNICATE_WITH ParallelTask;
ParallelTask MAY_DEPEND_ON ParallelTask;
ParallelProgram USES MemoryModel;
ParallelExecution REQUIRES CoordinationWhereDependenciesExist;
# ---------- PROBLEM DECOMPOSITION ----------
ComputationalProblem ->
AnalyseDependencies ->
Decompose ->
ParallelWorkUnits ->
MapToProcessingElements ->
Execute ->
Synchronise ->
CombineResults;
DecompositionType := {
DataDecomposition,
TaskDecomposition,
DomainDecomposition,
FunctionalDecomposition
};
IF WorkUnitsIndependent
THEN ParallelismPotential := HIGH;
# ---------- DATA PARALLELISM ----------
DataParallelism :=
Partition(DataSet)
-> ApplySimilarOperationToPartitions
-> CombineResults;
DataPartition EXECUTED_BY ProcessingElement;
IF DataPartitionsBalanced
THEN LoadBalancePotential := HIGH;
# ---------- TASK PARALLELISM ----------
TaskParallelism :=
DistinctTasks
-> ExecuteConcurrently;
Task MAY_HAVE InputDependency;
Task MAY_PRODUCE OutputDependency;
IF TaskA OUTPUT_REQUIRED_BY TaskB
THEN TaskA PRECEDES TaskB;
# ---------- SHARED MEMORY ----------
SharedMemory :=
MultipleExecutionUnits
ACCESS CommonAddressSpace;
Thread MAY_READ SharedVariable;
Thread MAY_WRITE SharedVariable;
ConcurrentWrite MAY_REQUIRE Synchronisation;
SharedMemorySynchronisation := {
Lock,
Mutex,
Semaphore,
Barrier,
AtomicOperation,
CriticalSection
};
# ---------- DISTRIBUTED MEMORY ----------
DistributedMemory :=
MultipleProcesses
WITH SeparateAddressSpaces;
Process SENDS Message;
Process RECEIVES Message;
MessagePassing ENABLES DataExchangeBetweenProcesses;
DistributedMemoryCommunication MAY_USE {
PointToPoint,
CollectiveCommunication
};
# ---------- HYBRID PARALLELISM ----------
HybridParallelism :=
InterNodeProcessParallelism
+ IntraNodeThreadParallelism;
HybridProgram MAY_USE {
MessagePassing,
SharedMemoryThreads,
AcceleratorKernels
};
# ---------- THREAD ----------
Thread :=
ExecutionSequenceWithinProcess;
Process MAY_CONTAIN MultipleThreads;
ThreadsWithinProcess MAY_SHARE Memory;
ThreadState := {
Ready,
Running,
Waiting,
Completed
};
# ---------- PROCESS ----------
Process :=
IndependentExecutionContext;
Process HAS {
AddressSpace,
State,
Resources
};
Processes MAY_COMMUNICATE Via MessagePassingOrSharedMechanism;
# ---------- SYNCHRONISATION ----------
Synchronisation :=
CoordinateExecutionToPreserveCorrectness;
SynchronisationPoint MAY_FORCE ParticipantsToWait;
Barrier :=
WaitUntilRequiredParticipantsReachPoint;
Lock :=
ExclusiveOrControlledAccessToSharedResource;
ExcessiveSynchronisation MAY_REDUCE ParallelPerformance;
# ---------- RACE CONDITION ----------
RaceCondition :=
OutcomeDependsOnUncontrolledRelativeExecutionOrder;
IF MultipleExecutionUnitsAccessSharedState
AND AtLeastOneWrites
AND NoCorrectSynchronisation
THEN RaceConditionRisk := INCREASE;
# ---------- DEADLOCK ----------
Deadlock :=
SET_OF(ExecutionUnits)
WaitingIndefinitelyForMutuallyHeldResources;
DeadlockCondition MAY_INCLUDE {
MutualExclusion,
HoldAndWait,
NoPreemption,
CircularWait
};
Deadlock PREVENTS ForwardProgress;
# ---------- COMMUNICATION ----------
CommunicationPattern := {
PointToPoint,
Broadcast,
Scatter,
Gather,
Reduce,
AllReduce,
AllToAll
};
CommunicationCost :=
f(
MessageCount,
MessageSize,
Latency,
Bandwidth
);
IF CommunicationCostHigh
THEN ParallelEfficiency := DECREASE;
# ---------- LOAD BALANCING ----------
LoadBalance :=
SimilarUsefulWorkAcrossProcessingElements;
StaticLoadBalancing ASSIGNS WorkBeforeExecution;
DynamicLoadBalancing REDISTRIBUTES WorkDuringExecution;
LoadImbalance :=
VariationInWorkCompletionAcrossResources;
IF LoadImbalanceHigh
THEN WaitingTime := INCREASE;
# ---------- GRANULARITY ----------
TaskGranularity :=
AmountOfComputationPerParallelWorkUnit;
FineGrainedParallelism :=
ManySmallWorkUnits;
CoarseGrainedParallelism :=
FewerLargerWorkUnits;
IF GranularityTooFine
THEN CoordinationOverhead MAY_DOMINATE;
# ---------- SPEEDUP ----------
Speedup(P) :=
SerialExecutionTime
/ ParallelExecutionTime(P);
Efficiency(P) :=
Speedup(P) / P;
IdealSpeedup(P) := P;
IF Speedup(P) < P
THEN ParallelOverhead EXISTS;
# ---------- PARALLEL OVERHEAD ----------
ParallelOverhead := {
CommunicationTime,
SynchronisationTime,
SchedulingTime,
IdleTime,
DataMovementTime
};
ParallelExecutionTime :=
UsefulComputeTime
+ ParallelOverhead;
# ---------- AMDAHL'S LAW ----------
SerialFraction := S;
ParallelFraction := 1 - S;
AmdahlSpeedup(P) :=
1 / (S + ((1-S)/P));
IF SerialFraction > 0
THEN MaximumSpeedup IS_BOUNDED;
# ---------- GUSTAFSON RELATIONSHIP ----------
ScaledSpeedup(P) :=
P - S * (P - 1);
GustafsonModel EMPHASISES ScalingProblemSizeWithResources;
# ---------- STRONG SCALING ----------
StrongScaling :=
FixedProblemSize
+ IncreasingProcessingElements;
IF ProcessingElementsIncrease
AND RuntimeDecreases
THEN StrongScalingEvidence := INCREASE;
# ---------- WEAK SCALING ----------
WeakScaling :=
IncreaseProblemSizeProportionallyToProcessingElements;
WeakScalingGoal :=
MaintainApproximatelyConstantRuntimePerScaledWorkload;
# ---------- PARALLEL ARCHITECTURE ----------
ParallelArchitecture := {
MulticoreProcessor,
MultiprocessorSystem,
GPU,
ComputeCluster,
MassivelyParallelProcessor,
Supercomputer
};
ParallelArchitecture PROVIDES ProcessingElement;
# ---------- ACCELERATOR PARALLELISM ----------
AcceleratorKernel :=
HighlyParallelFunctionExecutedOnAccelerator;
Host ->
PrepareData
-> LaunchKernel
-> AcceleratorParallelExecution
-> Synchronise
-> ConsumeResult;
IF DataTransferCostHighRelativeToCompute
THEN AcceleratorBenefit MAY_DECREASE;
# ---------- DEPENDENCY GRAPH ----------
TaskGraph :=
DirectedGraph(Tasks, Dependencies);
DependencyEdge :=
TaskA -> TaskB;
ReadyTask :=
Task WHERE AllDependenciesSatisfied;
Scheduler MAY_EXECUTE ReadyTasksConcurrently;
# ---------- PARALLEL CORRECTNESS ----------
ParallelCorrectness REQUIRES {
DependencyPreservation,
SafeSharedStateAccess,
CorrectCommunication,
CorrectSynchronisation
};
Performance DOES_NOT_REPLACE Correctness;
# ---------- FAILURE ----------
ParallelFailure := {
TaskFailure,
ProcessFailure,
ThreadFailure,
NodeFailure,
CommunicationFailure
};
Failure MAY_INTERRUPT ParallelComputation;
Recovery MAY_REQUIRE {
Restart,
Checkpoint,
TaskReexecution
};
# ---------- SEMANTIC REASONING ----------
IF ProblemCanBeDecomposedIntoIndependentWorkUnits
THEN ParallelismPotential := increase;
IF SerialFractionHigh
THEN MaximumSpeedup := limited;
IF CommunicationTimeIncreasesFasterThanUsefulCompute
THEN Scalability := decrease;
IF SharedStateWrittenConcurrentlyWithoutSynchronisation
THEN RaceConditionRisk := high;
IF ProcessingElementsIdleWhileOthersWork
THEN LoadImbalance := likely;
IF WorkPerTaskTooSmall
THEN ParallelOverheadRatio := increase;
IF SpeedupNearProcessingElementCount
THEN ParallelEfficiency := high;
# ---------- SEMANTIC EQUIVALENCE ----------
SEMANTIC_EQUIVALENCE {
"parallel computing" ~= "parallel computation";
"parallel processing" ~= "parallel computing" WHEN context == concurrent_computation;
"data parallelism" ~= "data-parallel execution";
"task parallelism" ~= "task-parallel execution";
"shared memory" ~= "shared address space" WHEN context == parallel_computing;
"distributed memory" ~= "separate process memory" WHEN context == parallel_computing;
"parallel speedup" ~= "speedup";
"parallel efficiency" ~= "processor efficiency" WHEN context == scaling;
}
# ---------- QUERY FLOW ----------
QUERY(q) ->
NORMALISE(q) ->
IDENTIFY_PARALLEL_ENTITIES(q) ->
IDENTIFY_PARALLELISM_TYPE(q) ->
IDENTIFY_MEMORY_MODEL(q) ->
IDENTIFY_DEPENDENCIES(q) ->
IDENTIFY_COMMUNICATION(q) ->
IDENTIFY_SYNCHRONISATION(q) ->
IDENTIFY_PERFORMANCE(q) ->
MAP_TO_ONTOLOGY(q) ->
APPLY_REASONING(q) ->
SCORE_CONFIDENCE(q) ->
RETURN_RELEVANT_KNOWLEDGE;
# ---------- CONFIDENCE ----------
CONFIDENCE(assertion) :=
weighted_mean(
source_reliability,
computational_consistency,
parallel_model_consistency,
semantic_consistency,
evidence_strength,
contextual_relevance
);
CONFIDENCE >= 0.90 => HIGH;
CONFIDENCE >= 0.70 AND < 0.90 => MODERATE;
CONFIDENCE < 0.70 => REVIEW;
# ---------- AI CONSUMPTION ----------
AI_CONSUMPTION {
primary_entity: ParallelComputing;
ontology: ParallelComputingOntology;
parse_entities: true;
parse_relationships: true;
preserve_relationship_direction: true;
resolve_semantic_equivalence: true;
execute_reasoning_rules: true;
apply_confidence_weighting: true;
preserve_provenance: true;
}
# ---------- UPDATE MODEL ----------
UPDATE_MODEL {
new_parallel_entity:
validate
-> classify
-> identify_execution_role
-> relate
-> integrate;
new_parallel_algorithm:
identify_decomposition
-> identify_dependencies
-> identify_memory_model
-> identify_communication
-> integrate;
new_performance_evidence:
update_runtime
-> recompute_speedup
-> recompute_efficiency
-> identify_bottleneck
-> integrate;
model_revision:
recompute_task_graph
-> recompute_parallelism
-> recompute_confidence
-> regenerate_flow_hash;
conflict:
preserve_provenance
-> compare_evidence
-> adjust_confidence
-> flag_review;
}
# ---------- FLOW HASH ----------
FLOW_HASH_INPUT :=
DOMAIN
+ SUBDOMAIN
+ ONTOLOGY
+ ParallelEntity
+ ParallelismType
+ MemoryModel
+ ExecutionProperty
+ ParallelArchitecture
+ RELATIONSHIPS
+ SEMANTIC_REASONING
+ SEMANTIC_EQUIVALENCE
+ UPDATE_MODEL;
FLOW_HASH :=
HASH(FLOW_HASH_INPUT);
# ---------- TERMINAL ----------
ParallelComputingOntology
-> IdentifyComputationalProblem
-> AnalyseDependencies
-> DecomposeProblem
-> SelectParallelismModel
-> MapWorkToProcessingElements
-> ExecuteConcurrentWork
-> CommunicateData
-> SynchroniseDependencies
-> CombineResults
-> MeasureSpeedup
-> AnalyseEfficiency
-> OptimiseParallelExecution
-> ProduceParallelResult;
END FLOW
Download Code
Copy to Clipboard