aboutsummaryrefslogtreecommitdiff
path: root/sp/src/utils/vmpi/vmpi_distribute_work.h
diff options
context:
space:
mode:
Diffstat (limited to 'sp/src/utils/vmpi/vmpi_distribute_work.h')
-rw-r--r--sp/src/utils/vmpi/vmpi_distribute_work.h178
1 files changed, 89 insertions, 89 deletions
diff --git a/sp/src/utils/vmpi/vmpi_distribute_work.h b/sp/src/utils/vmpi/vmpi_distribute_work.h
index cfd37d8b..04354608 100644
--- a/sp/src/utils/vmpi/vmpi_distribute_work.h
+++ b/sp/src/utils/vmpi/vmpi_distribute_work.h
@@ -1,89 +1,89 @@
-//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-//=============================================================================//
-
-#ifndef VMPI_DISTRIBUTE_WORK_H
-#define VMPI_DISTRIBUTE_WORK_H
-#ifdef _WIN32
-#pragma once
-#endif
-
-
-#include "messbuf.h"
-#include "utlvector.h"
-
-
-class IWorkUnitDistributorCallbacks
-{
-public:
- // Called every 200ms or so as it does the work.
- // Return true to stop distributing work.
- virtual bool Update() { return false; }
-
- // Called when a subsequent number of work units is completed.
- // e.g. results received in the following order will trigger
- // the following calls to OnWorkUnitsCompleted:
- // Work unit numbers: wu2 wu4 wu5 wu1 wu0 wu6 wu3
- // Calling OnWorkUnitsCompleted with arg: - - - - 3 - 7
- // because when wu0 is received we already have { wu0, wu1, wu2 } so we signal
- // that 3 subsequent work units completed, like wise by the time when wu3 is
- // received we already have a full set { wu0, wu1, wu2, wu3, wu4, wu5, wu6 }
- // and signal that 7 work units completed.
- virtual void OnWorkUnitsCompleted( uint64 numWorkUnits ) { return; }
-};
-
-
-enum EWorkUnitDistributor
-{
- k_eWorkUnitDistributor_Default,
- k_eWorkUnitDistributor_SDK
-};
-
-// Tells which work unit distributor is going to be used.
-EWorkUnitDistributor VMPI_GetActiveWorkUnitDistributor();
-
-
-// Before calling DistributeWork, you can set this and it'll call your virtual functions.
-extern IWorkUnitDistributorCallbacks *g_pDistributeWorkCallbacks;
-
-
-// You must append data to pBuf with the work unit results.
-// Note: pBuf will be NULL if this is a local thread doing work on the master.
-typedef void (*ProcessWorkUnitFn)( int iThread, uint64 iWorkUnit, MessageBuffer *pBuf );
-
-// pBuf is ready to read the results written to the buffer in ProcessWorkUnitFn.
-typedef void (*ReceiveWorkUnitFn)( uint64 iWorkUnit, MessageBuffer *pBuf, int iWorker );
-
-
-// Use a CDispatchReg to register this function with whatever packet ID you give to DistributeWork.
-bool DistributeWorkDispatch( MessageBuffer *pBuf, int iSource, int iPacketID );
-
-
-
-// This is the function vrad and vvis use to divide the work units and send them out.
-// It maintains a sliding window of work units so it can always keep the clients busy.
-//
-// The workers implement processFn to do the job work in a work unit.
-// This function must send back a packet formatted with:
-// cPacketID (char), cSubPacketID (char), iWorkUnit (int), (app-specific data for the results)
-//
-// The masters implement receiveFn to receive a work unit's results.
-//
-// Returns time it took to finish the work.
-double DistributeWork(
- uint64 nWorkUnits, // how many work units to dole out
- char cPacketID, // This packet ID must be reserved for DistributeWork and DistributeWorkDispatch
- // must be registered with it.
- ProcessWorkUnitFn processFn, // workers implement this to process a work unit and send results back
- ReceiveWorkUnitFn receiveFn // the master implements this to receive a work unit
- );
-
-
-// VMPI calls this before shutting down because any threads that DistributeWork has running must stop,
-// otherwise it can crash if a thread tries to send data in the middle of shutting down.
-void DistributeWork_Cancel();
-
-
-#endif // VMPI_DISTRIBUTE_WORK_H
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef VMPI_DISTRIBUTE_WORK_H
+#define VMPI_DISTRIBUTE_WORK_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+#include "messbuf.h"
+#include "utlvector.h"
+
+
+class IWorkUnitDistributorCallbacks
+{
+public:
+ // Called every 200ms or so as it does the work.
+ // Return true to stop distributing work.
+ virtual bool Update() { return false; }
+
+ // Called when a subsequent number of work units is completed.
+ // e.g. results received in the following order will trigger
+ // the following calls to OnWorkUnitsCompleted:
+ // Work unit numbers: wu2 wu4 wu5 wu1 wu0 wu6 wu3
+ // Calling OnWorkUnitsCompleted with arg: - - - - 3 - 7
+ // because when wu0 is received we already have { wu0, wu1, wu2 } so we signal
+ // that 3 subsequent work units completed, like wise by the time when wu3 is
+ // received we already have a full set { wu0, wu1, wu2, wu3, wu4, wu5, wu6 }
+ // and signal that 7 work units completed.
+ virtual void OnWorkUnitsCompleted( uint64 numWorkUnits ) { return; }
+};
+
+
+enum EWorkUnitDistributor
+{
+ k_eWorkUnitDistributor_Default,
+ k_eWorkUnitDistributor_SDK
+};
+
+// Tells which work unit distributor is going to be used.
+EWorkUnitDistributor VMPI_GetActiveWorkUnitDistributor();
+
+
+// Before calling DistributeWork, you can set this and it'll call your virtual functions.
+extern IWorkUnitDistributorCallbacks *g_pDistributeWorkCallbacks;
+
+
+// You must append data to pBuf with the work unit results.
+// Note: pBuf will be NULL if this is a local thread doing work on the master.
+typedef void (*ProcessWorkUnitFn)( int iThread, uint64 iWorkUnit, MessageBuffer *pBuf );
+
+// pBuf is ready to read the results written to the buffer in ProcessWorkUnitFn.
+typedef void (*ReceiveWorkUnitFn)( uint64 iWorkUnit, MessageBuffer *pBuf, int iWorker );
+
+
+// Use a CDispatchReg to register this function with whatever packet ID you give to DistributeWork.
+bool DistributeWorkDispatch( MessageBuffer *pBuf, int iSource, int iPacketID );
+
+
+
+// This is the function vrad and vvis use to divide the work units and send them out.
+// It maintains a sliding window of work units so it can always keep the clients busy.
+//
+// The workers implement processFn to do the job work in a work unit.
+// This function must send back a packet formatted with:
+// cPacketID (char), cSubPacketID (char), iWorkUnit (int), (app-specific data for the results)
+//
+// The masters implement receiveFn to receive a work unit's results.
+//
+// Returns time it took to finish the work.
+double DistributeWork(
+ uint64 nWorkUnits, // how many work units to dole out
+ char cPacketID, // This packet ID must be reserved for DistributeWork and DistributeWorkDispatch
+ // must be registered with it.
+ ProcessWorkUnitFn processFn, // workers implement this to process a work unit and send results back
+ ReceiveWorkUnitFn receiveFn // the master implements this to receive a work unit
+ );
+
+
+// VMPI calls this before shutting down because any threads that DistributeWork has running must stop,
+// otherwise it can crash if a thread tries to send data in the middle of shutting down.
+void DistributeWork_Cancel();
+
+
+#endif // VMPI_DISTRIBUTE_WORK_H