ULTCAN.COM

Tritium demos conv2d Contact Us

conv2d · C

tritium demo conv2d
transcript · python · c · rust

Download
/* TRITIUM-PROVENANCE sha256=fa150e08b678777a032d553feb0ff5a804a6e70b0b4702daf495d667b6bba189 lang=c */
/* TRITIUM-HEIGHT high=0.00 mid=0.36 low=0.64 fns=5 */
#include <stdint.h>
#include <math.h>

// TRITIUM-PSEUDO fn=im2col_f
//| fn im2col_f(x, h, w, kh, kw, out):
//|   return p
// TRITIUM-HEIGHT fn=im2col_f high=0.00 mid=0.39 low=0.61
int64_t im2col_f(double* x, int64_t h, int64_t w, int64_t kh, int64_t kw, double* out) {
    int64_t p;
    int64_t i;
    int64_t j;
    int64_t u;
    int64_t v;

    p = 0L;
    i = 0L;
    while (i < ((h - kh) + 1L)) {
        j = 0L;
        while (j < ((w - kw) + 1L)) {
            u = 0L;
            while (u < kh) {
                v = 0L;
                while (v < kw) {
                    out[p] = x[(((i + u) * w) + (j + v))];
                    p = (p + 1L);
                    v = (v + 1L);
                }
                u = (u + 1L);
            }
            j = (j + 1L);
        }
        i = (i + 1L);
    }
    return p;
}

// TRITIUM-PSEUDO fn=conv2d_f
//| fn conv2d_f(x, h, w, k, kh, kw, out):
//|   return sum_2 * sum
// TRITIUM-HEIGHT fn=conv2d_f high=0.00 mid=0.46 low=0.54
int64_t conv2d_f(double* x, int64_t h, int64_t w, double* k, int64_t kh, int64_t kw, double* out) {
    int64_t i;
    int64_t sum_2;
    int64_t sum;
    int64_t j;
    int64_t u;
    int64_t v;
    double x_2;

    sum_2 = (h - kh) + 1L;
    sum = (w - kw) + 1L;
    i = 0L;
    while (i < sum_2) {
        j = 0L;
        while (j < sum) {
            x_2 = 0.0;
            u = 0L;
            while (u < kh) {
                v = 0L;
                while (v < kw) {
                    x_2 = x_2 + (x[(((i + u) * w) + (j + v))] * k[((u * kw) + v)]);
                    v = (v + 1L);
                }
                u = (u + 1L);
            }
            out[((i * sum) + j)] = x_2;
            j = (j + 1L);
        }
        i = (i + 1L);
    }
    return sum_2 * sum;
}

// TRITIUM-PSEUDO fn=list_get
//| fn list_get(vals, i):
//|   return vals[i]
// TRITIUM-HEIGHT fn=list_get high=0.00 mid=0.00 low=1.00 role=leaf_charset
int64_t list_get(int64_t* vals, int64_t i) {

    return vals[i];
}

// TRITIUM-PSEUDO fn=list_set
//| fn list_set(vals, i, v):
//|   vals[i] = v
//|   return v
// TRITIUM-HEIGHT fn=list_set high=0.00 mid=0.33 low=0.67 role=leaf_charset
int64_t list_set(int64_t* vals, int64_t i, int64_t v) {

    vals[i] = v;
    return v;
}

// TRITIUM-PSEUDO fn=relu
//| fn relu(vals, n):
//|   return n
// TRITIUM-HEIGHT fn=relu high=0.00 mid=0.61 low=0.39
int64_t relu(int64_t* vals, int64_t n) {
    int64_t i;

    i = 0L;
    while (i < n) {
        if (list_get(vals, i) < 0L) {
            list_set(vals, i, 0L);
        }
        i = (i + 1L);
    }
    return n;
}
ULTCAN.COM