
syntax = "proto3";

package protobuf;

message Batch {

    message Simulate {

        message Experiment {
            string architecture = 1;
            string task = 2;

            // For grid accelerators
            uint32 n_lanes = 3;
            uint32 n_columns = 4;
            uint32 n_rows = 5;
            uint32 n_tiles = 6;
            uint32 column_registers = 7;

            // For Dynamic Stripes
            uint32 precision_granularity = 8;
            bool leading_bit = 9;
            bool minor_bit = 10;

            // For pragmatic
            uint32 bits_first_stage = 11;

            // For stripes
            uint32 bits_pe = 12;

            // For tactical
            uint32 lookahead_h = 13;
            uint32 lookaside_d = 14;
            string search_shape = 15;
            bool read_schedule = 16;

            // SCNN
            uint32 Wt = 17;
            uint32 Ht = 18;
            uint32 I = 19;
            uint32 F = 20;
            uint32 out_acc_size = 21;
            uint32 banks = 22;
            uint32 pe_serial_bits = 23;

            // BitFusion
            uint32 M = 24;
            uint32 N = 25;
            uint32 PMAX = 26;
            uint32 PMIN = 27;

            // On top architectures
            bool diffy = 28;

            bool dynamic_weights = 29;
            bool baseline = 30;
            uint32 act_memory_size = 31;
            uint32 wgt_memory_size = 32;
        }

        uint32 batch = 1;
        uint32 epochs = 2;
        string model = 3;
        string data_type = 4;
        string network = 5;
        uint32 network_bits = 6;
        bool tensorflow_8b = 7;
        bool intel_inq = 8;
		bool training = 9;
		bool only_forward = 10;
		bool only_backward = 11;
        uint32 decoder_states = 12;
        bool unsigned_activations = 13;
        bool unsigned_weights = 14;
        repeated Experiment experiment = 15;
    }

    repeated Simulate simulate = 1;

}
