Ejemplo n.º 1
0
        private static double RunVectorTriad(long vectorLength, long repetitions, int numberOfThreads)
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();

            TriadData[] data = new TriadData[numberOfThreads];
            for (int i = 0; i < numberOfThreads; i++)
            {
                data[i] = new TriadData(vectorLength);
            }

            IDummy dummy = DummyFactory.Get();

            Task[] tasks = new Task[numberOfThreads];
            for (int i = 0; i < numberOfThreads; i++)
            {
                int threadIndex = i;
                tasks[i] = new Task(() => RunVectorTriad(data[threadIndex], vectorLength, repetitions, dummy));
            }

            Stopwatch stopwatch = Stopwatch.StartNew();

            for (int i = 0; i < numberOfThreads; i++)
            {
                tasks[i].Start();
            }
            Task.WaitAll(tasks.Take(numberOfThreads).ToArray());

            stopwatch.Stop();


            return((double)stopwatch.ElapsedMilliseconds / repetitions);
        }
Ejemplo n.º 2
0
        private static void RunVectorTriad(TriadData data, long vectorLength, long repetitions, IDummy dummy)
        {
            fixed(double *ap = data.a)
            fixed(double *bp = data.b)
            fixed(double *cp = data.c)
            fixed(double *dp = data.d)
            {
                for (long r = 0; r < repetitions; r++)
                {
                    if (ap[1] < 1)
                    {
                        dummy.DummyMethod(ap, bp, cp, dp);
                    }

                    for (long i = 0; i < vectorLength; i++)
                    {
                        long j = i;//(i * 1009) % vectorLength;
                        ap[j] = bp[j] + cp[j] * dp[j];
                    }
                }
            }
        }