summaryrefslogtreecommitdiff
path: root/src/gpgpu-sim/icnt_wrapper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpgpu-sim/icnt_wrapper.cc')
-rw-r--r--src/gpgpu-sim/icnt_wrapper.cc91
1 files changed, 76 insertions, 15 deletions
diff --git a/src/gpgpu-sim/icnt_wrapper.cc b/src/gpgpu-sim/icnt_wrapper.cc
index f8c981d..c005dd9 100644
--- a/src/gpgpu-sim/icnt_wrapper.cc
+++ b/src/gpgpu-sim/icnt_wrapper.cc
@@ -27,13 +27,18 @@
#include "icnt_wrapper.h"
#include <assert.h>
-#include "../intersim/interconnect_interface.h"
+#include "../intersim2/globals.hpp"
+#include "../intersim2/interconnect_interface.hpp"
+icnt_init_p icnt_init;
icnt_has_buffer_p icnt_has_buffer;
icnt_push_p icnt_push;
icnt_pop_p icnt_pop;
icnt_transfer_p icnt_transfer;
icnt_busy_p icnt_busy;
+icnt_display_stats_p icnt_display_stats;
+icnt_display_overall_stats_p icnt_display_overall_stats;
+icnt_display_state_p icnt_display_state;
icnt_get_flit_size_p icnt_get_flit_size;
int g_network_mode;
@@ -41,27 +46,83 @@ char* g_network_config_filename;
#include "../option_parser.h"
+// Wrapper to intersim2 to accompany old icnt_wrapper
+// TODO: use delegate/boost/c++11<funtion> instead
+static void intersim2_init()
+{
+ g_icnt_interface->Init();
+}
+
+static bool intersim2_has_buffer(unsigned input, unsigned int size)
+{
+ return g_icnt_interface->HasBuffer(input, size);
+}
+
+static void intersim2_push(unsigned input, unsigned output, void* data, unsigned int size)
+{
+ g_icnt_interface->Push(input, output, data, size);
+}
+
+static void* intersim2_pop(unsigned output)
+{
+ return g_icnt_interface->Pop(output);
+}
+
+static void intersim2_transfer()
+{
+ g_icnt_interface->Advance();
+}
+
+static bool intersim2_busy()
+{
+ return g_icnt_interface->Busy();
+}
+
+static void intersim2_display_stats()
+{
+ g_icnt_interface->DisplayStats();
+}
+
+static void intersim2_display_overall_stats()
+{
+ g_icnt_interface->DisplayOverallStats();
+}
+
+static void intersim2_display_state(FILE *fp)
+{
+ g_icnt_interface->DisplayState(fp);
+}
+
+static unsigned intersim2_get_flit_size()
+{
+ return g_icnt_interface->GetFlitSize();
+}
+
void icnt_reg_options( class OptionParser * opp )
{
option_parser_register(opp, "-network_mode", OPT_INT32, &g_network_mode, "Interconnection network mode", "1");
option_parser_register(opp, "-inter_config_file", OPT_CSTR, &g_network_config_filename, "Interconnection network config file", "mesh");
}
-void icnt_init( unsigned int n_shader, unsigned int n_mem )
+void icnt_wrapper_init( unsigned int n_shader, unsigned int n_mem )
{
switch (g_network_mode) {
- case INTERSIM:
- init_interconnect(g_network_config_filename, n_shader, n_mem );
- icnt_has_buffer = interconnect_has_buffer;
- icnt_push = interconnect_push;
- icnt_pop = interconnect_pop;
- icnt_transfer = advance_interconnect;
- icnt_busy = interconnect_busy;
- icnt_get_flit_size = interconnect_get_flit_size;
- break;
-
- default:
- assert(0);
- break;
+ case INTERSIM:
+ //FIXME: delete the object: may add icnt_done wrapper
+ g_icnt_interface = new InterconnectInterface(g_network_config_filename, n_shader, n_mem );
+ icnt_init = intersim2_init;
+ icnt_has_buffer = intersim2_has_buffer;
+ icnt_push = intersim2_push;
+ icnt_pop = intersim2_pop;
+ icnt_transfer = intersim2_transfer;
+ icnt_busy = intersim2_busy;
+ icnt_display_stats = intersim2_display_stats;
+ icnt_display_overall_stats = intersim2_display_overall_stats;
+ icnt_display_state = intersim2_display_state;
+ icnt_get_flit_size = intersim2_get_flit_size;
+ break;
+ default:
+ assert(0);
+ break;
}
}