-
Notifications
You must be signed in to change notification settings - Fork 4
/
check_table_vector_txt.cc
60 lines (56 loc) · 1.69 KB
/
check_table_vector_txt.cc
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
/*
check table_vector.txt for data hazards
Copyright 2019 Ahmet Inan <inan@aicodix.de>
*/
#include <fstream>
#include <iostream>
#include "ldpc_vector.hh"
const int PIPELINE_LENGTH = 13;
int main()
{
int offsets[VECTOR_PARITIES_MAX][COUNT_MAX];
int shifts[VECTOR_PARITIES_MAX][COUNT_MAX];
int counts[VECTOR_PARITIES_MAX];
int parities = 0;
std::ifstream table_txt("table_vector.txt");
for (; table_txt >> counts[parities]; ++parities) {
for (int num = 0; num < counts[parities]; ++num) {
table_txt >> offsets[parities][num];
table_txt.ignore(1, ':');
table_txt >> shifts[parities][num];
}
}
int violations = 0;
for (int pty = 0; pty < parities; ++pty) {
for (int num0 = 0; num0 < counts[pty]; ++num0) {
for (int num1 = num0+1; num1 < counts[pty]; ++num1) {
if (offsets[pty][num0] == offsets[pty][num1]) {
if (num0+1 == num1) {
num0 = num1;
} else {
std::cout << "parity " << pty << " has nonconsecutive same location offsets " << offsets[pty][num0] << std::endl;
++violations;
}
}
}
}
}
for (int pty0 = 0; pty0 < parities; ++pty0) {
for (int num0 = 0; num0 < counts[pty0]; ++num0) {
for (int pty1 = (pty0 + 1) % parities, dist = PIPELINE_LENGTH + num0; dist > 0; pty1 = (pty1 + 1) % parities) {
for (int num1 = 0; num1 < counts[pty1] && dist > 0; ++num1, --dist) {
if (offsets[pty0][num0] == offsets[pty1][num1]) {
std::cout << "parities " << pty0 << " and " << pty1 << " have same location offset " << offsets[pty0][num0] << std::endl;
++violations;
}
}
}
}
}
if (violations)
std::cout << violations;
else
std::cout << "no";
std::cout << " violations detected." << std::endl;
return !!violations;
}