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




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 43 • Страница 1 из 31  2  3  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

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

Бенчмарк делает комплексное измерение быстродействия вашего ПК в однопоточном и многопоточном режимах.
https://cloud.mail.ru/public/BLAG/b6UpH5vRu

Делаются операции:
- возведение в степень; получения косинуса;
- суммирование, деление, умножение, округление чисел;
- изменение регистра строки, поиск-замена по строке;
- конвертация числа в строку, конкатенация строк;
- поиск ключа в словаре, добавление в словарь;
- поиск регулярными выражениями по файлам.

Изменения в версии 2.0:
- измеряется скорость на одном, двух или всех ядрах;
- бенчмарк делает комплексное измерение разных операций;
- увеличено время работы бенчмарка для повышения точности.

Исходный код:
Код:
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.Security.Permissions;
using Microsoft.Win32;
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;
        string[] files = new string[] { };

        public Form1()
        {
            InitializeComponent();

            int cores = (Environment.ProcessorCount);

            tabControl1.SelectedIndex = 1;

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

Делаются операции:
- возведение в степень; получения косинуса;
- деление, умножение, суммирование, округление чисел;
- изменение регистра строки, поиск-замена по строке;
- конвертация числа в строку, конкатенация строк;
- поиск ключа в словаре, добавление в словарь;
- поиск регулярными выражениями по файлам.

Изменения в версии 2.0:
- измеряется скорость на одном, двух или всех ядрах;
- делаются комплексные измерения для разных операций;
- увеличено время работы для повышения точности.
";
        }

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

            if (!Directory.Exists(HomeDir + "/testfiles"))
            {
                try { Directory.CreateDirectory(HomeDir + "/testfiles"); }
                catch
                {
                    MessageBox.Show("Не удалось создать директорию\r\nдля тестовых файлов.\r\n\r\nПопробуйте запустить бенчмарк\r\nс правами администратора.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Application.Exit();
                }
            }

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

            //создаем новые файлы
            try
            {
                for (int i = 1; i <= 32; i++)
                    using (StreamWriter sw = new StreamWriter(HomeDir + "/testfiles/" + i.ToString() + ".testdata", false, Encoding.Default))
                        for (int c = 1; c < 10000; c++)
                            sw.WriteLine(text);
            }
            catch {
                MessageBox.Show("Не удалось записать тестовые файлы\r\nдля выполнения бенчмарка.\r\n\r\nПопробуйте запустить бенчмарк\r\nс правами администратора.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            files = Directory.GetFiles(HomeDir + "/testfiles", "*.testdata");

            if (files.Length != 32)
            {
                MessageBox.Show("Не удалось записать тестовые файлы\r\nдля выполнения бенчмарка.\r\n\r\nПопробуйте запустить бенчмарк\r\nс правами администратора.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }

            textBox1.Clear();   
            button2.Enabled = false;
            button3.Enabled = false;

            StartBench();

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

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

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

            StringBuilder sb = new StringBuilder();

            textBox1.Clear();

            textBox1.AppendText("\r\n");

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

            int cores = Environment.ProcessorCount;

            sb.Append("виртуальных ядер - " + cores.ToString());
            AppendText(sb.ToString() + "\r\n\r\n");

            AppendText("Обработка в одном потоке... ");

            DateTime dt1 = DateTime.Now;

            ProcessMath(1);
            Application.DoEvents();
            ProcessFiles(1);

            DateTime dt2 = DateTime.Now;
            var isec1 = Math.Round((dt2 - dt1).TotalSeconds, 2);

            string sec = isec1.ToString();
            AppendText(" завершена за " + sec + " сек.\r\n");

            dt1 = DateTime.Now;

            AppendText("Обработка в двух потоках... ");

            ProcessMath(2);
            Application.DoEvents();
            ProcessFiles(2);

            dt2 = DateTime.Now;
            var isec2 = Math.Round((dt2 - dt1).TotalSeconds, 2);

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

            dt1 = DateTime.Now;
            AppendText("Обработка в " + cores.ToString() + " потоках ... ");

            ProcessMath(cores);
            Application.DoEvents();
            ProcessFiles(cores);

            dt2 = DateTime.Now;

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

        public void ProcessMath(int cores)
        {
            HashSet<string> hash = new HashSet<string>();

            var result = Parallel.For(1, 200000000, new ParallelOptions { MaxDegreeOfParallelism = cores }, i =>
            {
                //деление, умножение, суммирование, возведение в степень
                double a = Math.Pow(((double)i / 3 * 2) + 1, 2);

                //расчет косинуса
                double cos = Math.Cos(a);

                //округление
                a = Math.Round(a, 2);

                //для части значений делаем операции со строками
                if (i % 25 == 0)
                {
                    //конвертация в строку
                    string b = a.ToString();

                    //конкатенация строк
                    string c = b + " постфикс";

                    //изменение регистра
                    c = c.ToUpper();

                    //поиск и замена по строке
                    c = c.Replace("1", ".");

                    if (i % 100 == 0)
                    {
                        //поиск и добавление в словарь
                        if (!hash.Contains(c))
                            lock (hash)
                                hash.Add(c);
                    }
                }
            });
        }

        public void ProcessFiles(int cores)
        {
            remainingToProcess = 32;
            mre = new ManualResetEvent(false);

            Parallel.ForEach(files, new ParallelOptions { MaxDegreeOfParallelism = cores }, currentFile =>
            {
                ReadFile(currentFile);
            });
        }

        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)
                for (int i = 0; i < 5; i++)
                    if (re1.IsMatch(line)) { }

            CheckedFiles++;
            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{ }
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (Directory.Exists(HomeDir + "/testfiles"))
                try
                {
                    Directory.Delete(HomeDir + "/testfiles", true);
                }
                catch { }
        }
    }
}

Прикладывайте свои результаты в виде картинки ("сохранить результат").

Если у вас процессор или память разогнана, то указывайте частоту.

Мои результаты с ноутбука на i7.


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



Партнер
 

Member
Статус: Не в сети
Регистрация: 27.07.2009
Откуда: Москва
Фото: 25
i7 4790k@4.8
#77


 

Member
Статус: Не в сети
Регистрация: 02.04.2011
Откуда: Москва
Фото: 35
8700к@5.0, DDR4 3800CL16.
#77

_________________
8700К|Asrock z370 Taichi 4.0|2*8 G.Skill 3866CL16|2080S|Kingston KC400 512Gb|HDD 1Tb|AeroCool P7-C0|Corsair RM650x.


 

Member
Статус: Не в сети
Регистрация: 21.05.2016
#77
По сравнению с 8700К коэфф. ускорения походу пьян или гонит,
т.к. разница двухкратная по моще от 7700HQ а результат совсем нет.
Реальная разница +25% от 3610QM
http://cpu.userbenchmark.com/Compare/In ... 1019vs2730
Разница 8700К от 3610QM двукратная, а от 7700HQ +50%
http://cpu.userbenchmark.com/Compare/In ... 3937vs2730
Для начала этот тест исполнялся бы в кеше на ассемблере со всякими SSE


 

Member
Статус: Не в сети
Регистрация: 03.04.2017
SVG4K писал(а):
По сравнению с 8700К коэфф. ускорения походу пьян или гонит,


У него 8700K разогнан до 5 Ггц. У тебя 2.8 Ггц + буст. Ты же не разгонял ноутбук?
Еще у него 6 ядер десктопных разогнанных, а у тебя 4 неразогнанных ноутбучных. Так что двукратное преимущество вполне может быть.

Добавлено спустя 8 минут 39 секунд:
Kosmo12 писал(а):
Для начала этот тест исполнялся бы в кеше на ассемблере со всякими SSE

Сейчас уже мало кто программирует на ассемблере, куча программ пишется именно на c# и java.
Тест выполняет наиболее стандартные и распространенные операции, которые встречаются в большинстве программ.

p.s. Проверь: у тебя может еще оперативка медленная или в одноканальном режиме работает.
Одной из операций (не главной, но все же) является поиск значений по словарю и добавление в словарь. Здесь оперативка важна.

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


Последний раз редактировалось Kosmo12 10.03.2018 12:05, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 21.05.2016
7700HQ не разгоняется. Нет возможности. Питался от сети, уже последний аптайм неделю.
Насчет ассемблера не надо, критичные части реально пишутся на нем, я и сам писал в порыве энтузиазма, так что не надо.
4,42 по твоей просьбе все отрубить, даже гаджеты и Тотал коммандер, винда 8.1, разгона никакого нету на ноуте.


 

Member
Статус: Не в сети
Регистрация: 03.04.2017
SVG4K писал(а):
7700HQ не разгоняется. Нет возможности. Питался от сети, уже последний аптайм неделю.
4,42 по твоей просьбе все отрубить, даже гаджеты и Тотал коммандер, винда 8.1, разгона никакого нету на ноуте.

Попробуй еще старый бенчмарк. Так делается только одна операция - поиск регулярными выражениями по файлам:
Новый бенчмарк - многопоточный парсинг файлов (CPU + SSD)
И сравни свой результат с моим в первом посту темы. Возможно, у тебя где-то затык происходит (память в одноканальном, диск медленный, процессор не бустится).


Последний раз редактировалось Kosmo12 10.03.2018 12:45, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 21.05.2016
Еще раз космо и парсер перенес на ssd nvme SM951, он бодрый,
все отрубил и запуск показал у космо 52,38/27,35/12,01=4,36 и парсер 23,26/6,69=3.48
Теоретически имхо что офиц тесты считают рейтинг чемоданом, поэтому, но - или есть какие то оптимальные конструкции загрузки регистров и типов совмещаемых команд, оптимизация которых в разных поколениях отличается, ну и завышенность рейтингов не исключается.
Возможно расчет рейтинга не линейный. И что есть 1,0 ?
почему то показывает высокий рейтинг для камней с большим кешем, имхо трешуется бенч из кеша.


 

Member
Статус: Не в сети
Регистрация: 03.04.2017
SVG4K писал(а):
52,38/27,35/12,01=4,36 и парсер 23,26/6,69=3.48

Ну, это нормальные результаты по сравнению с моим i7-3610qm (4Гб x 2 + Samsung EVO 850).

SVG4K писал(а):
поэтому, но - или есть какие то оптимальные конструкции загрузки регистров и типов совмещаемых команд, оптимизация которых в разных поколениях отличается, ну и завышенность рейтингов не исключается.

Есть мнение, что официальные тесты показывают для новых процессоров завышенные результаты, чтобы их покупали. Там у интела разница по 5% между поколениями.

У меня же в тесте выполняются наиболее часто используемые операции, которые встречаются в любых программах. Это математика, операции со строками и регулярные выражения, поиск по словарю. Результат отображается линейный.

Я распределил задачи таким образом, чтобы они исполнялись примерно равное количество времени (а не так, чтобы математика за 1 секунду, а остальное - за 59 секунд). То есть, тест должен быть "средневзвешенный" и сбалансированный.


 

Member
Статус: Не в сети
Регистрация: 29.07.2016
Откуда: Люберцы
Фото: 0
Intel Xeon X5650@4400MHz
#77

_________________
i9-12900KF / MSI Z690 TORPEDO / Hynix (HMCG78MEBUA081N) DDR5 32 Gb@6400 1.35В / MSI RTX3080Ti GamingX 12G@1950/21400 (0,875v) / SAMSUNG 970EVO+500Gb


 

Member
Статус: Не в сети
Регистрация: 30.04.2015
Откуда: Россия
Фото: 620
Ryzen7 1700@4GHz RAM@3466
#77
#77
В многопотоке загрузка проца 60-70% - так и должно быть?

_________________
cpu: r9 7953@stock, mobo: asus strix ee, ram: hynixDR 32GBx2@6200 28-35-32-47-79 1.4V, gpu: 7900XTX TUF, psu: corsair HX1200i


 

Member
Статус: Не в сети
Регистрация: 03.04.2017
derp писал(а):
В многопотоке загрузка проца 60-70% - так и должно быть?

В тесте есть некоторые операции, которые загружают на 100% (математика, обработка строк). Но при этом есть операции, которые могут упираться в работу с памятью (поиск и добавление в словарь) или в медленный диск (поиск регулярными выражениями по файлам).

Я могу сделать полностью синтетический тест, который будет нагружать на 100%, но в этом тесте показана характерная производительность для реальных задач. И процессоры intel и amd находятся в одинаковых условиях. Если сравнить ваш результат с разогнанным выше 8700K, то результаты вполне адекватны (быстрей в многопотоке за счет 8 ядер, медленней в одном потоке, т.к. ниже частота).


Последний раз редактировалось Kosmo12 10.03.2018 19:52, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 30.04.2015
Откуда: Россия
Фото: 620
Kosmo12, то есть если закинуть тест на ссд, то увеличится загрузка и попугаи?

_________________
cpu: r9 7953@stock, mobo: asus strix ee, ram: hynixDR 32GBx2@6200 28-35-32-47-79 1.4V, gpu: 7900XTX TUF, psu: corsair HX1200i


 

Member
Статус: Не в сети
Регистрация: 03.04.2017
derp писал(а):
то есть если закинуть тест на ссд, то увеличится загрузка и попугаи?

Результат на SSD будет быстрей, но не критично, поскольку чтение файлов занимает только часть теста. Но если у вас HDD висит внешний на USB 2.0 или ноутбучный 5400 оборотов, тогда разница будет заметна. Так что лучше запускать на самом быстром диске в системе.

От скорости оперативки также зависит, но не весь тест, а частично.


 

Member
Статус: Не в сети
Регистрация: 30.04.2015
Откуда: Россия
Фото: 620
Kosmo12, не, у меня десктопные 3.5" 5400RPM. Так что фиг с ним, если не сильно влияет.

_________________
cpu: r9 7953@stock, mobo: asus strix ee, ram: hynixDR 32GBx2@6200 28-35-32-47-79 1.4V, gpu: 7900XTX TUF, psu: corsair HX1200i


 

Member
Статус: Не в сети
Регистрация: 03.04.2017
Вот я запустил на внешнем винте 5400 оборотов с USB 3.0.

Результаты практически такие же, как на SSD (в начале темы).


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


 

Member
Статус: Не в сети
Регистрация: 21.05.2016
Повторюсь :
3610 - 54,04/28,43/13,29=4,07
8700 - 27,48/14,21/5,14=5,35
Налицо двукратное превосходство, а результат ускорения показывает +31%, это вообще о чем ?
Есть один четкий тест который показывает без обмана, это к примеру Deshaker под VirtualDub.
Он тебе мало того что надежно разгон завесит, в тяжелом сеттинге, и реально покажет в секундах.
А +31% против двукратной мощи - это шлак.
И дисковым тестом в таком случае надо еще проверить, имеет ли смысл вообще !


 

Member
Статус: Не в сети
Регистрация: 03.04.2017
SVG4K писал(а):
Налицо двукратное превосходство, а результат ускорения показывает +31%, это вообще о чем ?

Наверное, ты не понял смысла "коэффициента ускорения". Это просто разница по скорости в одном потоке против многопотока на одном и том же процессоре. То есть, это коэффициент распараллеливания.

У 4-ядерников будет коэффициент в районе 3,5 - 4. Если есть гипертрединг, то может быть и чуть выше 4.
На 8-ядерниках коэффициент будет в районе 6 - 8.


Последний раз редактировалось Kosmo12 10.03.2018 20:30, всего редактировалось 4 раз(а).

 

Member
Статус: Не в сети
Регистрация: 30.04.2015
Откуда: Россия
Фото: 620
SVG4K, чего тебе всё нужно? Это лишь говорит о том, что у теста не слишком высокий показатель степени распараллеливаемости (или, как сказал аффтар, идёт упор не в проц). По тому же cpu-z у меня 10+, а тут ниже 8.

_________________
cpu: r9 7953@stock, mobo: asus strix ee, ram: hynixDR 32GBx2@6200 28-35-32-47-79 1.4V, gpu: 7900XTX TUF, psu: corsair HX1200i


 

Member
Статус: Не в сети
Регистрация: 21.07.2012
Откуда: г. Тула
Фото: 12
4800@3200 17-17-17
Вложение:
результаты.jpg


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

_________________
I7-8700K\GIGABYTE Z370 AORUS GAMING 7\F4-3200C14D-16GTZ\Gigabyte Aorus RTX 3080 MASTER 12Гб \Thermaltake TPX-1275M \SSD KINGSTON SHPM2280P2H/240G


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

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


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

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


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

Перейти:  

Лаборатория














Новости

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