Fennel: /home/pub/open/dev/fennel/exec/SimpleExecStreamGovernor.h Source File (original) (raw)

00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 #ifndef Fennel_SimpleExecStreamGovernor_Included 00025 #define Fennel_SimpleExecStreamGovernor_Included 00026 00027 #include "fennel/exec/ExecStreamGovernor.h" 00028 00029 #include <boost/scoped_array.hpp> 00030 00031 FENNEL_BEGIN_NAMESPACE 00032 00040 class FENNEL_EXEC_EXPORT SimpleExecStreamGovernor 00041 : public ExecStreamGovernor 00042 { 00046 uint perGraphAllocation; 00047 00051 inline uint computePerGraphAllocation(); 00052 00061 void assignCachePages( 00062 std::vector &streams, 00063 boost::scoped_array const &reqts, 00064 bool assignMin); 00065 00094 uint distributeCachePages( 00095 std::vector &streams, 00096 boost::scoped_array const &reqts, 00097 boost::scoped_array const &sqrtDiffOptMin, 00098 double totalSqrtDiffs, 00099 uint excessAvailable, bool assignOpt); 00100 00101 public: 00102 explicit SimpleExecStreamGovernor( 00103 ExecStreamResourceKnobs const &knobSettings, 00104 ExecStreamResourceQuantity const &resourcesAvailable, 00105 SharedTraceTarget pTraceTarget, 00106 std::string name); 00107 00108 virtual ~SimpleExecStreamGovernor(); 00109 00110
00111 virtual bool setResourceKnob( 00112 ExecStreamResourceKnobs const &knob, 00113 ExecStreamResourceKnobType knobType); 00114 virtual bool setResourceAvailability( 00115 ExecStreamResourceQuantity const &available, 00116 ExecStreamResourceType resourceType); 00117 virtual void requestResources(ExecStreamGraph &graph); 00118 virtual void returnResources(ExecStreamGraph &graph); 00119 }; 00120 00121 inline uint SimpleExecStreamGovernor::computePerGraphAllocation() 00122 { 00123 return (resourcesAvailable.nCachePages + resourcesAssigned.nCachePages) / 00124 knobSettings.expectedConcurrentStatements; 00125 } 00126 00127 FENNEL_END_NAMESPACE 00128 00129 #endif 00130 00131