Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 83 • Страница 1 из 51  2  3  4  5  >
  Пред. тема | След. тема 
Автор Сообщение
 

Junior
Статус: Не в сети
Регистрация: 03.04.2017
Всем привет!

Новый бенчмарк изменяет скорость системы в многопоточном парсинге файлов.
https://cloud.mail.ru/public/BUmD/MMi97prr6

Аналогичная задача выполняется, например, антивирусными программами при проверке дисков.

Мой результат на ноутбучном i7-3610qm + SSD приложен в виде картинки.
Прикладывайте свои результаты тоже в виде картинки. Только не забудьте написать, есть ли у вас SSD.

Исходный код бенчмарка
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.IO;
using System.Threading;
using System.Management;
using System.Management.Instrumentation;
using System.Threading.Tasks;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace benchmark
{
    public partial class Form1 : Form
    {
        string HomeDir = Application.StartupPath;

        int remainingToProcess = 32;
        ManualResetEvent mre = new ManualResetEvent(false);
        int CheckedFiles = 0;

        int cFiles = 32;
        public Form1()
        {
            InitializeComponent();

            int cores = (Environment.ProcessorCount);
            //ThreadPool.SetMaxThreads(cores, cores);

            tabControl1.SelectedIndex = 1;

            button1.Text = "Записать файлы\r\nдля теста (100 Мб)";


            textBox2.Text = @"
Бенчмарк измеряет скорость парсинга текстовых файлов в однопоточном и многопоточном режимах.

Изменения в версии 1.2:
- бенчмарк запускается не в фоновом процессе, а в основном;
- снято ограничение ""количество одновременно обрабатываемых файлов не должно быть больше виртуальных ядер процессора"", из-за которого неправильно отображались результаты для 2-ядерных процессоров;
- убран прогресс-бар и обновление интерфейса в момент работы функций бенчамарка (для наименьшего влияния на результат).
";
        }

        //Подготовка файлов
        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            Application.DoEvents();

            tabControl1.SelectedIndex = 0;

            button1.Enabled = false;
            button2.Enabled = false;
            button3.Enabled = false;
            textBox1.AppendText("Запись тестовых файлов...");

            //удаляем файлы от прошлых запусков
            string[] files = Directory.GetFiles(HomeDir, "*.testdata");
            if (files.Length > 0)
            {
                try
                {
                    foreach (string file in files)
                        File.Delete(file);
                }
                catch { }
            }

            string text = "Милдронат был изобретен в середине 1970-х годов в Институте Органического синтеза Латвии. В 1976 г. Милдронат получил первую лицензию - Сертификат авторов СССР. С 1984 г. препарат разрешено применять в медицине. В 1992 г. Милдронат был зарегистрирован в Латвии. Медикамент производит латвийское АО Гриндекс";

            DateTime dt1 = DateTime.Now;

            //создаем новые файлы
            for (int i = 1; i <= cFiles; i++)
            {
                using (StreamWriter sw = new StreamWriter(HomeDir + "/" + i.ToString() + ".testdata", false, Encoding.Default))
                {
                    for (int c = 1; c < 10000; c++)
                        sw.WriteLine(text);
                }
            }

            DateTime dt2 = DateTime.Now;
            string sec = Math.Round((dt2 - dt1).TotalSeconds, 2).ToString();

            button1.Enabled = true;
            button2.Enabled = true;
            button3.Enabled = true;

            textBox1.AppendText(" завершена за " + sec + " сек.\r\n\r\n");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            tabControl1.SelectedIndex = 0;

            string[] files = Directory.GetFiles(HomeDir, "*.testdata");
            if (files.Length != cFiles)
            {
                MessageBox.Show("Создайте файлы для теста", "Бенчмарк", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            if (textBox1.Lines.Count() > 3)
                textBox1.Clear();   

            button1.Enabled = false;
            button2.Enabled = false;
            button3.Enabled = false;


            StartBench();

            button1.Enabled = true;
            button2.Enabled = true;
            button3.Enabled = true;

            MessageBox.Show("Расчет завершен", "Бенчмарк", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void StartBench()
        {

            string[] files = Directory.GetFiles(HomeDir, "*.testdata");

            ManagementObjectSearcher searcher8 = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_Processor");

            StringBuilder sb = new StringBuilder();

            foreach (ManagementObject queryObj in searcher8.Get())
            {
                sb.Append("Процессор - " + queryObj["Name"] + "\r\n");
                sb.Append("Количество ядер - " + queryObj["NumberOfCores"] + ", ");
            }
            sb.Append("виртуальных ядер - " + Environment.ProcessorCount.ToString());

            AppendText(sb.ToString() + "\r\n\r\n");

            AppendText("Обработка в однопоточном режиме... ");
            DateTime dt1 = DateTime.Now;

            foreach (string file in files)
                ReadFile(file);

            DateTime dt2 = DateTime.Now;

            var isec1 = Math.Round((dt2 - dt1).TotalSeconds, 2);
            string sec = isec1.ToString();
            AppendText(" завершена за " + sec + " сек.\r\n");

            dt1 = DateTime.Now;

            AppendText("Обработка в многопоточном режиме... ");

            remainingToProcess = 32;
            mre = new ManualResetEvent(false);

            //foreach (string file in files)
            //{
            //    ThreadPool.QueueUserWorkItem(new WaitCallback(ReadFile), (object)file);
            //}

            //mre.WaitOne();

            Parallel.ForEach(files, (currentFile) =>
            {
                ReadFile(currentFile);

            }

            );



            dt2 = DateTime.Now;

            var isec2 = Math.Round((dt2 - dt1).TotalSeconds, 2);
            string sec2 = isec2.ToString();
            AppendText(" завершена за " + sec2 + " сек.\r\n\r\n");
            AppendText("Коэффициент ускорения - " + Math.Round((isec1 / isec2), 2).ToString() + "\r\n");


        }

        public Bitmap getControlScreenshot(Control c)
        {
            Bitmap res = new Bitmap(c.Width, c.Height);
            c.DrawToBitmap(res, new Rectangle(Point.Empty, c.Size));
            return res;
        }

        private void ReadFile(object ofile)
        {
            string file = (string)ofile;

            string[] lines = File.ReadAllLines(file, Encoding.Default);
            Regex re1 = new Regex("\\S+\\s+(\\d+).+?(\\d+)", RegexOptions.Compiled);

            foreach (string line in lines)
            {
                //длительная операция
                if (re1.IsMatch(line))
                {
                    //длительная операция
                    if (re1.IsMatch(line))
                    {
                        if (re1.IsMatch(line))
                        {
                            if (re1.IsMatch(line))
                            {
                                if (re1.IsMatch(line))
                                { }

                                if (re1.IsMatch(line))
                                { }
                            }
                        }
                    }
                }
            }

            CheckedFiles++;
            //progressBar1.Invoke((Action)delegate { progressBar1.Value++; });
            if (Interlocked.Decrement(ref remainingToProcess) == 0)
                mre.Set();
        }

        private void AppendText(string text)
        {

            if (textBox1.InvokeRequired)
                textBox1.Invoke((MethodInvoker)delegate { textBox1.AppendText(text); });
            else
                textBox1.AppendText(text);

        }

        private void button3_Click(object sender, EventArgs e)
        {
            Bitmap scr = getControlScreenshot(this);
            scr.Save(HomeDir + "/результаты.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
            try {
                Process.Start(HomeDir + "/результаты.jpg");
            }
            catch{ }
        }
    }
}


У вас нет необходимых прав для просмотра вложений в этом сообщении.



Партнер
 

Member
Статус: Не в сети
Регистрация: 10.01.2011
Откуда: Ростов Папа
Celeron G3900 + A-data SP550 128gb
Вложение:
результаты.jpg
:diablo:


У вас нет необходимых прав для просмотра вложений в этом сообщении.


 

Member
Статус: Не в сети
Регистрация: 04.06.2011
Откуда: у Хуанга cuda?
Фото: 0
Kosmo12 результат ~ такой же, как в старой версии. За 8 месяцев ничего не изменилось :D
Вложение:
ssd sys.JPG
Вложение:
ssd.JPG
Вложение:
hdd.JPG
Вложение:
old bench.jpg


У вас нет необходимых прав для просмотра вложений в этом сообщении.


 

Junior
Статус: Не в сети
Регистрация: 03.04.2017
K2K писал(а):
результат ~ такой же, как в старой версии. За 8 месяцев ничего не изменилось

Спасибо. Мне интересно на новых райзенах, также 7700K :) Хочу проапгрейдиться.

Добавлено спустя 4 минуты 28 секунд:
Несколько результатов. Ryzen 1700 затащил в многопотоке, но однопоток у него медленный.

Добавлено спустя 27 минут 47 секунд:
leve1ord писал(а):
Celeron G3900 + A-data SP550 128gb

Довольно быстрый однопоток. Разгон есть?


У вас нет необходимых прав для просмотра вложений в этом сообщении.


 

Member
Статус: Не в сети
Регистрация: 10.01.2011
Откуда: Ростов Папа
Kosmo12 Если прямо очень нужно, могу 4200-4400 сделать, но не очень хочу возиться. Тест в стоке. В разгоне, в однопотоке, точно будет быстрее 6700к на 4000, ядро то же. Если конечно avx тест не юзает.


 

Member
Статус: Не в сети
Регистрация: 06.01.2009
Откуда: Россия, Иваново
Материнская плата: ASUS X99-A II (Intel X99 Express, LGA2011-v3, BIOS 1201);
Процессор: Intel Core i7-6900K @4,0 ГГц (Broadwell-E, 1,21 В, 8 x 256 Kбайт L2, 20 Мбайт L3);
Оперативная память: 4 x 4 Гбайт Corsair Vengeance LPX (CMK16GX4M4A2800C16) @3200 МГц (16-16-16-28 CR1/1,35 В).
SSD: Intel SSD 730 480GB.

#77


 

Member
Статус: Не в сети
Регистрация: 17.02.2008
Фото: 0
#77


 

Junior
Статус: Не в сети
Регистрация: 03.04.2017
Блин, неужели Ryzen 1700 быстрей Intel Core i7-6900K в многопотоке? Хотя однопоток у него, конечно, слабый.


 

Member
Статус: Не в сети
Регистрация: 11.06.2010
Откуда: Астрахань
i7-2600k 4.6GHz + SSD OCZ Vertex4 256Gb
#77

_________________
Поскольку десять миллиардов лет так незначительны и мимолётны... от них остаётся сладкогорький привкус, почти как разрывающая сердце любовь.


 

Moderator
Статус: Не в сети
Регистрация: 06.12.2010
Откуда: Сыктывкар
Фото: 16
Пенек G4560 / 8Gb + HDD 320Gb
#77

_________________
AW ; WoT - JetonOver


 

Junior
Статус: Не в сети
Регистрация: 31.01.2012
Откуда: Москва
I7 5820k 4.4 + Samsung 840 evo 250gb
#77


 

Member
Статус: Не в сети
Регистрация: 06.01.2009
Откуда: Россия, Иваново
Kosmo12 писал(а):
Блин, неужели Ryzen 1700 быстрей Intel Core i7-6900K в многопотоке?

Сдаётся мне, с тестом что-то не так, либо акцент в нём не на процессоре, а на SSD.


 

Junior
Статус: Не в сети
Регистрация: 03.04.2017
Jordan писал(а):
Сдаётся мне, с тестом что-то не так, либо акцент в нём не на процессоре, а на SSD.


С диска читается всего 100 Мб данных. Тест представляет собой парсинг текстовых файлов в многопотоке - достаточно типовая задача.


Последний раз редактировалось Kosmo12 06.04.2017 9:07, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 06.01.2009
Откуда: Россия, Иваново
Kosmo12
Я не следил пристально за статьями про новые процессоры AMD, конечно, но есть ли ещё в природе тесты, где бы Ryzen 1700 обошёл разогнанный Intel Core i7-6900K? :)


 

Junior
Статус: Не в сети
Регистрация: 03.04.2017
Не знаю :) Здесь разница в многопотоке минимальна (3,11 и 3,01 в пользу райзена), а в однопотоке 6900K явно быстрей (20,7 секунды против 25).


 

Member
Статус: Не в сети
Регистрация: 12.06.2010
Откуда: Новосибирск
Celeron G3900@2.8Ghz + 4Gb DDR3-1600
#77

i7-980(зион X5650)@4.2Ghz +24Gb DDR3-1600
#77

R7-1700@3.7Ghz + 16Gb DDR4-2933
#77

_________________
Xeon X5650@4.4Ghz| ASUS P6T SE| 24Gb DDR3-1600 Corsair| Palit GameRock GTX1070@2100| X-Fi XtremeGamer| FSP Everest 900W| 24" BenQ XL2420T 3D


Последний раз редактировалось kib@rg 06.04.2017 9:19, всего редактировалось 2 раз(а).

 

Junior
Статус: Не в сети
Регистрация: 03.04.2017
Если бы у райзена еще однопоток выполнялся секунд за 20, было бы вообще супер.

Интересны еще результаты 1700x и 1800x.


 

Member
Статус: Не в сети
Регистрация: 12.06.2010
Откуда: Новосибирск
Kosmo12 писал(а):
Если бы у райзена еще однопоток выполнялся секунд за 20, было бы вообще супер.

Для однопотока частота ядра у райзена маловата.

_________________
Xeon X5650@4.4Ghz| ASUS P6T SE| 24Gb DDR3-1600 Corsair| Palit GameRock GTX1070@2100| X-Fi XtremeGamer| FSP Everest 900W| 24" BenQ XL2420T 3D


 

Junior
Статус: Не в сети
Регистрация: 03.04.2017
Новый лидер (с конца). 4-ядерный J1900 и SSD Thanscend 64 Гб.


У вас нет необходимых прав для просмотра вложений в этом сообщении.


 

Member
Статус: Не в сети
Регистрация: 17.02.2008
Фото: 0
Кто-нибудь на фуфыксе прогоните бенч :-)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 83 • Страница 1 из 51  2  3  4  5  >

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  





Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan


Яндекс.Метрика