Exemplo n.º 1
0
        private static GPUVerifyRecord GetGPUVerifyRecord(IEnumerable <GPUVerifyRecord> records)
        {
            GPUVerifyRecord record = new GPUVerifyRecord();

            record.Kernel = records.First().Kernel;

            // if the runs have multiple statuses, choose the one based on priority
            GPUVerifyRecord.Status status;
            if (records.Select(x => x.ResultEnum).Distinct().Count() == 1)
            {
                status = records.First().ResultEnum;
            }
            else
            {
                status = records.Select(x => x.ResultEnum).OrderByDescending(x => x.Priority).First();
            }

            records = records.Where(x => x.ResultEnum == status);

            record.Result       = status.ToString();
            record.Clang        = records.Select(x => x.Clang).Average();
            record.Opt          = records.Select(x => x.Opt).Average();
            record.Bugle        = records.Select(x => x.Bugle).Average();
            record.VCGen        = records.Select(x => x.VCGen).Average();
            record.Cruncher     = records.Select(x => x.Cruncher).Average();
            record.BoogieDriver = records.Select(x => x.BoogieDriver).Average();
            record.Total        = records.Select(x => x.Total).Average();

            return(record);
        }
Exemplo n.º 2
0
        private static IEnumerable <AutoSyncOutRecord> GetAutoSyncRecords(string directory)
        {
            if (!Directory.Exists(directory))
            {
                return(new List <AutoSyncOutRecord>());
            }

            IEnumerable <string>  files   = Directory.EnumerateFiles(directory, "*.csv", SearchOption.TopDirectoryOnly);
            List <AutoSyncRecord> records = new List <AutoSyncRecord>();

            // consolidate records from all the files in a single list
            foreach (string file in files)
            {
                IEnumerable <AutoSyncRecord> list = CsvWrapper.Read <AutoSyncRecord>(file, false);
                records.AddRange(list);
            }

            // standardize the kernel name
            records.ForEach(x => x.Kernel = Common.StandardizeKernelName(x.Kernel));

            directory = directory + Path.DirectorySeparatorChar + "gpuverify";
            IEnumerable <GPUVerifyRecord> gv_records = GetGPUVerifyRecords(directory);

            foreach (AutoSyncRecord record in records)
            {
                // AutoSync repaired but GPUVerify identified errors
                GPUVerifyRecord gv_record = gv_records.FirstOrDefault(x => x.Kernel == record.Kernel);
                if (record.Result == AutoSyncRecord.Status.Repaired)
                {
                    if (gv_record == null || gv_record.ResultEnum != GPUVerifyRecord.Status.Success)
                    {
                        record.Result = AutoSyncRecord.Status.FalsePositive;
                    }
                }

                // AutoSync did not change anything but GPUVerify identified errors
                // AutoSync should have returned a repair error in these cases
                gv_record = GPUVerify.FirstOrDefault(x => x.Kernel == record.Kernel);
                if (record.Result == AutoSyncRecord.Status.Unchanged)
                {
                    if (gv_record == null || gv_record.ResultEnum != GPUVerifyRecord.Status.Success)
                    {
                        record.Result = AutoSyncRecord.Status.FalsePositive;
                    }
                }
            }

            List <AutoSyncOutRecord> summary = new List <AutoSyncOutRecord>();

            foreach (AutoSyncRecord record in records)
            {
                // already visited this record
                if (summary.Any(x => x.Kernel == record.Kernel))
                {
                    continue;
                }

                IEnumerable <AutoSyncRecord> matches = records.Where(x => x.Kernel == record.Kernel);
                summary.Add(GetAutoSyncRecord(matches));
            }

            return(summary.OrderBy(x => x.Kernel));
        }