VMS RTL Parallel Processing (PPL$) Manual

*HyperReader

  CONTENTS

  Title Page

  Copyright Page

  Preface

  1      Overview of Parallel Processing

  1.1     Advantages of Parallel Processing

  1.2     Definition of Terms

  1.3     Characteristics of a Parallel Processing Application

  1.4     Software Models for Parallel Processing
    1.4.1      Master/Slave
      1.4.1.1      True Master/Slave Model
      1.4.1.2      Self-Scheduling Master/Slave Model
      1.4.1.3      Synchronization Method
    1.4.2      Pipelining
    1.4.3      Work Queue Processing
      1.4.3.1      Synchronization Method

  1.5     System Requirements
    1.5.1      Privileges
    1.5.2      Quotas
      1.5.2.1      Subprocess Quota
      1.5.2.2      AST Limit
      1.5.2.3      Enqueue Quota
      1.5.2.4      Global Section Quota

  2      Process Management and Naming Operations

  2.1     Accessing the PPL$ Facility
    2.1.1      Initializing PPL$
    2.1.2      Deleting an Application
    2.1.3      Terminating Access to the PPL$ Facility

  2.2     Participant Management
    2.2.1      Creating a Subordinate
    2.2.2      Deleting a Subordinate
    2.2.3      Retrieving Participant Information

  2.3     Application-Wide Naming

  3      Shared Memory Operations

  3.1     Shared Memory Routines
    3.1.1      Creating Shared Memory
    3.1.2      Flushing Shared Memory to Disk
    3.1.3      Deleting Shared Memory

  3.2     Creating a Virtual Memory Zone

  3.3     Deleting a Virtual Memory Zone

  4      Synchronization Operations

  4.1     Retrieving an Object Identifier

  4.2     Barrier Synchronization
    4.2.1      Creating a Barrier
    4.2.2      Deleting a Barrier
    4.2.3      Reading a Barrier
    4.2.4      Waiting at a Barrier
    4.2.5      Setting a Barrier Quorum
    4.2.6      Adjusting a Barrier Quorum

  4.3     Event Synchronization
    4.3.1      Creating an Event
    4.3.2      Deleting an Event
    4.3.3      Enabling an Event AST
    4.3.4      Enabling an Event Signal
    4.3.5      Disabling an Event
    4.3.6      Awaiting an Event
    4.3.7      Triggering an Event
    4.3.8      Reading an Event
    4.3.9      Resetting an Event
    4.3.10     Predefined Events

  4.4     Semaphore Synchronization
    4.4.1      Creating a Semaphore
    4.4.2      Deleting a Semaphore
    4.4.3      Decrementing a Semaphore
    4.4.4      Incrementing a Semaphore
    4.4.5      Reading a Semaphore Value
    4.4.6      Adjusting a Semaphore Maximum
    4.4.7      Setting a Semaphore Maximum

  4.5     Spin Lock Synchronization
    4.5.1      Creating a Spin Lock
    4.5.2      Deleting a Spin Lock
    4.5.3      Seizing a Spin Lock
    4.5.4      Releasing a Spin Lock
    4.5.5      Reading a Spin Lock

  4.6     Work Queue Synchronization
    4.6.1      Creating a Work Queue
    4.6.2      Deleting a Work Queue
    4.6.3      Reading a Work Queue
    4.6.4      Inserting a Work Item
    4.6.5      Removing a Work Item
    4.6.6      Deleting a Work Item

  5      Developing Parallel Processing Applications

  5.1     Programming Considerations
    5.1.1      Granularity and Decomposition
    5.1.2      Data Dependence
    5.1.3      Deadlock
    5.1.4      Naming Components
    5.1.5      Using SYS$HIBER
    5.1.6      Disabling ASTs
    5.1.7      VAX Ada and VAX FORTRAN Considerations

  5.2     Comparing the Use of Synchronization Elements
    5.2.1      Barriers
    5.2.2      Events
      5.2.2.1      Asynchronous Signal
    5.2.3      Semaphores
    5.2.4      Spin Locks
    5.2.5      Work Queues
    5.2.6      Sharing an Element Identifier

  5.3     Performance Measurements
    5.3.1      Geometric Model of Performance

  6      Examples of Calling PPL$ Routines

  6.1     BLISS-32 Example

  6.2     VAX FORTRAN Example

  6.3     VAX C Example

  PPL$ Reference Section

  PPL$ADJUST_QUORUM

  PPL$ADJUST_SEMAPHORE_MAXIMUM

  PPL$AWAIT_EVENT

  PPL$CREATE_APPLICATION

  PPL$CREATE_BARRIER

  PPL$CREATE_EVENT

  PPL$CREATE_SEMAPHORE

  PPL$CREATE_SHARED_MEMORY

  PPL$CREATE_SPIN_LOCK

  PPL$CREATE_VM_ZONE

  PPL$CREATE_WORK_QUEUE

  PPL$DECREMENT_SEMAPHORE

  PPL$DELETE_APPLICATION

  PPL$DELETE_BARRIER

  PPL$DELETE_EVENT

  PPL$DELETE_SEMAPHORE

  PPL$DELETE_SHARED_MEMORY

  PPL$DELETE_SPIN_LOCK

  PPL$DELETE_VM_ZONE

  PPL$DELETE_WORK_ITEM

  PPL$DELETE_WORK_QUEUE

  PPL$DISABLE_EVENT

  PPL$ENABLE_EVENT_AST

  PPL$ENABLE_EVENT_SIGNAL

  PPL$FIND_OBJECT_ID

  PPL$FLUSH_SHARED_MEMORY

  PPL$GET_INDEX

  PPL$INCREMENT_SEMAPHORE

  PPL$INDEX_TO_PID

  PPL$INSERT_WORK_ITEM

  PPL$PID_TO_INDEX

  PPL$READ_BARRIER

  PPL$READ_EVENT

  PPL$READ_SEMAPHORE

  PPL$READ_SPIN_LOCK

  PPL$READ_WORK_QUEUE

  PPL$RELEASE_SPIN_LOCK

  PPL$REMOVE_WORK_ITEM

  PPL$RESET_EVENT

  PPL$SEIZE_SPIN_LOCK

  PPL$SET_QUORUM

  PPL$SET_SEMAPHORE_MAXIMUM

  PPL$SPAWN

  PPL$STOP

  PPL$TERMINATE

  PPL$TRIGGER_EVENT

  PPL$UNIQUE_NAME

  PPL$WAIT_AT_BARRIER

  EXAMPLES

  6-1        Using PPL$ Routines in BLISS-32

  6-2        Using PPL$ Routines in VAX FORTRAN

  6-3        Using PPL$ Routines in VAX C

  FIGURES

  5-1        Time-Processor Product for a System with No Parallelism

  5-2        Time-Processor Product for a System with Unlimited Parallelism

  5-3        Time-Processor Product for a System with Limited Parallelism

  PPL-1      Signal Vector for a User-Defined Event

  PPL-2      Signal Vector for a PPL$-Defined Event