# HG changeset patch # User Sean Halle # Date 1351062022 25200 # Node ID aa79134dbc886ff8487a97f6139fc281631ebfb8 # Parent 0dc0b865390239b398d3711acf670ca5cb426195# Parent f5b110414453df7511ef9f0bd240b95ba3cd9233 merge diff -r 0dc0b8653902 -r aa79134dbc88 AnimationMaster.c --- a/AnimationMaster.c Mon Sep 03 03:34:54 2012 -0700 +++ b/AnimationMaster.c Wed Oct 24 00:00:22 2012 -0700 @@ -11,7 +11,8 @@ #include "VMS.h" - +#include +ssize_t read(int fd, void *buf, size_t count); /*The animationMaster embodies most of the animator of the language. The * animator is what emodies the behavior of language constructs. diff -r 0dc0b8653902 -r aa79134dbc88 CoreController.c --- a/CoreController.c Mon Sep 03 03:34:54 2012 -0700 +++ b/CoreController.c Wed Oct 24 00:00:22 2012 -0700 @@ -14,13 +14,16 @@ #include #include +#include +ssize_t read(int fd, void *buf, size_t count); + //===================== Functions local to this file ======================= void *terminateCoreController(SlaveVP *currSlv); -inline void +void doBackoff_for_TooLongToGetLock( int32 numTriesToGetLock, uint32 *seed1, uint32 *seed2 ); -inline void +void doBackoff_for_TooLongWithNoWork( int32 numRepsWithNoWork, uint32 *seed1, uint32 *seed2 ); @@ -81,7 +84,9 @@ cpu_set_t coreMask; //used during pinning pthread to CPU core int32 errorCode; //Variables used during measurements +#ifdef MEAS__TURN_ON_SYSTEM_MEAS TSCountLowHigh endSusp; +#endif //Variables used in random-backoff, for master-lock and waiting for work uint32_t seed1 = rand()%1000; // init random number generator for backoffs uint32_t seed2 = rand()%1000; @@ -120,7 +125,7 @@ HOLISTIC__CoreCtrl_Setup; - DEBUG__printf1(TRUE, "started coreCtrlr", thisCoresIdx ); + DEBUG__printf1(TRUE, "started coreCtrlr on core %d", thisCoresIdx ); //====================== The Core Controller ====================== while(1) //An endless loop is just one way of doing the control structure @@ -222,7 +227,7 @@ pthread_exit( NULL ); } -inline uint32_t +uint32_t randomNumber() { _VMSMasterEnv->seed1 = (uint32)(36969 * (_VMSMasterEnv->seed1 & 65535) + @@ -237,7 +242,7 @@ /*Busy-wait for a random number of cycles -- chooses number of cycles * differently than for the too-many-tries-to-get-lock backoff */ -inline void +void doBackoff_for_TooLongWithNoWork( int32 numRepsWithNoWork, uint32 *seed1, uint32 *seed2 ) { int32 i, waitIterations; @@ -256,7 +261,7 @@ /*Busy-waits for a random number of cycles -- chooses number of cycles * differently than for the no-work backoff */ -inline void +void doBackoff_for_TooLongToGetLock( int32 numTriesToGetLock, uint32 *seed1, uint32 *seed2 ) { int32 i, waitIterations; diff -r 0dc0b8653902 -r aa79134dbc88 HW_Dependent_Primitives/VMS__HW_measurement.c --- a/HW_Dependent_Primitives/VMS__HW_measurement.c Mon Sep 03 03:34:54 2012 -0700 +++ b/HW_Dependent_Primitives/VMS__HW_measurement.c Wed Oct 24 00:00:22 2012 -0700 @@ -4,6 +4,7 @@ #include #include #include +#include #include #include "../VMS.h" @@ -35,7 +36,7 @@ ); if (_VMSMasterEnv->cycles_counter_fd[coreIdx]<0){ fprintf(stderr,"On core %d: ",coreIdx); - perror("Failed to open cycles counter"); + perror("Failed to open cycles counter (does counters dir exist?)"); } hw_event.type = PERF_TYPE_HARDWARE; hw_event.config = PERF_COUNT_HW_INSTRUCTIONS; //instrs diff -r 0dc0b8653902 -r aa79134dbc88 HW_Dependent_Primitives/VMS__HW_measurement.h --- a/HW_Dependent_Primitives/VMS__HW_measurement.h Mon Sep 03 03:34:54 2012 -0700 +++ b/HW_Dependent_Primitives/VMS__HW_measurement.h Wed Oct 24 00:00:22 2012 -0700 @@ -50,7 +50,7 @@ /* clobber */ : "%eax", "%edx" \ ); -inline TSCount getTSCount(); + TSCount getTSCount(); //For code that calculates normalization-offset between TSC counts of diff -r 0dc0b8653902 -r aa79134dbc88 HW_Dependent_Primitives/VMS__primitives.c --- a/HW_Dependent_Primitives/VMS__primitives.c Mon Sep 03 03:34:54 2012 -0700 +++ b/HW_Dependent_Primitives/VMS__primitives.c Wed Oct 24 00:00:22 2012 -0700 @@ -17,7 +17,7 @@ * some wrapper-libraries (but only "int" version, to warn users to check * carefully that it's safe) */ -inline void +void VMS_int__reset_slaveVP_to_TopLvlFn( SlaveVP *slaveVP, TopLevelFnPtr fnPtr, void *dataParam) { void *stackPtr; @@ -61,7 +61,7 @@ * *This preserves the stack state existed at time slave was suspended. */ -inline void +void VMS_int__point_slaveVP_to_OneParamFn( SlaveVP *slaveVP, void *fnPtr, void *param) { void *stackPtr; @@ -102,7 +102,7 @@ * *This preserves the stack state existed at time slave was suspended. */ -inline void +void VMS_int__point_slaveVP_to_TwoParamFn( SlaveVP *slaveVP, void *fnPtr, void *param1, void *param2) { void *stackPtr; diff -r 0dc0b8653902 -r aa79134dbc88 HW_Dependent_Primitives/VMS__primitives.h --- a/HW_Dependent_Primitives/VMS__primitives.h Mon Sep 03 03:34:54 2012 -0700 +++ b/HW_Dependent_Primitives/VMS__primitives.h Wed Oct 24 00:00:22 2012 -0700 @@ -43,11 +43,11 @@ void VMS_int__return_to_addr_in_ptd_to_loc(void *ptdToLoc); -inline void +void VMS_int__point_slaveVP_to_OneParamFn( SlaveVP *slaveVP, void *fnPtr, void *param); -inline void +void VMS_int__point_slaveVP_to_TwoParamFn( SlaveVP *slaveVP, void *fnPtr, void *param1, void *param2); diff -r 0dc0b8653902 -r aa79134dbc88 Services_Offered_by_VMS/Lang_Constructs/VMS_Lang.h --- a/Services_Offered_by_VMS/Lang_Constructs/VMS_Lang.h Mon Sep 03 03:34:54 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/* - * Copyright 2009 OpenSourceStewardshipFoundation.org - * Licensed under GNU General Public License version 2 - * - * Author: seanhalle@yahoo.com - * - */ - -#ifndef _VMS_LANG_CONSTRUCTS_H -#define _VMS_LANG_CONSTRUCTS_H - -#include "VMS_impl/VMS_primitive_data_types.h" - -/*This header defines everything specific to the VMS provided language - * constructs. - *Such constructs are used in application code, mixed-in with calls to - * constructs of the VMS-based language. - */ -inline void -handleMalloc( SSRSemReq *semReq, SlaveVP *requestingSlv, SSRSemEnv *semEnv); -inline void -handleFree( SSRSemReq *semReq, SlaveVP *requestingSlv, SSRSemEnv *semEnv ); -inline void -handleTransEnd(SSRSemReq *semReq, SlaveVP *requestingSlv, SSRSemEnv*semEnv); -inline void -handleTransStart( SSRSemReq *semReq, SlaveVP *requestingSlv, - SSRSemEnv *semEnv ); -inline void -handleAtomic( SSRSemReq *semReq, SlaveVP *requestingSlv, SSRSemEnv *semEnv); -inline void -handleStartFnSingleton( SSRSemReq *semReq, SlaveVP *reqstingSlv, - SSRSemEnv *semEnv ); -inline void -handleEndFnSingleton( SSRSemReq *semReq, SlaveVP *requestingSlv, - SSRSemEnv *semEnv ); -inline void -handleStartDataSingleton( SSRSemReq *semReq, SlaveVP *reqstingSlv, - SSRSemEnv *semEnv ); -inline void -handleEndDataSingleton( SSRSemReq *semReq, SlaveVP *requestingSlv, - SSRSemEnv *semEnv ); - -#endif /* _VMS_LANG_CONSTRUCTS_H */ - diff -r 0dc0b8653902 -r aa79134dbc88 Services_Offered_by_VMS/Measurement_and_Stats/probes.c --- a/Services_Offered_by_VMS/Measurement_and_Stats/probes.c Mon Sep 03 03:34:54 2012 -0700 +++ b/Services_Offered_by_VMS/Measurement_and_Stats/probes.c Wed Oct 24 00:00:22 2012 -0700 @@ -32,7 +32,7 @@ */ //============================ Helpers =========================== -inline void +void doNothing() { } diff -r 0dc0b8653902 -r aa79134dbc88 Services_Offered_by_VMS/Measurement_and_Stats/probes.h --- a/Services_Offered_by_VMS/Measurement_and_Stats/probes.h Mon Sep 03 03:34:54 2012 -0700 +++ b/Services_Offered_by_VMS/Measurement_and_Stats/probes.h Wed Oct 24 00:00:22 2012 -0700 @@ -48,6 +48,8 @@ float64 endSecs; \ float64 interval; \ DblHist *hist; /*if NULL, then is single interval probe*/ +#else + #define PROBES__Insert_timestamps_and_intervals_into_probe_struct #endif #ifdef PROBES__USE_PERF_CTR_PROBES #define PROBES__Insert_timestamps_and_intervals_into_probe_struct \ @@ -118,7 +120,7 @@ // This means probes have zero impact on performance when off //============================================================= -#ifdef PROBES__TURN_ON_STATS_PROBES +#ifdef SERVICE__TURN_ON_STATS_PROBES #define PROBES__Create_Probe_Bookkeeping_Vars \ _VMSMasterEnv->dynIntervalProbesInfo = \ @@ -186,7 +188,7 @@ #define VMS_WL__print_stats_of_probe( probeID ) ; /* do nothing */ #define VMS_WL__print_stats_of_all_probes() ;/* do nothing */ -#endif /* defined PROBES__TURN_ON_STATS_PROBES */ +#endif /* defined SERVICE__TURN_ON_STATS_PROBES */ #endif /* _PROBES_H */ diff -r 0dc0b8653902 -r aa79134dbc88 Services_Offered_by_VMS/Memory_Handling/vmalloc.c --- a/Services_Offered_by_VMS/Memory_Handling/vmalloc.c Mon Sep 03 03:34:54 2012 -0700 +++ b/Services_Offered_by_VMS/Memory_Handling/vmalloc.c Wed Oct 24 00:00:22 2012 -0700 @@ -7,15 +7,18 @@ * Created on November 14, 2009, 9:07 PM */ + #include -#include #include #include #include #include +#include "Histogram/Histogram.h" #include "VMS_impl/VMS.h" -#include "Histogram/Histogram.h" + +#include "vmalloc.h" + #define MAX_UINT64 0xFFFFFFFFFFFFFFFF @@ -265,7 +268,12 @@ foundChunk = removeSmallChunk(freeLists, freeListIdx); //Mark as allocated - foundChunk->prevChunkInFreeList = NULL; + foundChunk->prevChunkInFreeList = NULL; + + #ifdef SERVICE__TURN_ON_VALGRIND + VALGRIND_MAKE_MEM_UNDEFINED(foundChunk + 1,sizeRequested); + #endif + return foundChunk + 1; } @@ -284,6 +292,11 @@ MEAS__Capture_Post_Malloc_Point //skip over the prolog by adding its size to the pointer return + + #ifdef SERVICE__TURN_ON_VALGRIND + VALGRIND_MAKE_MEM_UNDEFINED(foundChunk + 1,sizeRequested); + #endif + return foundChunk + 1; } @@ -331,6 +344,11 @@ } size_t chunkSize = getChunkSize(chunkToFree); + + #ifdef SERVICE__TURN_ON_VALGRIND + VALGRIND_MAKE_MEM_UNDEFINED(chunkToFree,chunkSize); + #endif + if(chunkSize < BIG_LOWER_BOUND) { containerIdx = (chunkSize/SMALL_CHUNK_SIZE)-1; @@ -383,6 +401,11 @@ //Create first element in lastContainer MallocProlog *firstChunk = malloc( MALLOC_ADDITIONAL_MEM_FROM_OS_SIZE ); if( firstChunk == NULL ) {printf("Can't allocate initial memory\n"); exit(1);} + + #ifdef SERVICE__TURN_ON_VALGRIND + VALGRIND_MAKE_MEM_NOACCESS(firstChunk,MALLOC_ADDITIONAL_MEM_FROM_OS_SIZE); + #endif + freeLists->memSpace = firstChunk; //Touch memory to avoid page faults @@ -398,7 +421,7 @@ MALLOC_ADDITIONAL_MEM_FROM_OS_SIZE - sizeof(MallocProlog)); firstChunk->nextChunkInFreeList = NULL; //previous element in the queue is the container - firstChunk->prevChunkInFreeList = &freeLists->bigChunks[container-2]; + firstChunk->prevChunkInFreeList = (MallocProlog*) &freeLists->bigChunks[container-2]; freeLists->bigChunks[container-2] = firstChunk; //Insert into bit search list diff -r 0dc0b8653902 -r aa79134dbc88 Services_Offered_by_VMS/Memory_Handling/vmalloc.h --- a/Services_Offered_by_VMS/Memory_Handling/vmalloc.h Mon Sep 03 03:34:54 2012 -0700 +++ b/Services_Offered_by_VMS/Memory_Handling/vmalloc.h Wed Oct 24 00:00:22 2012 -0700 @@ -9,11 +9,15 @@ #ifndef _VMALLOC_H #define _VMALLOC_H +#include +#include -#include -#include #include "VMS_impl/VMS_primitive_data_types.h" +#ifdef SERVICE__TURN_ON_VALGRIND +#include Valgrind/memcheck.h +#endif + #define SMALL_CHUNK_SIZE 32 #define SMALL_CHUNK_COUNT 4 #define LOWER_BOUND 128 //Biggest chunk size that is created for the small chunks diff -r 0dc0b8653902 -r aa79134dbc88 Services_Offered_by_VMS/Memory_Handling/vmalloc.supp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Services_Offered_by_VMS/Memory_Handling/vmalloc.supp Wed Oct 24 00:00:22 2012 -0700 @@ -0,0 +1,29 @@ +{ + poolcreate + Memcheck:Addr1 + fun:VMS_ext__create_free_list +} + +{ + poolcreate + Memcheck:Addr4 + fun:VMS_ext__create_free_list +} +{ + poolcreate + Memcheck:Addr8 + fun:VMS_ext__create_free_list +} + +{ + vmsmalloc + Memcheck:Addr8 + ... + fun:VMS_int__malloc +} +{ + vmsmalloc + Memcheck:Addr4 + ... + fun:VMS_int__malloc +} diff -r 0dc0b8653902 -r aa79134dbc88 VMS.h --- a/VMS.h Mon Sep 03 03:34:54 2012 -0700 +++ b/VMS.h Wed Oct 24 00:00:22 2012 -0700 @@ -282,7 +282,7 @@ //============== =============== -inline SlaveVP * +SlaveVP * VMS_int__create_slaveVP( TopLevelFnPtr fnPtr, void *dataParam ); #define VMS_PI__create_slaveVP VMS_int__create_slaveVP #define VMS_WL__create_slaveVP VMS_int__create_slaveVP @@ -292,19 +292,19 @@ SlaveVP * VMS_ext__create_slaveVP( TopLevelFnPtr fnPtr, void *dataParam ); -inline SlaveVP * +SlaveVP * VMS_int__create_slaveVP_helper( SlaveVP *newSlv, TopLevelFnPtr fnPtr, void *dataParam, void *stackLocs ); -inline void +void VMS_int__reset_slaveVP_to_TopLvlFn( SlaveVP *slaveVP, TopLevelFnPtr fnPtr, void *dataParam); -inline void +void VMS_int__point_slaveVP_to_OneParamFn( SlaveVP *slaveVP, void *fnPtr, void *param); -inline void +void VMS_int__point_slaveVP_to_TwoParamFn( SlaveVP *slaveVP, void *fnPtr, void *param1, void *param2); @@ -330,12 +330,12 @@ //No WL version -- not safe! if use in WL, be sure data rd & wr is stable -inline void +void VMS_int__get_master_lock(); #define VMS_int__release_master_lock() _VMSMasterEnv->masterLock = UNLOCKED -inline uint32_t +uint32_t VMS_int__randomNumber(); //============== Request Related =============== @@ -343,30 +343,30 @@ void VMS_int__suspend_slaveVP_and_send_req( SlaveVP *callingSlv ); -inline void +void VMS_WL__add_sem_request_in_mallocd_VMSReqst( void *semReqData, SlaveVP *callingSlv ); -inline void +void VMS_WL__send_sem_request( void *semReqData, SlaveVP *callingSlv ); void VMS_WL__send_create_slaveVP_req( void *semReqData, SlaveVP *reqstingSlv ); -void inline +void VMS_WL__send_dissipate_req( SlaveVP *prToDissipate ); -inline void +void VMS_WL__send_VMSSem_request( void *semReqData, SlaveVP *callingSlv ); VMSReqst * VMS_PI__take_next_request_out_of( SlaveVP *slaveWithReq ); //#define VMS_PI__take_next_request_out_of( slave ) slave->requests -//inline void * +//void * //VMS_PI__take_sem_reqst_from( VMSReqst *req ); #define VMS_PI__take_sem_reqst_from( req ) req->semReqData -void inline +void VMS_PI__handle_VMSSemReq( VMSReqst *req, SlaveVP *requestingSlv, void *semEnv, ResumeSlvFnPtr resumeSlvFnPtr ); @@ -378,7 +378,7 @@ //========================= Utilities ======================= -inline char * +char * VMS_int__strDup( char *str ); diff -r 0dc0b8653902 -r aa79134dbc88 VMS__PI.c --- a/VMS__PI.c Mon Sep 03 03:34:54 2012 -0700 +++ b/VMS__PI.c Wed Oct 24 00:00:22 2012 -0700 @@ -23,10 +23,10 @@ */ //========================= Local Declarations ======================== -void inline +void handleMakeProbe( VMSSemReq *semReq, void *semEnv, ResumeSlvFnPtr resumeFn ); -void inline +void handleThrowException( VMSSemReq *semReq, void *semEnv, ResumeSlvFnPtr resumeFn ); //======================================================================= @@ -49,7 +49,7 @@ * *Turn function into macro that just accesses the request field * -inline void * + void * VMS_PI__take_sem_reqst_from( VMSReqst *req ) { return req->semReqData; @@ -71,7 +71,7 @@ * VMS-core steer the request to appropriate plugin * Do the same for OS calls -- look later at it.. */ -void inline +void VMS_PI__handle_VMSSemReq( VMSReqst *req, SlaveVP *requestingSlv, void *semEnv, ResumeSlvFnPtr resumeFn ) { VMSSemReq *semReq; @@ -84,6 +84,8 @@ break; case throw_excp: handleThrowException( semReq, semEnv, resumeFn); break; + default: + break; } } diff -r 0dc0b8653902 -r aa79134dbc88 VMS__WL.c --- a/VMS__WL.c Mon Sep 03 03:34:54 2012 -0700 +++ b/VMS__WL.c Wed Oct 24 00:00:22 2012 -0700 @@ -94,7 +94,7 @@ * *The request handler has to call VMS_int__free_VMSReq for any of these */ -inline void +void VMS_WL__add_sem_request_in_mallocd_VMSReqst( void *semReqData, SlaveVP *callingSlv ) { VMSReqst *req; @@ -111,7 +111,7 @@ * to plugin *Then it does suspend, to cause request to be sent. */ -inline void +void VMS_WL__send_sem_request( void *semReqData, SlaveVP *callingSlv ) { VMSReqst req; @@ -127,7 +127,7 @@ /*May 2012 Not sure what this is.. looks like old idea for VMS semantic * request */ -inline void +void VMS_WL__send_VMSSem_request( void *semReqData, SlaveVP *callingSlv ) { VMSReqst req; diff -r 0dc0b8653902 -r aa79134dbc88 VMS__int.c --- a/VMS__int.c Mon Sep 03 03:34:54 2012 -0700 +++ b/VMS__int.c Wed Oct 24 00:00:22 2012 -0700 @@ -11,8 +11,12 @@ #include #include +#include + #include "VMS.h" +#include +ssize_t read(int fd, void *buf, size_t count); /* MEANING OF WL PI SS int * These indicate which places the function is safe to use. They stand for: @@ -23,7 +27,7 @@ */ -inline SlaveVP * +SlaveVP * VMS_int__create_slaveVP( TopLevelFnPtr fnPtr, void *dataParam ) { SlaveVP *newSlv; void *stackLocs; @@ -42,7 +46,7 @@ * be called from main thread or other thread -- never from code animated by * a VMS virtual processor. */ -inline SlaveVP * +SlaveVP * VMS_ext__create_slaveVP( TopLevelFnPtr fnPtr, void *dataParam ) { SlaveVP *newSlv; char *stackLocs; @@ -173,7 +177,7 @@ /* * */ -inline SlaveVP * +SlaveVP * VMS_int__create_slaveVP_helper( SlaveVP *newSlv, TopLevelFnPtr fnPtr, void *dataParam, void *stackLocs ) { @@ -187,7 +191,7 @@ VMS_int__reset_slaveVP_to_TopLvlFn( newSlv, fnPtr, dataParam ); //============================= MEASUREMENT STUFF ======================== - #ifdef PROBES__TURN_ON_STATS_PROBES + #ifdef SERVICE__TURN_ON_STATS_PROBES //TODO: make this TSCHiLow or generic equivalent //struct timeval timeStamp; //gettimeofday( &(timeStamp), NULL); @@ -212,7 +216,7 @@ } -inline char * +char * VMS_int__strDup( char *str ) { char *retStr; @@ -224,12 +228,12 @@ } -inline void +void VMS_int__backoff_for_TooLongToGetLock( int32 numTriesToGetLock ); -inline void +void VMS_int__get_master_lock() - { int32 *addrOfMasterLock; + { volatile int32 *addrOfMasterLock; addrOfMasterLock = &(_VMSMasterEnv->masterLock); @@ -246,7 +250,7 @@ } if( numTriesToGetLock > MASTERLOCK_RETRIES_BEFORE_YIELD ) { numTriesToGetLock = 0; - pthread_yield(); + sched_yield(); } //try to get the lock @@ -260,7 +264,7 @@ * system rand because it takes much too long. *Note, are passing pointers to the seeds, which are then modified */ -inline uint32_t +uint32_t VMS_int__randomNumber() { _VMSMasterEnv->seed1 = 36969 * (_VMSMasterEnv->seed1 & 65535) + @@ -274,7 +278,7 @@ /*Busy-waits for a random number of cycles -- chooses number of cycles * differently than for the no-work backoff */ -inline void +void VMS_int__backoff_for_TooLongToGetLock( int32 numTriesToGetLock ) { int32 i, waitIterations; volatile double fakeWorkVar; //busy-wait fake work diff -r 0dc0b8653902 -r aa79134dbc88 VMS__startup_and_shutdown.c --- a/VMS__startup_and_shutdown.c Mon Sep 03 03:34:54 2012 -0700 +++ b/VMS__startup_and_shutdown.c Wed Oct 24 00:00:22 2012 -0700 @@ -408,7 +408,7 @@ { _VMSMasterEnv->slaveAssigner = animAssigner; } -VMS_SS__register_semantic_env( void *semanticEnv ) +void VMS_SS__register_semantic_env( void *semanticEnv ) { _VMSMasterEnv->semanticEnv = semanticEnv; } @@ -582,7 +582,7 @@ VMS_int__free( _VMSMasterEnv->allAnimSlots ); //============================= MEASUREMENT STUFF ======================== - #ifdef PROBES__TURN_ON_STATS_PROBES + #ifdef SERVICE__TURN_ON_STATS_PROBES freeDynArrayDeep( _VMSMasterEnv->dynIntervalProbesInfo, &VMS_WL__free_probe); #endif //======================================================================== diff -r 0dc0b8653902 -r aa79134dbc88 __brch__Common_ancestor --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/__brch__Common_ancestor Wed Oct 24 00:00:22 2012 -0700 @@ -0,0 +1,34 @@ +A HW branch for: + +generic MultiCore machines with x86 64bit instruction set + +This branch shouldn't be used, except as a lazy fall-back. Instead, try out other branches tuned to specific hardware platforms to find the one that performs best on your machine. Use the "exe_time_vs_task_size" project to generate curves of overhead, and compare result from various branches. + +Note, if this branch is used, then NUM_CORES in VMS_HW_specific_defs.h file has to be updated with the number of cores in your machine + + +======== Background on branch naming ========= + +There are two kinds of branchs: ones used to develop features, and ones tuned to particular hardware. A given HW branch may combine features from several feature-branches, picking and choosing among them. + +After Feb 2012, branches are named by the scheme: + +feat____ + +HW__ + +where and follow the pattern: + + x __ + +Examples: + +feat__exp_array_malloc + +feat__rand_backoff__4x10_Intel_WestmereEx + +HW__1x4_Intel_SandyBridge + +HW__4x10_Intel_WestmereEx + +HW__1x4_AMD_mobile diff -r 0dc0b8653902 -r aa79134dbc88 __brch__Dev_ML --- a/__brch__Dev_ML Mon Sep 03 03:34:54 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -This branch is for developing the multi-language capability in VMS. The idea is to define langlets, whose constructs can be freely mixed together inside application code. No need to separate into distinct modules. A single function can use constructs from all the different langlets together inside itself. - - -======== Background on branch naming ========= - -There are two kinds of branchs: ones used to develop features, and ones tuned to particular hardware. A given HW branch may combine features from several feature-branches, picking and choosing among them. - -After Feb 2012, branches are named by the scheme: - -feat____ - -HW__ - -where and follow the pattern: - - x __ - -Examples: - -feat__exp_array_malloc - -feat__rand_backoff__4x10_Intel_WestmereEx - -HW__1x4_Intel_SandyBridge - -HW__4x10_Intel_WestmereEx - -HW__1x4_AMD_mobile