Skip to content

Commit 296c9ab

Browse files
committed
update kitfox_proxy framework for cache-counters
1 parent 3b40425 commit 296c9ab

File tree

12 files changed

+962
-657
lines changed

12 files changed

+962
-657
lines changed

models/cache/mcp-cache/L1_cache.h

+27-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
#include "uarch/DestMap.h"
1212
#include "uarch/networkPacket.h"
1313

14+
#ifdef LIBKITFOX
15+
#include "uarch/kitfoxCounter.h"
16+
#endif
1417

1518

1619
namespace manifold {
@@ -27,7 +30,7 @@ struct L1_cache_settings {
2730
class L1_cache : public manifold::kernel::Component {
2831
public:
2932

30-
enum {PORT_PROC=0, PORT_L2};
33+
enum {PORT_PROC=0, PORT_L2, PORT_KITFOX};
3134

3235
L1_cache (int nid, const cache_settings&, const L1_cache_settings&);
3336
virtual ~L1_cache (void);
@@ -61,6 +64,11 @@ class L1_cache : public manifold::kernel::Component {
6164
CREDIT_MSG = credit;
6265
}
6366

67+
#ifdef LIBKITFOX
68+
template<typename T>
69+
void handle_kitfox_proxy_request(int temp, T *kitfox_proxy_request);
70+
#endif
71+
6472
private:
6573
//void issue_to_client (cache_req *request);
6674
//void issue_to_manager (cache_req *request);
@@ -170,6 +178,10 @@ class L1_cache : public manifold::kernel::Component {
170178
unsigned stats_stall_buffer_max_size;
171179
unsigned long stats_table_occupancy; //accumulated hash table occupancy
172180
unsigned stats_table_empty_cycles;
181+
182+
#ifdef LIBKITFOX
183+
manifold::uarch::cache_counter_t counter;
184+
#endif
173185
};
174186

175187

@@ -198,6 +210,20 @@ void L1_cache :: handle_processor_request(int, T* request)
198210
}
199211

200212

213+
#ifdef LIBKITFOX
214+
template <typename T>
215+
void L1_cache :: handle_kitfox_proxy_request(int temp, T *kitfox_proxy_request)
216+
{
217+
assert(kitfox_proxy_request->get_type() == manifold::uarch::KitFoxType::l1cache_type);
218+
assert(kitfox_proxy_request->get_id() == node_id);
219+
220+
kitfox_proxy_request->set_counter(counter);
221+
counter.clear();
222+
223+
Send(PORT_KITFOX, kitfox_proxy_request);
224+
}
225+
#endif // LIBKITFOX
226+
201227

202228

203229
} //namespace mcp_cache

models/cache/mcp-cache/L2_cache.h

+28-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
#include "uarch/networkPacket.h"
1111
#include "uarch/DestMap.h"
1212

13+
#ifdef LIBKITFOX
14+
#include "uarch/kitfoxCounter.h"
15+
#endif
16+
1317

1418
using namespace std;
1519

@@ -29,7 +33,7 @@ struct L2_cache_settings {
2933

3034
class L2_cache : public manifold::kernel::Component {
3135
public:
32-
enum {PORT_L1=0};
36+
enum {PORT_L1=0, PORT_KITFOX};
3337

3438
L2_cache (int nid, const cache_settings&, const L2_cache_settings&);
3539
virtual ~L2_cache (void);
@@ -59,6 +63,12 @@ class L2_cache : public manifold::kernel::Component {
5963
MEM_MSG = mem;
6064
CREDIT_MSG = credit;
6165
}
66+
67+
#ifdef LIBKITFOX
68+
template <typename T>
69+
void handle_kitfox_proxy_request(int temp, T *kitfox_proxy_request);
70+
#endif
71+
6272
private:
6373
void process_client_request (Coh_msg* request, bool first);
6474
void process_client_reply (Coh_msg* reply);
@@ -152,6 +162,10 @@ class L2_cache : public manifold::kernel::Component {
152162
unsigned stats_mshr_empty_cycles;
153163
unsigned stats_read_mem;
154164
unsigned stats_dirty_to_mem;
165+
166+
#ifdef LIBKITFOX
167+
manifold::uarch::cache_counter_t counter;
168+
#endif
155169
};
156170

157171

@@ -193,6 +207,19 @@ void L2_cache :: handle_incoming (int, manifold::uarch::NetworkPacket* pkt)
193207
}
194208

195209

210+
#ifdef LIBKITFOX
211+
template <typename T>
212+
void L2_cache :: handle_kitfox_proxy_request(int temp, T *kitfox_proxy_request)
213+
{
214+
assert(kitfox_proxy_request->get_type() == manifold::uarch::KitFoxType::l2cache_type);
215+
assert(kitfox_proxy_request->get_id() == node_id);
216+
217+
kitfox_proxy_request->set_counter(counter);
218+
counter.clear();
219+
220+
Send(PORT_KITFOX, kitfox_proxy_request);
221+
}
222+
#endif // LIBKITFOX
196223

197224

198225

models/cache/mcp-cache/Makefile.am

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ pkginclude_mcp_cache_HEADERS = \
6161
lp_lls_unit.h \
6262
mux_demux.h
6363

64-
libmcp_cache_a_CPPFLAGS = -I$(KERNEL_INC)
64+
libmcp_cache_a_CPPFLAGS = -I$(KERNEL_INC) -I$(KITFOX_INC) --std=c++11
6565

6666
EXTRA_DIST = doc
6767

models/cache/mcp-cache/configure.ac

+32
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,38 @@ if test "x${forecast_null}" = xyes ; then
9494
AC_DEFINE(FORECAST_NULL)
9595
fi
9696

97+
# check kitfox integration
98+
AC_ARG_WITH([kitfox],
99+
[AS_HELP_STRING([--without-kitfox],
100+
[do not use QSim @<:@default: no@:>@])],
101+
[kitfox=${enableval}], [kitfox=yes])
102+
103+
if test "x${kitfox}" = xyes ; then
104+
#check if QSim header files exist
105+
# We allow user to specify the location of the header files, e.g.,
106+
# configure KITFOXINC=/foo/kitfox
107+
if test -z "$KITFOXINC" ; then
108+
KITFOXINC='/usr/local/include'
109+
fi
110+
111+
if test ! -e "$KITFOXINC/kitfox.h"; then
112+
AC_MSG_ERROR([
113+
-----------------------------------------
114+
ERROR: kitfox.h not found in $KITFOXINC!
115+
-----------------------------------------
116+
])
117+
else
118+
AC_DEFINE(LIBKITFOX)
119+
AC_SUBST([KITFOX_INC], [$KITFOXINC])
120+
fi
121+
else # use_kitfox disabled
122+
AC_MSG_WARN([
123+
-----------------------------------------------------------------
124+
LIBKITFOX disabled! Building only processor models not using KitFox.
125+
-----------------------------------------------------------------])
126+
AC_SUBST([KITFOX_INC], ["."])
127+
fi
128+
97129

98130
# Checks for typedefs, structures, and compiler characteristics.
99131
AC_HEADER_STDBOOL

0 commit comments

Comments
 (0)