aboutsummaryrefslogtreecommitdiff
path: root/qtmips_gui
diff options
context:
space:
mode:
authorPavel Pisa <pisa@cmp.felk.cvut.cz>2019-02-20 14:17:32 +0100
committerPavel Pisa <pisa@cmp.felk.cvut.cz>2019-02-20 14:17:32 +0100
commitadb9f147e358f687b37f5bf14c68f559c7c86a79 (patch)
treef6e62a99e0f005401871c138103acdfe008ce1a1 /qtmips_gui
parentb01f4f6c24ed6ff80f822d6ed546c188655bda27 (diff)
downloadqtmips-adb9f147e358f687b37f5bf14c68f559c7c86a79.tar.gz
qtmips-adb9f147e358f687b37f5bf14c68f559c7c86a79.tar.bz2
qtmips-adb9f147e358f687b37f5bf14c68f559c7c86a79.zip
Distinguish between write-through cache with allocate and update only if hit.
Add into cache statistic number of backing/main memory accesses. Correction of meaning and computation of the cache statistic. Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Diffstat (limited to 'qtmips_gui')
-rw-r--r--qtmips_gui/NewDialogCache.ui7
-rw-r--r--qtmips_gui/cachedock.cpp38
-rw-r--r--qtmips_gui/cachedock.h8
3 files changed, 39 insertions, 14 deletions
diff --git a/qtmips_gui/NewDialogCache.ui b/qtmips_gui/NewDialogCache.ui
index b636fde..f698287 100644
--- a/qtmips_gui/NewDialogCache.ui
+++ b/qtmips_gui/NewDialogCache.ui
@@ -102,7 +102,12 @@
<widget class="QComboBox" name="writeback_policy">
<item>
<property name="text">
- <string>Write trough</string>
+ <string>Write trough - noallocate</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Write trough - write allocate</string>
</property>
</item>
<item>
diff --git a/qtmips_gui/cachedock.cpp b/qtmips_gui/cachedock.cpp
index 3a8aa43..19906a2 100644
--- a/qtmips_gui/cachedock.cpp
+++ b/qtmips_gui/cachedock.cpp
@@ -40,9 +40,6 @@ CacheDock::CacheDock(QWidget *parent, const QString &type) : QDockWidget(parent)
setWidget(top_widget);
layout_box = new QVBoxLayout(top_widget);
- no_cache = new QLabel("No " + type + " Cache configured", top_widget);
- layout_box->addWidget(no_cache);
-
top_form = new QWidget(top_widget);
top_form->setVisible(false);
layout_box->addWidget(top_form);
@@ -52,18 +49,25 @@ CacheDock::CacheDock(QWidget *parent, const QString &type) : QDockWidget(parent)
layout_top_form->addRow("Hit:", l_hit);
l_miss = new QLabel("0", top_form);
layout_top_form->addRow("Miss:", l_miss);
+ l_m_reads = new QLabel("0", top_form);
+ layout_top_form->addRow("Memory reads:", l_m_reads);
+ l_m_writes = new QLabel("0", top_form);
+ layout_top_form->addRow("Memory writes:", l_m_writes);
l_stalled = new QLabel("0", top_form);
layout_top_form->addRow("Memory stall cycles:", l_stalled);
- l_usage = new QLabel("0.000%", top_form);
- layout_top_form->addRow("Usage effectiveness:", l_usage);
+ l_hit_rate = new QLabel("0.000%", top_form);
+ layout_top_form->addRow("Hit rate:", l_hit_rate);
l_speed = new QLabel("100%", top_form);
- layout_top_form->addRow("Speed improvement:", l_speed);
+ layout_top_form->addRow("Improved speed:", l_speed);
graphicsview = new GraphicsView(top_widget);
graphicsview->setVisible(false);
layout_box->addWidget(graphicsview);
cachescene = nullptr;
+ no_cache = new QLabel("No " + type + " Cache configured", top_widget);
+ layout_box->addWidget(no_cache);
+
setObjectName(type + "Cache");
setWindowTitle(type + " Cache");
}
@@ -72,14 +76,18 @@ void CacheDock::setup(const machine::Cache *cache) {
l_hit->setText("0");
l_miss->setText("0");
l_stalled->setText("0");
- l_usage->setText("0.000%");
+ l_m_reads->setText("0");
+ l_m_writes->setText("0");
+ l_hit_rate->setText("0.000%");
l_speed->setText("100%");
- if (cache->config().enabled()) {
+ if (cache != nullptr) {
connect(cache, SIGNAL(hit_update(uint)), this, SLOT(hit_update(uint)));
connect(cache, SIGNAL(miss_update(uint)), this, SLOT(miss_update(uint)));
+ connect(cache, SIGNAL(memory_reads_update(uint)), this, SLOT(memory_reads_update(uint)));
+ connect(cache, SIGNAL(memory_writes_update(uint)), this, SLOT(memory_writes_update(uint)));
connect(cache, SIGNAL(statistics_update(uint,double,double)), this, SLOT(statistics_update(uint,double,double)));
}
- top_form->setVisible(cache->config().enabled());
+ top_form->setVisible(cache != nullptr);
no_cache->setVisible(!cache->config().enabled());
if (cachescene)
@@ -97,8 +105,16 @@ void CacheDock::miss_update(unsigned val) {
l_miss->setText(QString::number(val));
}
-void CacheDock::statistics_update(unsigned stalled_cycles, double speed_improv, double usage_effic) {
+void CacheDock::memory_reads_update(unsigned val) {
+ l_m_reads->setText(QString::number(val));
+}
+
+void CacheDock::memory_writes_update(unsigned val) {
+ l_m_writes->setText(QString::number(val));
+}
+
+void CacheDock::statistics_update(unsigned stalled_cycles, double speed_improv, double hit_rate) {
l_stalled->setText(QString::number(stalled_cycles));
- l_usage->setText(QString::number(usage_effic, 'f', 3) + QString("%"));
+ l_hit_rate->setText(QString::number(hit_rate, 'f', 3) + QString("%"));
l_speed->setText(QString::number(speed_improv, 'f', 0) + QString("%"));
}
diff --git a/qtmips_gui/cachedock.h b/qtmips_gui/cachedock.h
index 857eb20..b76f760 100644
--- a/qtmips_gui/cachedock.h
+++ b/qtmips_gui/cachedock.h
@@ -53,13 +53,17 @@ public:
private slots:
void hit_update(unsigned);
void miss_update(unsigned);
- void statistics_update(unsigned stalled_cycles, double speed_improv, double usage_effic);
+ void memory_reads_update(unsigned val);
+ void memory_writes_update(unsigned val);
+ void statistics_update(unsigned stalled_cycles, double speed_improv, double hit_rate);
private:
QVBoxLayout *layout_box;
QWidget *top_widget, *top_form;
QFormLayout *layout_top_form;
- QLabel *l_hit, *l_miss, *l_stalled, *l_speed, *l_usage, *no_cache;
+ QLabel *l_hit, *l_miss, *l_stalled, *l_speed, *l_hit_rate;
+ QLabel *no_cache;
+ QLabel *l_m_reads, *l_m_writes;
GraphicsView *graphicsview;
CacheViewScene *cachescene;
};