-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaddressGroup.cpp
More file actions
67 lines (52 loc) · 1.72 KB
/
Copy pathaddressGroup.cpp
File metadata and controls
67 lines (52 loc) · 1.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include<cstdint>
#include<cstddef>
#include<cstdlib>
#include<iostream>
#include<vector>
#include<algorithm>
#include "addressGroup.h"
#include "helper.h"
using namespace std;
AddressGroup::AddressGroup(Config *config) {
this->addresses = new vector<void *>();
this->blockSize = config->getBlockSize();
this->nCompareAddresses = config->getNumberOfGroupAddressesToCompare();
this->nMeasurementsPerComparison = config->getNumberOfMeasurementsPerGroupAddressComparisons();
this->fenced = config->areMemoryFencesEnabled();
}
AddressGroup::~AddressGroup(void) {
delete addresses;
}
void AddressGroup::addAddressToGroup(void *address) {
addresses->push_back(address);
}
uint64_t AddressGroup::getNumberOfAddresses() {
return addresses->size();
}
uint64_t AddressGroup::getBlockSize() {
return blockSize;
}
void AddressGroup::setBlockSize(uint64_t newBlockSize) {
blockSize = newBlockSize;
}
uint64_t AddressGroup::compareAddressTiming(void *address) {
vector<uint64_t>accessTimes;
vector<uint64_t> *indices = getRandomIndices(addresses->size(), nCompareAddresses);
for(uint64_t index : *indices) {
accessTimes.push_back(measureAccessTime((*(addresses))[index], address, nMeasurementsPerComparison, fenced));
}
delete indices;
sort(accessTimes.begin(), accessTimes.end(), greater<int>());
return accessTimes[accessTimes.size()/2];
}
vector<void *> *AddressGroup::getAddresses() {
return addresses;
}
void AddressGroup::print(string prefix, bool listAddresses) {
printf("%sThe address group contains %ld addresses.\n", prefix.c_str(), addresses->size());
if(listAddresses) {
for(uint64_t i = 0; i < addresses->size(); i++) {
printf("%s Address:%p", prefix.c_str(), (*addresses)[i]);
}
}
}