Example #1
0
        public void CanCompileLinearRegressionKernel()
        {
            TileCompiler compiler = new TileCompiler();

            var(yactual, x) = new Vector(5, out Index i).Two("yactual", "x");
            Scalar       a = new Scalar("a"), b = new Scalar("b");
            var          ypred = a * x + b;
            var          yloss = MEAN[SQUARE[yactual - ypred]];
            Kernel <int> loss  = new Kernel <int>(yloss, compiler);

            Assert.True(loss.Compile());
        }
Example #2
0
        public void SumExpression()
        {
            var compiler = new TileCompiler();

            var(linear, a, x, b, res) = LinearTile();

            var kernel = compiler.Compile(linear);

            var tensors = new ITensor[] { a, x, b, res };

            kernel.Eval(tensors);
            CheckRes(res);
        }
Example #3
0
        public void LookupExpression()
        {
            var compiler = new TileCompiler();

            var(tile, input, lookup, res) = LookupTile();

            var kernel = compiler.Compile(tile);

            var tensors = new ITensor[] { input, lookup, res };

            kernel.Eval(tensors);
            CheckRes(res);
        }
Example #4
0
        public void MaxExpression()
        {
            var compiler = new TileCompiler();

            var(simpleMax, input, res) = SimpleMaxTile();

            var kernel = compiler.Compile(simpleMax);

            var tensors = new ITensor[] { input, res };

            kernel.Eval(tensors);
            CheckRes(res);
        }
Example #5
0
        public void ElementWiseExpression()
        {
            var compiler = new TileCompiler();

            var(transpose, input, res) = TransposeTile();

            var kernel = compiler.Compile(transpose);

            var tensors = new ITensor[] { input, res };

            kernel.Eval(tensors);
            CheckRes(res);
        }
Example #6
0
        public void CanComputeGradient()
        {
            string       code = @"function(I)-> (O) {
                O = I * I;
            }";
            TileCompiler c    = new TileCompiler();

            Assert.True(c.Compile(5, code, out IRunnable <int> result));
            var             O = new Vector("O", 5).Var(new int[5]);
            IVariable <int> G = new Vector("G", 5).Var(new int[5]);
            var             I = new Vector("I", 5).Var(1, 2, 3, 4, 5);

            Assert.Equal(RunStatus.Success, result.Run(O, ref G, I));
            Assert.Equal(8, G[3]);
        }
Example #7
0
        public void CanCompileLinearRegressionKernel()
        {
            TileCompiler compiler = new TileCompiler();

            var(x, ypred, yactual, yerror, yloss) = new Vector(5, out Index i).Five("x", "ypred", "yactual", "yerror",
                                                                                    "yloss");
            var(a, b) = new Scalar().Two("a", "b");

            var N = yactual[0];

            ypred.def = a * x + b;
            Kernel <int> predict = new Kernel <int>(ypred, compiler);

            Assert.True(predict.Compile());

            yerror.def = SQUARE[yactual - ypred];
            Kernel <int> error = new Kernel <int>(yerror, compiler);

            Assert.True(error.Compile());

            Assert.Contains(a, error.InputShapes);
            Assert.Contains(b, error.InputShapes);
            Assert.Contains(x, error.InputShapes);
            Assert.Contains(yactual, error.InputShapes);
            Assert.Equal(4, error.InputShapes.Count);
            Assert.Equal(yerror, error.OutputShape);

            var va      = a.Var(5);
            var vb      = b.Var(6);
            var vx      = x.Var(1, 2, 3, 4, 5);
            var vya     = yactual.Var(new [] { 10, 20, 30, 40, 50 });
            var vyerror = yerror.Var <int>();

            Assert.Equal(RunStatus.Success, error.CompilerResult.Run(vyerror, vya, va, vx, vb));
            Assert.Equal(System.Math.Pow(vya[0] - ((5 * 1) + 6), 2), vyerror[0]);

            for (int index = 0; index < vyerror.ElementCount; index++)
            {
                Assert.Equal(System.Math.Pow(vya[index] - ((va * vx[index]) + vb), 2), vyerror[index]);
            }
            yloss[i, N] = MEAN[yerror[i]];
            Assert.True(yloss.IsDefined);
            Assert.Equal(N, yloss.ContractionDefinition.Expression.Shape[0]);
            Kernel <int> loss = new Kernel <int>(yloss, compiler);

            Assert.True(loss.Compile());
        }
Example #8
0
        public void ZeroAndSum()
        {
            var compiler = new TileCompiler();

            var(linear, a, x, b, res) = LinearTile();

            var kernel = compiler.Compile(linear);

            var tensors = new ITensor[] { a, x, b, res };

            var sr = res.Buffer.Span;

            for (var i = 0; i < sr.Length; i++)
            {
                sr[i] = i; // non-zero initialization
            }
            kernel.Eval(tensors);

            // correct only if 'res' is re-initialized before the sum
            CheckRes(res);
        }
Example #9
0
        public void CanCompileTileCode()
        {
            string       code = @"function(I[N])-> (O) {
                O[i: N] = +(I[k]), i - k < N;
            }";
            TileCompiler c    = new TileCompiler();

            Assert.True(c.Compile(5, code, out IRunnable <int> result));
            var O = new Vector("O", 5).Var(new int[5]);
            var I = new Vector("I", 5).Var(1, 2, 3, 4, 5);

            Assert.Equal(RunStatus.Success, result.Run(O, I));
            Assert.Equal(I[0] + I[1] + I[2] + I[3], O[3]);
            code = @"function(I)-> (O) {
                O = I * I;
            }";
            Assert.True(c.Compile(6, code, out result));
            O = new Vector("O", 6).Var(new int[6]);
            I = new Vector("I", 6).Var(2, 4, 6, 8, 10, 12);
            Assert.Equal(RunStatus.Success, result.Run(O, I));
            Assert.Equal(16, O[1]);

            code = @"
                   function(I0[N], I1[N])-> (O) {
                        S = (I1 - I0) * (I1 - I0);
                        O[n:N] = +(S[n]);
                   }";
            Assert.True(c.Compile(2, 6, code, out result));
            var I0 = new Vector("I0", 6).Var(1, 2, 3, 4, 5, 6);
            var I1 = new Vector("I1", 6).Var(5, 5, 6, 6, 7, 7);

            Assert.Equal(RunStatus.Success, result.Run(O, I0, I1));
            Assert.Equal(16, O[0]);
            Assert.Equal(9, O[1]);
            //I.=l
        }
Example #10
0
        private void Compile()
        {
            Console.WriteLine("Compiling resources...");
            using (var sprites_texture = new TextureCompiler(Path.Combine(OutputDirectory, "SpritesTexture")))
                using (var tiles_texture = new TextureCompiler(Path.Combine(OutputDirectory, "TilesTexture")))
                    using (var interfaces_texture = new TextureCompiler(Path.Combine(OutputDirectory, "InterfacesTexture")))
                    {
                        foreach (var cat in Table.Categories)
                        {
                            var      type     = Enum.Parse <ResourceType>(cat.Key);
                            string   output   = "";
                            Compiler compiler = null;
                            switch (type)
                            {
                            case ResourceType.Entity:
                                compiler         = new EntityCompiler();
                                compiler.Texture = sprites_texture;
                                output           = Path.Combine(OutputDirectory, "Entities");
                                break;

                            case ResourceType.Event:
                                compiler         = new EventCompiler();
                                compiler.Texture = sprites_texture;
                                output           = Path.Combine(OutputDirectory, "Events");
                                break;

                            case ResourceType.Interface:
                                compiler         = new InterfaceCompiler();
                                compiler.Texture = interfaces_texture;
                                output           = Path.Combine(OutputDirectory, "Interfaces");
                                break;

                            //case ResourceType.Item:
                            //    compiler = new ItemCompiler();
                            //    break;
                            case ResourceType.Tile:
                                compiler         = new TileCompiler();
                                compiler.Texture = tiles_texture;
                                output           = Path.Combine(OutputDirectory, "Tiles");
                                break;
                            }

                            if (compiler != null)
                            {
                                using (compiler.Writer = new BinaryWriter(File.OpenWrite(output)))
                                {
                                    compiler.RootDirectory = InputDirectory;
                                    compiler.Table         = Table;

                                    compiler.Writer.Write(Table.GetLastID(cat.Key) + 1);

                                    int id = 0;
                                    foreach (var item in cat.Value)
                                    {
                                        while (id < item.ID)
                                        {
                                            compiler.Placeholder();
                                            id++;
                                        }
                                        compiler.Compile(item.Path);
                                        id++;
                                    }
                                }
                            }
                            else
                            {
                                Console.WriteLine($"Warning: Unsupported resource type [{type}].");
                            }
                            //foreach (var v in cat.Value)
                            //    Console.WriteLine(v.Path);
                        }
                    }
            Console.WriteLine("Compilation done.");
            Console.WriteLine();
        }