public List <ComputationResult> PerformCalculations(int workerID, List <ComputationTask> tasks,
                                                            MatrixCalculation calculation)
        {
            var results = new List <ComputationResult>();
            var n       = calculation.A.Size;

            foreach (var computationTask in tasks)
            {
                var res = 0L;
                for (var i = 0; i < n; i++)
                {
                    var a = calculation.A.Data[computationTask.X][i];
                    var b = calculation.B.Data[i][computationTask.Y];
                    res += a * b;
                }

                results.Add(new ComputationResult
                {
                    X      = computationTask.X,
                    Y      = computationTask.Y,
                    Result = res
                });
            }

            return(results);
        }
        public Dictionary <int, List <ComputationTask> > BuildTasks(int workerCount, MatrixCalculation calculation)
        {
            var tasks = new Dictionary <int, List <ComputationTask> >();
            var n     = calculation.A.Size;

            var cnt = 0;

            for (var x = 0; x < n; x++)
            {
                for (var y = 0; y < n; y++)
                {
                    var workerNo = cnt % workerCount;
                    if (!tasks.ContainsKey(workerNo))
                    {
                        tasks[workerNo] = new List <ComputationTask>();
                    }

                    tasks[workerNo].Add(new ComputationTask
                    {
                        X = (ushort)x,
                        Y = (ushort)y
                    });
                    cnt++;
                }
            }

            return(tasks);
        }
        public void StoreCalculation(string id, MatrixCalculation calculation)
        {
            var memoryStream = new MemoryStream();

            serializer.Serialize(calculation, memoryStream);
            memoryStream.Seek(0, SeekOrigin.Begin);
            transferUtility.Upload(memoryStream, bucketName, id);
        }
 void Start()
 {
     m_timer               = GameObject.Find("GeneralManager").GetComponent <TimeManager>();
     m_outputWriter        = GameObject.Find("GeneralManager").GetComponent <OutputWriter>();
     m_playSequenceManager = GameObject.Find("GeneralManager").GetComponent <PlaySequenceManager>();
     m_matrixCalculation   = GameObject.Find("GeneralManager").GetComponent <MatrixCalculation>();
     m_targetManager       = GameObject.Find("TARGETS").GetComponent <TargetManager>();
     m_HUD = GameObject.Find("HUD").GetComponent <HUDManager>();
 }
        public void StoreCalculation(string id, MatrixCalculation calculation)
        {
            Console.WriteLine("Attempting to store config in object storage");
            var data = JsonConvert.SerializeObject(calculation);
            var ms   = new MemoryStream();

            ms.Write(Encoding.UTF8.GetBytes(data));
            ms.Seek(0, SeekOrigin.Begin);
            Task.WaitAll(_client.PutObjectAsync(_bucketName, id, ms, ms.Length));
        }
Esempio n. 6
0
        public static Matrix SerialMultiply([ActivityTrigger] MatrixCalculation calculation, ILogger log)
        {
            var repo = new InMemoryMatrixMulRepository();

            repo.StoreCalculation("an_id", calculation);
            var hndlr = new FunctionHandler(repo);

            log.LogInformation("Serially multiplying two matrices");
            hndlr.SerialMultiply("an_id");

            return(repo.GetResultMatrix("an_id"));
        }
        public Matrix BuildResultMatrix(MatrixCalculation calculation, List <List <ComputationResult> > results)
        {
            var n            = calculation.A.Size;
            var resultMatrix = Util.GenerateMatrix(n, (x, y) => 0);

            foreach (var workerResults in results)
            {
                foreach (var result in workerResults)
                {
                    resultMatrix.Data[result.X][result.Y] = result.Result;
                }
            }

            return(resultMatrix);
        }
        public Matrix SerialMultiply(MatrixCalculation calculation)
        {
            var n      = calculation.A.Size;
            var matrix = Util.GenerateMatrix(n, (x, y) => 0);

            for (var x = 0; x < n; x++)
            {
                for (var y = 0; y < n; y++)
                {
                    var res = 0L;
                    for (var i = 0; i < n; i++)
                    {
                        var a = calculation.A.Data[x][i];
                        var b = calculation.B.Data[i][y];
                        res += a * b;
                    }

                    matrix.Data[x][y] = res;
                }
            }

            return(matrix);
        }
Esempio n. 9
0
        public string CreateMatrix(int size, int maxValue         = 50000, long seed = -1,
                                   Func <int, int, long> genFuncA = null, Func <int, int, long> genFuncB = null)
        {
            if (seed == -1)
            {
                seed = Util.GetUnixTimestamp();
            }

            Random rnd = new Random((int)seed);

            Func <int, int, long> funca = (x, y) => rnd.Next(maxValue);
            Func <int, int, long> funcb = (x, y) => rnd.Next(maxValue);

            if (genFuncA != null)
            {
                funca = genFuncA;
            }

            if (genFuncB != null)
            {
                funcb = genFuncB;
            }

            var uid  = Guid.NewGuid().ToString();
            var mtxA = Util.GenerateMatrix(size, funca);
            var mtxB = Util.GenerateMatrix(size, funcb);

            var c = new MatrixCalculation
            {
                A = mtxA,
                B = mtxB
            };

            datastore.StoreCalculation(uid, c);
            return(uid);
        }
Esempio n. 10
0
 public void StoreCalculation(string id, MatrixCalculation calculation)
 {
     _calculations.Add(id, calculation);
 }