Files
mysysy/testdata/performance/h-11-01.sy

114 lines
2.3 KiB
Plaintext

int n = 50;
int ks = 15;
int ps = 4;
float input[1500][1500];
float kernel[15][15];
float conv_output[1500][1500];
float pooling_output[368][368];
float max(float a, float b) {
if (a > b) {
return a;
} else {
return b;
}
}
float exp(float x) {
return 1 + x + (x*x)/2 + (x*x*x)/6 + (x*x*x*x)/24;
}
float sigmoid(float x) {
return 1 / (1 + exp(-x));
}
void kernel_conv_pooling(float A[][1500], float B[][1500], float C[][368], float kernel[][15], int n, int ks, int ps) {
int i, j, k, l;
float v;
i = 0;
while (i < n - ks + 1) {
j = 0;
while (j < n - ks + 1) {
v = 0;
k = 0;
while (k < ks) {
l = 0;
while (l < ks) {
v =v+ A[i + k][j + l] * kernel[k][l];
l =l+ 1;
}
k =k+ 1;
}
B[i][j] = v;
j =j+ 1;
}
i =i+ 1;
}
n = n - ks + 1;
i = 0;
while (i < n - ks + 1) {
j = 0;
while (j < n - ks + 1) {
v = 0;
k = 0;
while (k < ks) {
l = 0;
while (l < ks) {
v =v+ B[i + k][j + l] * kernel[k][l];
l =l+ 1;
}
k =k+ 1;
}
A[i][j] = v;
j =j+ 1;
}
i =i+ 1;
}
n = (n - ks + 1) / ps;
i = 0;
while (i < n) {
j = 0;
while (j < n) {
v = A[i * ps][j * ps];
k = 0;
while (k < ps) {
l = 0;
while (l < ps) {
v = max(v, A[i * ps + k][j * ps + l]);
l =l+ 1;
}
k =k+ 1;
}
C[i][j] = v;
j =j+ 1;
}
i =i+ 1;
}
i = 0;
while (i < n) {
v = 0;
j = 0;
while (j < n) {
C[i][j] = C[i][j] * sigmoid(C[i][j]);
j =j+ 1;
}
i =i+ 1;
}
}
int main() {
int os = (n - 2 * ks + 2) / ps;
getfarray(input);
getfarray(kernel);
starttime();
kernel_conv_pooling(input, conv_output, pooling_output, kernel, n, ks, ps);
stoptime();
putfarray(os*os, pooling_output);
return 0;
}