# HG changeset patch # User Sean Halle # Date 1380205568 25200 # Node ID 3afbf8f9294b09c436432b4b5c85ee1f166b6ae8 # Parent 9d607381c7caa3da7fdf295ceccf25c09dc3377d# Parent 6fd92a01dc2ee77c1213e6903ee3c826c0e197f5 Merge diff -r 9d607381c7ca -r 3afbf8f9294b PR__structs__common.h --- a/PR__structs__common.h Thu Sep 26 07:24:31 2013 -0700 +++ b/PR__structs__common.h Thu Sep 26 07:26:08 2013 -0700 @@ -147,7 +147,7 @@ int32 langMagicNumber; SlaveVP *requestingSlave; - BirthFnPtr topLevelFn; + BirthFnPtr birthFn; void *initData; int32 *ID; @@ -194,7 +194,7 @@ int32 needsWorkAssigned; SlaveVP *slaveAssignedToSlot; - int32 slotIdx; //needed by Holistic Model's data gathering +// int32 slotIdx; //needed by Holistic Model's data gathering int32 coreSlotIsOn; SlotPerfInfo *perfInfo; //used by assigner to pick best slave for core }; @@ -308,7 +308,7 @@ int32 *ID; //is standard PR ID PRProcess *processTaskIsIn; SlaveVP *slaveAssignedTo; //not valid until task animated - BirthFnPtr topLevelFn; //This is the Fn executes as the task + BirthFnPtr birthFn; //This is the Fn executes as the task void *initData; //The data taken by the function LangMetaTaskFreer freer; bool32 goAheadAndFree; diff -r 9d607381c7ca -r 3afbf8f9294b Services_offered_by_PR/MEAS__Counter_Recording.h --- a/Services_offered_by_PR/MEAS__Counter_Recording.h Thu Sep 26 07:24:31 2013 -0700 +++ b/Services_offered_by_PR/MEAS__Counter_Recording.h Thu Sep 26 07:26:08 2013 -0700 @@ -8,6 +8,7 @@ #ifndef MEAS__COUNTER_RECORDING_H #define MEAS__COUNTER_RECORDING_H + #include typedef struct diff -r 9d607381c7ca -r 3afbf8f9294b langlets/PRServ__wrapper_library.h --- a/langlets/PRServ__wrapper_library.h Thu Sep 26 07:24:31 2013 -0700 +++ b/langlets/PRServ__wrapper_library.h Thu Sep 26 07:26:08 2013 -0700 @@ -1,5 +1,5 @@ /* - * Copyright 2009 OpenSourceResearchInstitute.org + * Copyright 2009-2013 OpenSourceResearchInstitute.org * Licensed under GNU General Public License version 2 * * Author: seanhalle@yahoo.com @@ -13,7 +13,46 @@ //=========================================================================== -typedef void (*PtrToAtomicFn ) ( void * ); //executed atomically in master +typedef void (*PtrToAtomicFn ) ( void * ); //executed atomically in master + +typedef struct _DKUPiece DKUPiece; +typedef struct _DKUInstance DKUInstance; + +typedef void (*DKUKernel ) ( void *, SlaveVP * ); //used as task birth Fn +typedef void (*DKUSerialKernel ) ( void *, SlaveVP * ); //used as task birth Fn +typedef void (*DKUDivider ) ( DKUPiece * ); +typedef void (*DKUUndivider ) ( DKUPiece * ); + +typedef DKUPiece * (*DKURootPieceMaker) ( void *, DKUInstance * ); + +struct _DKUInstance + { + DKURootPieceMaker rootPieceMaker; + DKUKernel kernel; + DKUSerialKernel serialKernel; + DKUDivider divider; + DKUUndivider undivider; + }; + +struct _DKUPiece + { + void *payload; + DKUPiece *parent; + DKUPiece **children; + int32 numChildren; + int32 numUnfinishedChildren; + DKUInstance *dkuInstance; //to get kernel and undivider + void *undividerInfo; //divider communicates to undivider + SlaveVP *waitingVP; + bool32 wasRecursivelyDivided; + }; + + + + + + + /*WARNING: assembly hard-codes position of endInstrAddr as first field */ @@ -86,6 +125,46 @@ void PRServ__end_transaction( int32 transactionID, SlaveVP *animSlv ); +//============================== DKU ============================= +DKUInstance * +PRServ__DKU_make_empty_DKU_instance( SlaveVP *animSlv ); + +DKUPiece * +PRServ__DKU_make_empty_DKU_piece(); + +DKUPiece * +PRServ__DKU_make_child_piece_from( pieceToDivide ); + +void +PRServ__DKU_set_root_piece_maker( DKUInstance *dkuInstance, + DKURootPieceMaker rootPieceMakerFn, + SlaveVP *animSlv ); +void +PRServ__DKU_set_kernel( DKUInstance *dkuInstance, + DKUKernel kernelFn, + SlaveVP *animSlv ); +void +PRServ__DKU_set_serial_kernel( DKUInstance *dkuInstance, + DKUSerialKernel serialKernelFn, + SlaveVP *animSlv ); +void +PRServ__DKU_set_divider( DKUInstance *dkuInstance, + DKUDivider dividerFn, + SlaveVP *animSlv ); +void +PRServ__DKU_set_undivider( DKUInstance *dkuInstance, + DKUUndivider undividerFn, + SlaveVP *animSlv ); +DKUPiece * +PRServ__DKU_make_root_piece( DKUInstance *dkuInstance, + void *data, + SlaveVP *animSlv ); +void +PRServ__DKU_perform_work_on( DKUPiece *rootPiece, + SlaveVP *animSlv ); +void +PRServ__DKU_wait_for_result_to_be_complete( DKUPiece *rootPiece, + SlaveVP *animSlv ); //=========================================================================== #endif /* _PRServ_H */