Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions Tools/SeeDot/SeeDot-dev.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class Dataset:
common = ["cifar-binary", "cr-binary", "cr-multiclass", "curet-multiclass",
"letter-multiclass", "mnist-binary", "mnist-multiclass",
"usps-binary", "usps-multiclass", "ward-binary", "test"]
extra = ["cifar-multiclass", "dsa", "eye-binary", "farm-beats",
extra = ["cifar-multiclass", "imagenet", "dsa", "eye-binary", "farm-beats",
"interactive-cane", "spectakoms", "usps10", "whale-binary",
"HAR-2", "HAR-6", "MNIST-10", "Google-12", "Google-30", "Wakeword-2",
"wider-regression", "wider-mbconv", "face-1", "face-2"]
Expand All @@ -51,8 +51,8 @@ def parseArgs(self):
default=config.Version.default, metavar='', help="Floating-point or fixed-point")
parser.add_argument("-d", "--dataset", choices=Dataset.all,
default=Dataset.default, metavar='', help="Dataset to use")
parser.add_argument("-m", "--maximisingMetric", choices=config.MaximisingMetric.all, metavar='',
help="What metric to maximise during exploration",default=config.MaximisingMetric.default)
parser.add_argument("-m", "--metric", choices=config.Metric.all, metavar='',
help="What metric to maximise during exploration",default=config.Metric.default)
parser.add_argument("-n", "--numOutputs", type=int, metavar='',
help="Number of simultaneous outputs of the inference procedure",default=1)
parser.add_argument("-dt", "--datasetType", choices=config.DatasetType.all,
Expand Down Expand Up @@ -89,8 +89,8 @@ def parseArgs(self):
self.args.datasetType = [self.args.datasetType]
if not isinstance(self.args.target, list):
self.args.target = [self.args.target]
if not isinstance(self.args.maximisingMetric, list):
self.args.maximisingMetric = [self.args.maximisingMetric]
if not isinstance(self.args.metric, list):
self.args.metric = [self.args.metric]

if self.args.tempdir is not None:
assert os.path.isdir(
Expand Down Expand Up @@ -148,8 +148,8 @@ def runMainDriver(self):

results = self.loadResultsFile()

for iter in product(self.args.algo, self.args.version, self.args.dataset, self.args.target, self.args.maximisingMetric, [16]):
algo, version, dataset, target, maximisingMetric, wordLength = iter
for iter in product(self.args.algo, self.args.version, self.args.dataset, self.args.target, self.args.metric, [16]):
algo, version, dataset, target, metric, wordLength = iter

#config.wordLength = wordLength
#config.maxScaleRange = 0, -wordLength
Expand Down Expand Up @@ -243,7 +243,7 @@ def runMainDriver(self):
numOutputs = self.args.numOutputs

obj = main.Main(algo, version, target, trainingInput,
testingInput, modelDir, sf, maximisingMetric, dataset, numOutputs, self.args.source)
testingInput, modelDir, sf, metric, dataset, numOutputs, self.args.source)
obj.run()

acc = obj.testingAccuracy
Expand Down
168 changes: 149 additions & 19 deletions Tools/SeeDot/seedot/Predictor/library_fixed.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,34 @@ void MatAddNN(MYINT *A, MYINT *B, MYINT *C, MYINT I, MYINT J, MYINT shrA, MYINT
return;
}

// C = A + B
void MatAddNN(MYINT *A, MYINT *B, MYINT *C, MYINT I, MYINT J, MYINT K, MYINT L, MYINT shrA, MYINT shrB, MYINT shrC)
{
for (MYITE i = 0; i < I; i++)
{
for (MYITE j = 0; j < J; j++)
{
for (MYITE k = 0; k < K; k++)
{
for (MYITE l = 0; l < L; l++)
{
MYINT a = A[i * J * K * L + j * K * L + k * L + l];
MYINT b = B[i * J * K * L + j * K * L + k * L + l];

a = a / shrA;
b = b / shrB;

MYINT c = Saturate<MYINT>(a / shrC + b / shrC);

C[i * J * K * L + j * K * L + k * L + l] = c;
}
}
}
}
return;
}


// C = A + B
void MatAddCN(const MYINT *A, MYINT *B, MYINT *C, MYINT I, MYINT J, MYINT shrA, MYINT shrB, MYINT shrC)
{
Expand Down Expand Up @@ -618,6 +646,18 @@ void Transpose(MYINT *A, MYINT *B, MYINT I, MYINT J)
return;
}

void Transpose(const MYINT *A, MYINT *B, MYINT I, MYINT J)
{
for (MYITE i = 0; i < I; i++)
{
for (MYITE j = 0; j < J; j++)
{
B[i * J + j] = A[j * I + i];
}
}
return;
}

// C = a * B
void ScalarMul(MYINT *A, MYINT *B, MYINT *C, MYINT I, MYINT J, MYINT shrA, MYINT shrB)
{
Expand Down Expand Up @@ -947,34 +987,124 @@ void Relu2D(MYINT *A, MYINT H, MYINT W)
}

// B = maxpool(A)
// A[N][H][W][C], B[N][H][W][C]
void Maxpool(MYINT *A, MYINT *B, MYINT N, MYINT H, MYINT W, MYINT C, MYINT FH, MYINT FW, MYINT strideH, MYINT strideW, MYINT HPADL, MYINT HPADR, MYINT WPADL, MYINT WPADR)
// A[N][inH][inW][C], B[N][outH][outW][C]
void Maxpool(MYINT *A, MYINT *B, MYINT N, MYINT H, MYINT W, MYINT C, MYINT outH, MYINT outW, MYINT FH, MYINT FW, MYINT strideH, MYINT strideW, MYINT zPadHLeft, MYINT zPadHRight, MYINT zPadWLeft, MYINT zPadWRight)
{
MYITE HO = H / strideH;
MYITE WO = W / strideW;

for (MYITE n = 0; n < N; n++)
{
for (MYITE ho = 0; ho < HO; ho++)
{
for (MYITE wo = 0; wo < WO; wo++)
{
for (MYITE c = 0; c < C; c++)
{
{
for (MYITE c = 0; c < C; c++)
{
MYITE leftTopCornerH = 0 - zPadHLeft;
MYITE extremeRightBottomCornerH = H - 1 + zPadHRight;
MYITE ctH = 0;

while((leftTopCornerH + FH - 1) <= extremeRightBottomCornerH){

MYITE leftTopCornerW = 0 - zPadWLeft;
MYITE extremeRightBottomCornerW = W - 1 + zPadWRight;
MYITE ctW = 0;

while((leftTopCornerW + FW - 1) <= extremeRightBottomCornerW)
{

MYINT maxi = 0;
if ((((leftTopCornerH < 0) || (leftTopCornerH >= H)) || ((leftTopCornerW < 0) || (leftTopCornerW >= W)))){
maxi = 0;
}
else{
// maxi = inArr[n][leftTopCornerH][leftTopCornerW][c];
maxi = A[n * H * W * C + leftTopCornerH * W * C + leftTopCornerW * C + c];
};

MYINT max = A[n * H * W * C + (strideH * ho) * W * C + (strideW * wo) * C + c];
for (MYITE hs = 0; hs < FH; hs++)
for (MYITE fh = 0; fh < FH; fh++)
{
for (MYITE ws = 0; ws < FW; ws++)
{
MYINT a = A[n * H * W * C + ((strideH * ho) + hs) * W * C + ((strideW * wo) + ws) * C + c];
if (a > max)
max = a;
for (MYITE fw = 0; fw < FW; fw++)
{
MYITE curPosH = leftTopCornerH + fh;
MYITE curPosW = leftTopCornerW + fw;
MYINT temp = 0;

if ((((curPosH < 0) || (curPosH >= H)) || ((curPosW < 0) || (curPosW >= W)))){
temp = 0;
}
else{
// temp = inArr[n][curPosH][curPosW][c];
temp = A[n * H * W * C + curPosH * W * C + curPosW * C + c];
};
maxi = ((maxi < temp) ? temp : maxi);

}
}

B[n * outH * outW * C + ctH * outW * C + ctW * C + c] = maxi;
// outArr[n][ctH][ctW][c] = maxi;
leftTopCornerW = leftTopCornerW + strideW;
ctW = ctW + 1;
}

leftTopCornerH = leftTopCornerH + strideH;
ctH = ctH + 1;
}
}
}

return;
}

// B = avgpool(A)
// A[N][inH][inW][C], B[N][outH][outW][C]
void Avgpool(MYINT *A, MYINT *B, MYINT N, MYINT H, MYINT W, MYINT C, MYINT outH, MYINT outW, MYINT FH, MYINT FW, MYINT strideH, MYINT strideW, MYINT zPadHLeft, MYINT zPadHRight, MYINT zPadWLeft, MYINT zPadWRight)
{
MYINT FSIZE = FH*FW;

for (MYITE n = 0; n < N; n++)
{
for (MYITE c = 0; c < C; c++)
{
MYITE leftTopCornerH = 0 - zPadHLeft;
MYITE extremeRightBottomCornerH = H - 1 + zPadHRight;
MYITE ctH = 0;

while((leftTopCornerH + FH - 1) <= extremeRightBottomCornerH){

MYITE leftTopCornerW = 0 - zPadWLeft;
MYITE extremeRightBottomCornerW = W - 1 + zPadWRight;
MYITE ctW = 0;

while((leftTopCornerW + FW - 1) <= extremeRightBottomCornerW)
{

MYINT sum = 0;

for (MYITE fh = 0; fh < FH; fh++)
{
for (MYITE fw = 0; fw < FW; fw++)
{
MYITE curPosH = leftTopCornerH + fh;
MYITE curPosW = leftTopCornerW + fw;
MYINT temp = 0;

if ((((curPosH < 0) || (curPosH >= H)) || ((curPosW < 0) || (curPosW >= W)))){
temp = 0;
}
else{
// temp = inArr[n][curPosH][curPosW][c];
temp = A[n * H * W * C + curPosH * W * C + curPosW * C + c];
};
sum = sum + temp;

}
}

B[n * HO * WO * C + ho * WO * C + wo * C + c] = max;
B[n * outH * outW * C + ctH * outW * C + ctW * C + c] = sum/FSIZE;
// outArr[n][ctH][ctW][c] = maxi;
leftTopCornerW = leftTopCornerW + strideW;
ctW = ctW + 1;
}

leftTopCornerH = leftTopCornerH + strideH;
ctH = ctH + 1;
}
}
}
Expand Down
Loading