Русский
Русский
English
Статистика
Реклама

Эльбрус

Новогодние бенчмарки компьютеров Эльбрус

29.12.2020 02:22:15 | Автор: admin

Новогодние бенчмарки компьютеров Эльбрус


LuaBenchmarks.png


Продолжение статьи Большое тестирование процессоров различных архитектур. В этот раз я решил измерить производительность конкретных сред/языков программирования (C#, Java, JavaScript, Python, Lua) на компьютерах с процессорами Эльбрус и сравнить их с компьютерами (даже телефонами) на процессорах архитектурой ARM и X86-64.


Языки программирования:


  • C#
  • PHP
  • JavaScript (Browser, не NodeJS)
  • Java
  • Python
  • Lua

Список тестов



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


Тестовые стенды и их процессоры


А пока можете опробовать JavaScript версию бенчмарка: http://laseroid.azurewebsites.net/js-bench/


Стенды на процессорах x86 (i386) х86-64 (amd64):



Компилируемые бенчмарки на C/C++


Таблица с результатами с прошлой статьи


Результаты нативных бенчмарков

Тут выходит так: компьютеры на Эльбрусах имеют сопоставимую производительность с Intel Core i7 2600, если бы он работал на частоте 1200 1300 МГц (Для Эльбрус-8С), кроме теста MP MFLOPS, который хорошо распараллеливается компилятором LCC и для Эльбрус 8СВ выдаёт 325 ГФлопс, где Core i7 2600 выдавал
85 ГФлопс (Это с SSE, без AVX).


Задержки кеша. Тест TLB от Линуса Торвальдса


Cpu Elbrus 2C+ Elbrus 4C Elbrus 8C Elbrus 8CB Elbrus R1000 Allwinner A64 Amd A6 3650
Freq (MHz) 500 750 1300 1550 1000 1152 2600
Cores 2 4 8 8 4 4 4
4k 14.02ns 4.04ns 2.51ns 1.94ns 45.01ns 3.48ns 1.16ns
4k cycles 7.0 3.0 3.0 3.0 5.0 4.0 3.0
8k 14.02ns 4.04ns 2.51ns 1.94ns 5.01ns 3.48ns 1.16ns
8k cycles 7.0 3.0 3.0 3.0 5.0 4.0 3.0
16k 14.02ns 4.04ns 2.51ns 1.94ns 5.01ns 3.48ns 1.16ns
16k cycles 7.0 3.0 3.0 3.0 5.0 4.0 3.0
32k 14.03ns 4.04ns 2.51ns 1.94ns 5.16ns 3.58ns 1.16ns
32k cycles 7.0 3.0 3.0 3.0 5.2 4.1 3.0
64k 14.04ns 4.06ns 2.51ns 1.94ns 23.45ns 6.83ns 1.16ns
64k cycles 7.0 3.0 3.0 3.0 23.4 7.9 3.0
128k 18.04ns 14.83ns 9.19ns 7.10ns 23.75ns 7.28ns 4.00ns
128k cycles 9.0 11.1 11.0 11.0 23.7 8.4 10.4
256k 24.97ns 14.82ns 9.19ns 7.10ns 23.98ns 7.69ns 4.00ns
256k cycles 12.5 11.1 11.0 11.0 24.0 48.9 10.4
512k 22.26ns 14.82ns 9.28ns 7.13ns 24.12ns 8.04ns 4.00ns
512k cycles 11.1 11.1 11.1 11.1 24.1 9.3 10.4
1M 67.80ns 14.83ns 27.57ns 21.31ns 24.07ns 34.36n 4.03ns
1M cycles 33.9 11.1 33.1 33.0 24.1 39.6 10.5
2M 106.21ns 22.49ns 27.56ns 21.31ns 46.62ns 37.05n 12.14ns
2M cycles 53.1 16.9 33.1 33.0 46.6 42.7 31.6
4M 107.51ns 120.65ns 27.56ns 21.31ns 119.53ns 37.36n 12.06ns
4M cycles 53.8 90.5 33.1 33.0 119.5 43.0 31.3
8M 107.92ns 121.18ns 27.57ns 21.31ns 141.08ns 37.37n 12.21ns
8M cycles 54.0 90.9 33.1 33.0 141.1 43.0 31.7
16M 107.86ns 121.27ns 47.72ns 31.54ns 143.90ns 37.57n 12.01ns
16M cycles 53.9 90.9 57.3 48.9 143.9 43.3 31.2
32M 107.91ns 119.22ns 111.71ns 117.28ns 144.34ns 37.09n 12.02ns
32M cycles 54.0 89.4 134.1 181.8 144.3 42.7 31.3
64M 107.91ns 119.48ns 149.90ns 117.39ns 144.36ns 37.07n 11.98ns
64M cycles 54.0 89.6 179.9 182.0 144.4 42.7 31.2
128M 107.91ns 121.75ns 169.79ns 117.51ns 144.42ns 37.57n 12.02ns
128M cycles 54.0 91.3 203.7 182.1 144.4 43.3 31.3
256M 107.97ns 122.11ns 174.90ns 117.58ns 144.34ns 37.77n 12.21ns
256M cycles 54.0 91.6 209.9 182.3 144.3 43.5 31.7

Задержки кеша на Эльбруса 8СВ таковы:


  • L1: 3 такта с 1,94 нс
  • L2: 11 тактов с 7,1 нс
  • L3: 3 такта с 21,31 нс
  • ОЗУ: 90-180 тактов с 117 нс

Характеристики кеша для Эльбрус 8С можно посмотреть здесь: Архитектура Эльбрус 8С


Исходный код: Test TLB


Тесты памяти STREAM


Array size = 10000000 (elements), Offset = 0 (elements)

Memory per array = 76.3 MiB (= 0.1 GiB).

Total memory required = 228.9 MiB (= 0.2 GiB).

CPU Frequency Threads Memory Type Copy (MB/s) Scale (MB/s) Add (MB/s) Triad (MB/s)
Elbrus 4C 750 4 DDR3-1600 9 436.30 9 559.70 10 368.50 10 464.80
Elbrus 8C 1300 8 DDR3-1600 11 406.70 11 351.70 12 207.50 12 355.10
Elbrus 8CB 1550 8 DDR4-2400 23 181.80 22 965.20 25 423.90 25 710.20
Allwinner A64 1152 4 LPDDR3-800 2 419.90 2 421.30 2 112.70 2 110.10
AMD A6-3650 2600 4 DDR3-1333 6 563.60 6 587.90 7 202.80 7 088.00

Исходный код: STREAM


Geekbench 4/5 (В режиме RTC: x86 -> e2k трансляция)


Geekbench 5


CPU Frequency Threads Single Thread Multi Thread
Эльбрус 8С 1300 8 142 941
Эльбрус 8СВ 1550 8 159 1100
Intel Core i7 2600 3440 8 720 2845
Amd A6 3650 2600 4 345 1200

Geekbench 4


CPU Frequency Threads Single Thread Multi Thread
Эльбрус 8С 1300 8 873 3398
Эльбрус 8СВ 1550 8 983 4042
Intel Pentium 4 2800 1 795 766
Intel Core i7 2600 3440 8 3702 12063
Qualcomm 625 2000 8 852 2829

Crystal Mark 2004 (В режиме RTC: x86 -> e2k трансляция)


CPU Threads Frequency ALU FPU MEM R (Mb/s) MEM W (Mb/s) Anounced
486 DX4 1 75 119 77 9 11 1993
P1 (P54C) 1 200 484 420 80 65 1994
P1 MMX (P55C) 1 233 675 686 112 75 1997
P2 1 400 1219 1260 222 150 1998
Transmeta Crusoe TM5800 1 1000 2347 1689 405 223 2000
P3 (Coopermine) 1 1000 3440 3730 355 170 2000
P4 (Willamete) 1 1600 3496 4110 1385 662 2001
Celeron (Willamete) 1 1800 3934 4594 1457 657 2001
Athlon XP (Palomino) 1 1400 4450 6220 430 520 2001
P4 (Northwood) 1 2400 5661 6747 1765 754 2002
P4 (Prescott) 1 2800 5908 6929 3744 851 2004
Athlon 64 (Venice) 1 1800 6699 7446 1778 906 2005
Celeron 530 (Conroe-L) 1 1733 7806 9117 3075 1226 2006
P4 (Prescott) 2 3000 9719 10233 3373 1578 2004
Atom D525 4 1800 10505 7605 3407 1300 2010
Athlon 64 X2 (Brisbane) 2 2300 16713 19066 3973 2728 2007
Core i3-6100 2 3700 17232 10484 5553 9594 2015
Pentium T3200 (Merom) 2 2000 20702 18063 4150 1598 2008
Atom x5-Z8350 4 1440 21894 18018 4799 2048 2016
Core i3-M330 4 2133 25595 26627 6807 4257 2010
Core 2 Duo 2 3160 28105 18196 6850 2845 2008
Atom Z3795 4 1600 40231 34963 12060 5797 2016
AMD A6-3650 4 2600 46978 35315 9711 3870 2011
Core 2 Quad 4 2833 47974 31391 9710 5493 2008
Core i3-4130 4 3400 54296 39163 19450 9269 2013
AMD Phenom II X4 965 (Agena) 4 3400 59098 56272 11162 5973 2009
Core i7-2600 8 3400 95369 71648 19547 9600 2011
Core i7-9900K 16 3600 270445 238256 44618 17900 2018
Elbrus-8C RTC-x86 8 1300 65817 29977 49800 7945 2016
Elbrus-8CB RTC-x86 8 1500 77481 37972 62100 13940 2018
Elbrus-1C+ RTC-x86 1 1000 6862 2735 6230 1800 2015

Процессор Эльбрус-8С 1.3 ГГц на уровне AMD Phenom II X4 965 3.4 ГГц 4 ядра. 8СВ на 20% быстрее.


Бенчмарки сред/языков программирования


А теперь переходим к бенчмаркам языков программирования (C#, Java, JavaScript, Python, Lua).


Исходный код здесь: https://github.com/EntityFX/EntityFX-Bench
Исходный код для прощлых бенчмарков можете найти тут: https://github.com/EntityFX/anybench


Микро бенчмарки


В цикле с большим числоv итераций проводим некоторые операции и замеряем время выполнения данного куска кода. Ниже буду приводить примеры на языке Python.


Arithmetics


Замеряет скорость арифметики: в цикле выполняет различные математические операции с замером времени выполнения.


Пример кода на Python:


    @staticmethod    def _doArithmetics(i : int) -> float:        return math.floor(i / 10) * math.floor(i / 100) * math.floor(i / 100) * math.floor(i / 100) * 1.11) + math.floor(i / 100) * math.floor(i / 1000) * math.floor(i / 1000) * 2.22 - i * math.floor(i / 10000) * 3.33 + i * 5.33

Math


Замеряет скорость математических функций (Cos, Sin, Tan, Log, Power, Sqrt):


    @staticmethod    def _doMath(i : int, li : float) -> float:        rev = 1.0 / (i + 1.0)        return (math.fabs(i) * math.acos(rev) * math.asin(rev) * math.atan(rev) + math.floor(li) + math.exp(rev) * math.cos(i) * math.sin(i) * math.pi) + math.sqrt(i)

Loops


Замеряет скорость работы холостых циклов. Кстати, некоторые компиляторы и рантаймы могут оптимизировать этот код.


Conditions


Замеряет скорость работы условий.


        d = 0        i = 0; c = -1        while i < self._iterrations:             c = ((-1 if c == (-4) else c))            if (i == (-1)):                 d = 3            elif (i == (-2)):                 d = 2            elif (i == (-3)):                 d = 1            d = (d + 1)            i += 1; c -= 1        return d

Array speed (Memory, Random Memory)


Замеряет скорость чтения из массива в переменную (последовательно или со случайными индексами)


Большой кусок кода на Python
    def _measureArrayRead(self, size) :        block_size = 16        i = [0] * block_size        array0_ = list(map(lambda x: random.randint(-2147483647, 2147483647), range(0, size)))        end = len(array0_) - 1        k0 = math.floor(size / 1024)        k1 = 1 if k0 == 0 else k0        iter_internal = math.floor(self._iterrations / k1)        iter_internal = 1 if iter_internal == 0 else iter_internal        idx = 0        while idx < end:             i[0] = (array0_[idx])            i[1] = (array0_[idx + 1])            i[2] = (array0_[idx + 2])            i[3] = (array0_[idx + 3])            i[4] = (array0_[idx + 4])            i[5] = (array0_[idx + 5])            i[6] = (array0_[idx + 6])            i[7] = (array0_[idx + 7])            i[8] = (array0_[idx + 8])            i[9] = (array0_[idx + 9])            i[0xA] = (array0_[idx + 0xA])            i[0xB] = (array0_[idx + 0xB])            i[0xC] = (array0_[idx + 0xC])            i[0xD] = (array0_[idx + 0xD])            i[0xE] = (array0_[idx + 0xE])            i[0xF] = (array0_[idx + 0xF])            idx += block_size        start = time.time()        it = 0        while it < iter_internal:             idx = 0            while idx < end:                 i[0] = (array0_[idx])                i[1] = (array0_[idx + 1])                i[2] = (array0_[idx + 2])                i[3] = (array0_[idx + 3])                i[4] = (array0_[idx + 4])                i[5] = (array0_[idx + 5])                i[6] = (array0_[idx + 6])                i[7] = (array0_[idx + 7])                i[8] = (array0_[idx + 8])                i[9] = (array0_[idx + 9])                i[0xA] = (array0_[idx + 0xA])                i[0xB] = (array0_[idx + 0xB])                i[0xC] = (array0_[idx + 0xC])                i[0xD] = (array0_[idx + 0xD])                i[0xE] = (array0_[idx + 0xE])                i[0xF] = (array0_[idx + 0xF])                idx += block_size            it += 1        elapsed = time.time() - start        return (iter_internal * len(array0_) * 4 / elapsed / 1024 / 1024, i)

String manipulation


Скорость работы со строковыми функциями (replace, upper, lower)


    @staticmethod    def _doStringManipilation(str0_ : str) -> str:        return ("/".join(str0_.split(' ')).replace("/", "_").upper() + "AAA").lower().replace("aaa", ".")

Hash algorithms


Алгоритмы SHA1 и SHA256 над байтами строк.


    @staticmethod    def _doHash(i : int, prepared_bytes):        hashlib.sha1()        sha1_hash = hashlib.sha1(prepared_bytes[i % 3]).digest()        sha256_hash = hashlib.sha256(prepared_bytes[(i + 1) % 3]).digest()        return sha1_hash + sha256_hash

Комплексные бенчмарки


Выполнил реализацию популярных бенчмарков Dhrystone, Whetstone, LINPACK, Scimark 2 на всех 5 языках программирования (конечно же использовал существующие исходники, но адаптировал под мои тесты).


Dhrystone


Dhrystone синтетический тест, который был написан Reinhold P. Weicker в 1984 году.
Данный тест не использует операции с плавающей запятой, а версия 2.1 написана так, чтобы исключить возможность сильных оптимизаций при компиляции.
Бенчмарк выдаёт результаты в VAX Dhrystones в секунду, где 1 VAX DMIPS = Dhrystones в секунду делить на 1757.

Whetstone


Whetstone синтетический тест, который был написан Harold Curnow в 1972 году на языке Fortran.
Позже был переписан на языке C Roy Longbottom. Данный тест выдаёт результаты в MWIPS,
также промежуточные результаты в MOPS (Миллионов операций в секунду) и MFLOPS (Миллионы вещественных операций с плавающей запятой в секунду).
Данный тест производит различные подсчёты: производительность целочисленных и операций с плавающей запятой,
производительность операций с массивами, с условным оператором, производительность тригонометрических функций и функций возведения в степень, логарифмов и извлечения корня.

LINPACK


LINPACK тест, который был написан Jack Dongarra на языке Fortran в 70х годах, позже переписан на язык C.
Тест считает системы линейных уравнений, делает различные операции над двумерными (матрицами) и одномерными (векторами).
Используется реализация Linpack 2000x2000.

Scimark 2


SciMark 2 набор тестов на языке C измеряющий производительность кода встречающегося в научных и профессиональных приложениях. Содержит в себе 5 вычислительных тестов: FFT (быстрое преобразование Фурье), Gauss-Seidel relaxation (Метод Гаусса Зейделя для решения СЛАУ), Sparse matrix-multiply (Умножение разреженных матриц), Monte Carlo integration (Интегрирование методом Монте-Карло), и LU factorization (LU-разложение).

Переходим к результатам.


Результаты


Бенчмарки Java


Результаты нативных бенчмарков

Результаты Java на Эльбрусах в сравнении с Core i7 2600 4 ядра, 8 потоков 3.4 ГГц:


  • Эльбрус 1С+ в 11 раз медленнее на 1 поток
  • Эльбрус 4С в 10 раз медленнее на 1 поток
  • Эльбрус 8С в 5,5 раз медленнее на 1 поток
  • Эльбрус 8СВ в 4,5 раз медленнее на 1 поток
  • Эльбрус 1С+ в 18 раз медленнее на всех потоках
  • Эльбрус 4С в 12,5 раз медленнее на всех потоках
  • Эльбрус 8С в 3 раз медленнее на всех потоках
  • Эльбрус 8СВ в 2,5 раз медленнее на всех потоках

Результаты Java на Эльбрусах в сравнении с Core i7 2600 4 ядра, 8 потоков, но на одинаковых частотах:


  • Эльбрус 1С+ в 3,5 раз медленнее на 1 поток Core i7 2600 на частоте 1 ГГц
  • Эльбрус 4С в 2,5 раз медленнее на 1 поток Core i7 2600 на частоте 0,8 ГГц
  • Эльбрус 8С в 2 раз медленнее на 1 поток Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 2 раз медленнее на 1 поток Core i7 2600 на частоте 1,55 ГГц
  • Эльбрус 1С+ в 5 раз медленнее на всех потоках Core i7 2600 на частоте 1 ГГц
  • Эльбрус 4С в 2,75 раз медленнее на всех потоках Core i7 2600 на частоте 0,8 ГГц
  • Эльбрус 8С в 1,15 раз медленнее на всех потоках Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 1,15 раз медленнее на всех потоках Core i7 2600 на частоте 1,55 ГГц

Для Java делали очень серьёзные оптимизации, поэтому отставание в 2 раза на одинаковых частотах не является плохим результатом.


Про то, как оптимизировали Java можно почитать тут: Java на Эльбрусе


Посмотреть здесь:



Бенчмарки C# (.Net Framework, .Net Core, Mono)


Результаты бенчмарков на C#

DotnetBenchmarks.png


Так как сред исполнения несколько (.Net Framework, .Net Core, Mono), то я старался сравнивать одинаковые среды исполнения, т. е. Mono на e2k c Mono на x86.


Результаты C# (Mono) на Эльбрусах в сравнении с Core i7 2600 4 ядра, 8 потоков 3.4 ГГц:


  • Эльбрус 1С+ в 15,5 раз медленнее на 1 поток
  • Эльбрус 4С в 19 раз медленнее на 1 поток
  • Эльбрус 8С в 10,5 раз медленнее на 1 поток
  • Эльбрус 8СВ в 8 раз медленнее на 1 поток
  • Эльбрус 1С+ в 24 раз медленнее на всех потоках
  • Эльбрус 4С в 12,5 раз медленнее на всех потоках
  • Эльбрус 8С в 4,5 раз медленнее на всех потоках
  • Эльбрус 8СВ в 4 раз медленнее на всех потоках

Результаты C# (Mono) на Эльбрусах в сравнении с Core i7 2600 4 ядра, 8 потоков, но на одинаковых частотах:


  • Эльбрус 1С+ в 4,5 раз медленнее на 1 поток Core i7 2600 на частоте 1 ГГц
  • Эльбрус 4С в 4,2 раз медленнее на 1 поток Core i7 2600 на частоте 0,8 ГГц
  • Эльбрус 8С в 3 раз медленнее на 1 поток Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 3 раза медленнее на 1 поток Core i7 2600 на частоте 1,55 ГГц
  • Эльбрус 1С+ в 7 раз медленнее на всех потоках Core i7 2600 на частоте 1 ГГц
  • Эльбрус 4С в 3 раза медленнее на всех потоках Core i7 2600 на частоте 0,8 ГГц
  • Эльбрус 8С в 1,5 раз медленнее на всех потоках Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 1,2 раз медленнее на всех потоках Core i7 2600 на частоте 1,55 ГГц

Результаты C# (NetCore) в режиме RTC на Эльбрусах в сравнении с Core i7 2600 4 ядра, 8 потоков 3.4 ГГц:


  • Эльбрус 8С в 3,5 раз медленнее на 1 поток Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 3 раз медленнее на 1 поток Core i7 2600 на частоте 1,55 ГГц
  • Эльбрус 8С в 2 раз медленнее на всех потоках Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 1,5 раз медленнее на всех потоках Core i7 2600 на частоте 1,55 ГГц

Результаты C# (NetCore) в режиме RTC на Эльбрусах в сравнении с Core i7 2600 4 ядра, 8 потоков, но на одинаковых частотах:


  • Эльбрус 8С в 1,3 раз медленнее на 1 поток Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 1,2 раз медленнее на 1 поток Core i7 2600 на частоте 1,55 ГГц
  • Эльбрус 8С в 1,25 раза быстрее на всех потоках Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 1,25 раза быстрее на всех потоках Core i7 2600 на частоте 1,55 ГГц

Mono сам по себе является достаточно медленной средой выполнения по сравнению с Net Fremework, а особенно с NetCore (до 3х раз). Что достаточно допустимо. Здесь я не знаю, делали ли оптимизации как это было сделано с Java.


Выходит NetCore в режиме RTC на Эльбрусах работает до 4х раз быстрее чем Mono. Будем ждать нативного NetCore для e2k.


Бенчмарки JavaScript (Браузерные)


JavaScript версия бенчмарка: http://laseroid.azurewebsites.net/js-bench/


Результаты бенчмарков на JavaScript

Результаты JavaScript на Эльбрусах в сравнении с Core i7 2600 4 ядра, 8 потоков 3.4 ГГц:


  • Эльбрус 1С+ в 16 раз медленнее
  • Эльбрус 4С в 12,5 раз медленнее
  • Эльбрус 8С в 6,5 раз медленнее
  • Эльбрус 8СВ в 5 раз медленнее

Результаты JavaScript на Эльбрусах в сравнении с Core i7 2600 4 ядра, 8 потоков, но на одинаковых частотах:


  • Эльбрус 1С+ в 5 раз медленнее Core i7 2600 на частоте 1 ГГц
  • Эльбрус 4С в 2,75 раза медленнее Core i7 2600 на частоте 0,8 ГГц
  • Эльбрус 8С в 2,5 раза медленнее Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 2,25 раз медленнее Core i7 2600 на частоте 1,55 ГГц

Другие популярные JavaScript бенчмарки


Octane


Firefox (версии разные)


Cpu Result (баллы)
Intel Core i7 2600 23321
AMD A6-3650 11741
Intel Pentium 4 2800 3387
Elbrus 8C (rtc x86 32bit) 2815
Elbrus 8C 2102
Elbrus 1C+ 739

Kraken Benchmark


Firefox (версии разные)


Cpu Result (ms)
Elbrus 8C 10493.4
Elbrus 8CB RTX x86 9567.5
Elbrus 8CB 8714.2
Intel Pentium 4 2800 9486.6
AMD A6-3650 3052.5
Intel Core i7 2600 (3.4 GHz) 1456.8

Sunspider


Firefox (версии разные)


Cpu Result (ms)
Elbrus 8C 3059.8
Elbrus 8CB 2394.6
Intel Pentium 4 2800 1295.5
AMD A6-3650 485.6
Intel Core i7 2600 (3.4 GHz) 242.9

Результаты слабоваты. Причина: низкие тактовые частоты и недостаточная оптимизация. Но это гораздо лучше, чем было раньше. Также браузер FX52 уже старый, а будет новая, надеюсь, там уже допилили JavaScript.


Бенчмарки PHP


Результаты бенчмарков на PHP

Результаты PHP на Эльбрусах в сравнении с Core i7 2600 3.4 ГГц:


  • Эльбрус 2С+ в 15,5 раз медленнее
  • Эльбрус 1С+ в 8 раз медленнее
  • Эльбрус 4С в 4,5 раза медленнее
  • Эльбрус 8С в 3 раза медленнее
  • Эльбрус 8СВ в 2,5 раза медленнее
  • Эльбрус R1000 в 12,5 раз медленнее

Результаты PHP на Эльбрусах в сравнении с Core i7 2600, но на одинаковых частотах:


  • Эльбрус 2С+ в 2,3 раз медленнее Core i7 2600 на частоте 0,5 ГГц
  • Эльбрус 1С+ в 2,3 раз медленнее Core i7 2600 на частоте 1 ГГц
  • Эльбрус 4С = Core i7 2600 на частоте 0,8 ГГц
  • Эльбрус 8С в 1,1 раза медленнее Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 1,1 раза медленнее Core i7 2600 на частоте 1,55 ГГц
  • Эльбрус R1000 в 3,75 раз медленнее Core i7 2600 на частоте 1 ГГц

PHP показывает почти равную скорость на одинаковых частотах с Intel процессорами. Причина проста: здесь МЦСТ делали оптимизацию. Очень удивительно для интерпретируемого языка. Кстати, хочу обратить внимание на то что PHP 7.4 стал быстрее версии PHP 5.6 в 1,5 раза, поэтому я запускал бенчмарки на 2х версиях на Core i7 2600.


Другие популярные PHP бенчмарки


PHP Simple Benchmark


Test Elbrus 8C Elbrus 8CB Pentium 4 2800 AMD A6-3650 Core i7-2600 Allwinner A64
Frequency 1300 1550 2800 2600 3400 1152
CPU Threads 8 8 1 4 8 (4) 4
Version 7.0.33 7.0.33 7.2.24 7.4.3 7.0.33 5.6.20 7.0.33
01_math (kOp/s) 58.15 69.72 104.19 295.97 308.94 131.73 44.33
02_string_concat (MOp/s) 3.56 3.92 4.00 13.15 5.52 0.56 3.07
03_1_string_number_concat (kOp/s) 418.29 472.77 631.10 1510.00 1680.00 1600.00 332.99
03_2_string_number_format (kOp/s) 506.39 573.89 724.44 1690.00 1810.00 1620.00 432.88
04_string_simple_functions (kOp/s) 77.06 91.50 198.03 332.67 39.12 57.60 59.48
05_string_multibyte (kOp/s) 2.48 2.90 -.-- 57.53 11.01 12.77 2.50
06_string_manipulation (kOp/s) 22.10 26.91 78.96 127.08 14.11 23.96 35.73
07_regex (kOp/s) 48.24 54.60 128.41 233.76 334.99 62.43 47.64
08_1_hashing (kOp/s) 113.58 132.62 180.46 306.24 345.52 270.31 71.44
08_2_crypt (Op/s) 361.21 403.62 571.99 813.60 460.00 454.15 238.00
09_json_encode (kOp/s) -.-- -.-- 88.33 233.62 313.52 191.66 48.67
10_json_decode (kOp/s) -.-- -.-- 68.02 143.01 211.62 94.15 33.57
11_serialize (kOp/s) 73.67 81.57 130.16 307.52 435.66 263.06 62.20
12_unserialize (kOp/s) 63.89 69.02 79.33 301.98 348.62 258.75 46.21
13_array_fill (MOp/s) 2.08 2.50 5.30 9.69 14.07 5.35 1.97
14_array_range (kOp/s) 50.36 57.54 31.68 61.01 1140.00 30.35 25.25
14_array_unset (MOp/s) 2.08 2.48 7.17 14.05 14.45 7.32 2.16
15_loops (MOp/s) 13.57 16.21 38.75 150.46 78.92 42.54 12.64
16_loop_ifelse (MOps/s) 4.74 5.64 13.41 28.34 19.04 18.72 4.48
17_loop_ternary (MOp/s) 3.18 3.79 7.29 12.10 11.40 11.85 2.90
18_1_loop_defined_access (MOp/s) 3.28 3.90 9.03 18.90 18.29 15.35 3.18
18_2_loop_undefined_access (MOp/s) 0.60 0.66 1.13 2.60 2.40 2.10 0.49
19_type_functions (MOp/s) 250.57 293.21 806.37 1560.00 1180.00 971.77 193.89
20_type_conversion (MOp/s) 382.32 458.44 812.72 1570.00 1530.00 1510.00 298.61
21_0_loop_exception_none (MOp/s) 7.45 8.91 19.67 56.57 26.35 15.67 6.97
21_1_loop_exception_try (MOp/s) 6.48 7.74 19.11 52.18 23.61 18.99 6.39
21_2_loop_exception_catch (kOp/s) 184.22 216.00 573.09 1380.00 1240.00 498.60 147.28
22_loop_null_op (MOp/s) 3.25 3.74 8.39 16.03 17.62 -.-- 3.08
23_loop_spaceship_op (MOp/s) 4.30 5.12 8.50 17.98 20.39 -.-- 3.96
24_xmlrpc_encode (Op/) -.-- -.-- -.-- -.-- 17.6 -.-- -.--
25_xmlrpc_decode (Op/) -.-- -.-- -.-- -.-- 9.16 -.-- -.--
26_1_class_public_properties (MOp/s) 3.32 4.08 10.51 26.70 19.57 9.42 3.22
26_2_class_getter_setter (MOp/s) 1.31 1.51 4.66 9.41 5.52 4.13 0.97
26_3_class_magic_methods (MOp/s) 0.52 0.59 1.35 3.77 3.21 1.89 0.41
Total (MOp/s) 1.23 1.43 2.60 5.33 2.48 2.02 0.98
Time (sec) 488.324 419.895 231.485 113.087 252.376 261.652 609.787

Бенчмарки Python


Результаты бенчмарков на Python

Так как под Windows не удалось запустить многопоточный Python (я не Питонист, да и времени сделать универсальную многопоточность на всех ОС не было, принимаю патчи), приведу относительно Amd A6 3650, который на 40% медленнее Core i7.


Результаты Python на Эльбрусах в сравнении с Core i7 2600 3.4 ГГц:


  • Эльбрус 2С+ в 30 раз медленнее на 1 поток
  • Эльбрус 1С+ в 12,5 раз медленнее на 1 поток
  • Эльбрус 4С в 15,5 раз медленнее на 1 поток
  • Эльбрус 8С в 9 раз медленнее на 1 поток
  • Эльбрус 8СВ в 7,8 раз медленнее на 1 поток
  • Эльбрус 2С+ в 58 раз медленнее на всех потоках
  • Эльбрус 1С+ в 25 раз медленнее на всех потоках
  • Эльбрус 4С в 13,5 раз медленнее на всех потоках
  • Эльбрус 8С в 4,2 раза медленнее на всех потоках
  • Эльбрус 8СВ в 3,8 раза медленнее на всех потоках

Результаты Python на Эльбрусах в сравнении с Core i7 2600, но на одинаковых частотах:


  • Эльбрус 2С+ в 4,5 раз медленнее на 1 поток Core i7 2600 на частоте 0,5 ГГц
  • Эльбрус 1С+ в 3,6 раз медленнее на 1 поток Core i7 2600 на частоте 1 ГГц
  • Эльбрус 4С в 3,5 раз медленнее на 1 поток Core i7 2600 на частоте 0,8 ГГц
  • Эльбрус 8С в 3,5 раз медленнее на 1 поток Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 3,5 раз медленнее на 1 поток Core i7 2600 на частоте 1,55 ГГц
  • Эльбрус 2С+ в 8,5 раз медленнее на всех потоках Core i7 2600 на частоте 0,5 ГГц
  • Эльбрус 1С+ в 7,4 раз медленнее на всех потоках Core i7 2600 на частоте 1 ГГц
  • Эльбрус 4С в 3 раз медленнее на всех потоках Core i7 2600 на частоте 0,8 ГГц
  • Эльбрус 8С в 1,5 раза медленнее на всех потоках Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 1,35 раза медленнее на всех потоках Core i7 2600 на частоте 1,55 ГГц

Во первых, для Python пока не делалось оптимизаций, которые повысили бы производительность. Во вторых, интерпретируемые языки плохо подходят к VLIW-архитектуре Эльбруса. Но МЦСТ советуют использовать CPython для производительности (Python -> C, а затем компилируем с помощью LCC). Про PyPy c Jit пока ничего не известно, но если потребуется, то такая среда выполнения будет реализована, а это сильно повысит производительность.


Также было замечено, что в некоторых случаях Python в режиме RTC (двоичная трансляция x86-64 в e2k) показывает большую производительность: в арифметике и математике. Значит есть ещё потенциал для оптимизации Python, возможно даже в 2 раза.


Бенчмарки Lua


Результаты бенчмарков на Lua

Результаты Lua на Эльбрусах в сравнении с Core i7 2600 3.4 ГГц:


  • Эльбрус 2С+ в 16 раз медленнее
  • Эльбрус 1С+ в 6 раз медленнее
  • Эльбрус 4С в 10 раз медленнее
  • Эльбрус 8С в 6 раз медленнее
  • Эльбрус 8СВ в 5 раз медленнее
  • Эльбрус R1000 в 9 раз медленнее

Результаты Lua на Эльбрусах в сравнении с Core i7 2600, но на одинаковых частотах:


  • Эльбрус 2С+ в 2,4 раза медленнее Core i7 2600 на частоте 0,5 ГГц
  • Эльбрус 1С+ в 1,75 раза медленнее Core i7 2600 на частоте 1 ГГц
  • Эльбрус 4С в 2 раза медленнее Core i7 2600 на частоте 0,8 ГГц
  • Эльбрус 8С в 2,3 раза медленнее Core i7 2600 на частоте 1,3 ГГц
  • Эльбрус 8СВ в 2,2 раза медленнее Core i7 2600 на частоте 1,55 ГГц
  • Эльбрус R1000 в 2,6 раз медленнее Core i7 2600 на частоте 1 ГГц

У Lua отставание всего в 2 раза на равных частотах, это достаточно тепримо для VLIW-архитектуры.


Выводы


Во сколько раз Core i7 2600 быстрее Эльбрусов:


Сводная таблица: во сколько раз Core i7 2600 быстрее Эльбрусов


Во сколько раз Core i7 2600 быстрее Эльбрусов, если бы он работал на частоте Эльбрусов:


Сводная таблица: во сколько раз Core i7 2600 быстрее Эльбрусов на одинаковой частоте


Как мы знаем, Эльбрус имеет VLIW архитектуру, у которой повышение производительности достигается путём оптимизации компилируемого кода (Эльбрус имеет явный параллелизм). Также у Эльбруса нет предсказателя переходов и переупорядочивания инструкций (снова всё явно задаётся компилятором).


Следует:


  • Компилируемые программы на C/C++ (возможно, другие) будут иметь хорошую производительность. Это достигается патчами участков кода, где нужно оптимизировать производительность и умным компилятором LCC (eLbrus C Compiler).
  • Языки с JIT-трансляцией (Java, JavaScript, C# Mono) будут иметь среднюю производительность. Здесь оптимизируют саму среду исполнения. Возможно, также потребуется оптимизировать сами программы.
  • Интерпретируемые языки (PHP, Python, Lua) будут иметь низкую производительность. Но оптимизация среды выполнения позволит поднять до среднего уровня.

Другие способы:


  • Доработка компилятора LCC.
  • Архитектурно-специфические доработки в самой ОС.
  • Улучшать архитектуру Эльбрус:
    • Поднимать частоту
    • Добавить предсказатель и т.д.

Какие языки ещё хотелсоь бы потестировать:


  • Golang (Ждём выпуска)
  • Ruby
  • Perl

P.S. Поздравляем команду МЦСТ с Новым Годом. Желаем удачи в разработке следующих поколений процессоров. Ждём массового появления устройств на процессорах с архитектурой E2K!


Другая интересная информация

"Что такое Эльбрус?


Эльбрус это полувековая история развития отечественной вычислительной технологии.
Это уникальная российская архитектура микропроцессора.
Это группа компаний объединенных одной идеей.
И наконец, это просто современный микропроцессор."
elbrus.ru


Web:


Официальный сайт: http://elbrus.ru


Официальная вики: http://wiki.community.elbrus.ru


Официальный форум: http://forum.community.elbrus.ru


Персональный сайт Максима Горшенина: http://imaxai.ru


Отличная вики на сайте ALT Linux Team: https://www.altlinux.org/Эльбрус


Telegram:


https://t.me/imaxairu основной канал с новостями из мира микропроцессоров Эльбрус из первых рук


https://t.me/e2k_chat на текущий момент основной чат по микропроцессорам Эльбрус, в котором можно пообщаться с разработчиками (организован сотрудниками компании Промобит, хорошо известной по продуктам BITBLAZE)


https://t.me/joinchat/FUktBxkwG8FKlhdzQ7DegQ чат для поболтать на разные темы любителями (и не очень) микропроцессоров Эльбрус с целью незасорения основного чата ненужной информацией, одним словом флудильня фан-клуба :)


Instagram:


Максим Горшенин и Эльбрусы: https://instagram.com/imaxai


Youtube:


Официальный канал группы компаний Elbrus: https://www.youtube.com/c/ElbrusTV


Частный канал Максима Горшенина: https://www.youtube.com/c/MaximGorshenin


Частный канал Михаила Захарова с эмз "Звезда": https://www.youtube.com/channel/UC3mtwuC2ugAngyO9tY2mqRw


Канал фанатов Е2К Elbrus PC Test (https://www.youtube.com/channel/UC4zlCBy0eFLkE-BxgqQK8FA):



Серия видеороликов по Эльбрусам от Дмитрия Бачило:



Серия видеороликов по играм на Эльбрусах от Дмитрия Пугачева:



Старенький, но не устаревающий ликбез по Эльбрусам Константина Трушкина на HighLoad++ 2014: https://youtu.be/ZTxOSGBCRec


Актуальными моделями микропроцессоров Эльбрус являются:



О существующих и будующих моделях микропроцессоров можно прочитать в вики Модели процессоров Эльбрус


Альта и оф. вики Характеристики процессоров Эльбрус


Результаты тестирования Результаты тестирования Эльбрус энтузиастами дают примерную оценку производительности. И это не предел, т.к. работы над совершенствованием оптимизирующего компилятора ведутся постоянно.


Попробовать ПК с процессором Эльбрус вживую можно в Яндекс.Музее в Москве.


Полезно прочитать:


Руководство по эффективному программированию на платформе Эльбрус http://mcst.ru/elbrus_prog Нейман-заде М. И., Королёв С. Д. 2020 [ PDF ] [ HTML ]


Микропроцессоры и вычислительные комплексы семейства Эльбрус (http://mcst.ru/files/511cea/886487/1a8f40/000000/book_elbrus.pdf) Ким А. К., Перекатов В. И., Ермаков С. Г. СПб.: Питер, 2013 272 с. ( PDF )


Операционные системы для архитектуры E2K:


АЛЬТ 8 СП (http://altsp.su/produkty/o-produktakh/) | Рабочая станция (https://www.basealt.ru/products/alt-workstation/) | Сервер (https://www.basealt.ru/products/alt-server/) | Образование (https://www.basealt.ru/products/alt-education/)


Astra Linux SE "Ленинград" (http://astralinux.ru/)


Эльбрус Линукс (http://mcst.ru/programmnoe-obespechenie-elbrus)


Попробовать ОС Эльбрус Линукс для x86_64:
https://yadi.sk/d/spqkqOAncT-aKQ
Документация:
https://yadi.sk/d/2shOcqIrmZQLLA


Интересное:


Вопрос:
Зачем VLIW, давай другую?


Ответ:


  1. http://www.mcst.ru/e2k_arch.shtml
  2. https://t.me/e2k_chat/89326

Лекция Бориса Бабаяна "История развития архитектуры вычислительных машин":
Часть 1 https://youtu.be/Swk27K9m_SA
Часть 2 https://youtu.be/QFD0NboTwTU

Подробнее..

Эльбрус VS Intel. Сравниваем производительность систем хранения Аэродиск Восток и Engine

28.09.2020 06:06:32 | Автор: admin


Всем привет. Мы продолжаем знакомить вас с системой хранения данных Аэродиск ВОСТОК, выполненной на базе российского процессора Эльбрус 8C.


В этой статье мы (как и обещали) детально разберем одну из популярнейших и интереснейших тем, связанной с Эльбрусами, а именно производительность. На тему производительности Эльбруса есть достаточно много спекуляций, причем абсолютно полярных. Пессимисты говорят, что производительность Эльбруса сейчас никакая, и чтобы догнать топовых производителей потребуются десятилетия (т.е. в условиях нынешней реальности никогда). С другой стороны, оптимисты говорят, что уже сейчас Эльбрус 8C показывает хорошие результаты, а в ближайшие пару лет с выходом новых версий процессоров (Эльбрус 16С и 32С) мы сможем догнать и перегнать ведущих мировых производителей процессоров.


Мы в Аэродиске люди практичные, поэтому пошли самым простым и понятным (для нас) путем: протестировать, зафиксировать результаты и только потом делать выводы. В итоге мы провели довольно большое количество тестов и обнаружили ряд особенностей работы Эльбруса 8С архитектуры e2k (в том числе, и приятных) и, конечно же, сравнили это с аналогичными СХД на процессорах Intel Xeon архитектуры amd64.


Кстати, более подробно о тестах, результатах и о будущем развитии СХД на Эльбрусах мы поговорим на нашем очередном вебинаре "ОколоИТ" 15.10.2020 в 15 00. Зарегистрироваться можно по ссылке ниже.


РЕГИСТРАЦИЯ НА ВЕБИНАР


Тестовый стенд


Мы создали два стенда. Оба стенда состоят из сервера с Linux-ом, подключенного через 16G FC-коммутаторы к двум котроллерам СХД, в которой установлено 12 SAS SSD 960 ГБ дисков (11,5 ТБ сырой емкости или 5,7 ТБ полезной емкости, если используем RAID-10).


Схематично стенд выглядит следующим образом.



Стенд 1 e2k (Эльбрус)


Конфигурация оборудования следующая:


  • Linux-сервер (2xIntel Xeon E5-2603 v4 (6 cores, 1,70Ghz), 64 GB DDR4, 2xFC-адаптер 16G 2 порта) 1шт.
  • Коммутатор FC 16 G 2 шт.
  • СХД Аэродиск Восток 2-Э12 (2xЭльбрус 8С (8 cores, 1,20Ghz), 32 GB DDR3, 2xFE FC-adaptor 16G 2 port, 12xSAS SSD 960 GB) 1 шт

Стенд 2 amd64 (Intel)


Для сравнения с аналогичной конфигурации на e2k использовалась похожая конфигурация СХД с похожим процессором по характеристикам на amd64:


  • Linux-сервер (2xIntel Xeon E5-2603 v4 (6 cores, 1,70Ghz), 64 GB DDR4, 2xFC-адаптер 16G 2 порта) 1шт.
  • Коммутатор FC 16 G 2 шт.
  • СХД Aerodisk Engine N2 (2xIntel Xeon E5-2603 v4 (6 cores, 1,70Ghz), 32 GB DDR4, 2xFE FC-adaptor 16G 2 port, 12xSAS SSD 960 GB) 1 шт

Важное замечание: используемые в тесте процессоры Эльбрус 8С поддерживают оперативную память только DDR3, это конечно плохо, но не долго. Эльбрус 8СВ (в наличие его у нас пока нет, но скоро будет) поддерживает DDR4.


Методика тестирования


Для генерации нагрузки мы использовали популярную и проверенную временем программу Flexible IO (FIO).


Обе СХД сконфигурированы согласно нашим же рекомендациям по настройке, исходя из требований к высокой производительности на блочном доступе, поэтому используем дисковые пулы DDP (Dynamic Disk Pool). Чтобы не искажать результаты тестирования, на обеих СХД отключаем, компрессию, дедупликацию и RAM-кэш.


Созданы 8 D-LUN-ов в RAID-10 по 500 ГБ, каждый, суммарный полезный объём составляет 4 ТБ (т.е. примерно 70% от возможной полезной емкости данной конфигурации).


Выполняться будут основные и популярные сценарии использования СХД, в частности:


первые два теста эмулируют работу транзакционной СУБД. В этой группе тестов нам интересны IOPS-ы и задержка.


1) Случайное чтение маленькими блоками 4k
a. Размер блока = 4k
b. Чтение/запись = 100%/0%
c. Количество работ = 8
d. Глубина очереди = 32
e. Характер нагрузки = Full Random


2) Случайная запись маленькими блоками 4k
a. Размер блока = 4k
b. Чтение/запись = 0%/100%
c. Количество работ = 8
d. Глубина очереди = 32
e. Характер нагрузки = Full Random


вторые два теста эмулируют работу аналитической части СУБД. В этой группе тестов нам также интересны IOPS-ы и задержка.


3) Последовательное чтение маленькими блоками 4k
a. Размер блока = 4k
b. Чтение/запись = 100%/0%
c. Количество работ = 8
d. Глубина очереди = 32
e. Характер нагрузки = Sequential


4) Последовательная запись маленькими блоками 4k
a. Размер блока = 4k
b. Чтение/запись = 0%/100%
c. Количество работ = 8
d. Глубина очереди = 32
e. Характер нагрузки = Sequential


третья группа тестов эмулирует работу потокового чтения (пример онлайн трансляции, восстановление резервных копий) и потоковой записи (пример видеонаблюдение, запись резервных копий). В этой группе тестов нам уже интересны не IOPS-ы, а MB/s и также задержка.


5) Последовательное чтение большими блоками 128k
a. Размер блока = 128k
b. Чтение/запись = 0%/100%
c. Количество работ = 8
d. Глубина очереди = 32
e. Характер нагрузки = Sequential


6) Последовательная запись большими блоками 128k
a. Размер блока = 128k
b. Чтение/запись = 0%/100%
c. Количество работ = 8
d. Глубина очереди = 32
e. Характер нагрузки = Sequential


Каждый тест будет длиться один час без учета времени прогрева массива в 7 минут.


Результаты тестов


Результаты тестов сведены в две таблицы.


Эльбрус 8С (СХД Аэродиск Восток 2-Э12)



Intel Xeon E5-2603 v4 (СХД Аэродиск Engine N2)



Результаты получились крайне интересные. В обоих случаях мы хорошо утилизировали процессорные мощности СХД (70-90% утилизации), и при таком раскладе явно бросаются в глаза плюсы и минусы обоих процессоров.


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


Если говорить о случайной нагрузке небольшими блоками, то:


  • с точки зрения случайного чтения Intel, безусловно, впереди Эльбруса, разница в 2 раза;
  • с точки зрения случайной записи однозначно ничья, оба процессора показали примерно равные и достойные результаты.

В последовательной нагрузке небольшими блоками картина другая:


  • и при чтении, и при записи Intel существенно (в 2 раза) опережает Эльбрус. При этом, если у Эльбруса показатель IOPS ниже чем у Intel, но выглядит достойно (200-300 тысяч), то с задержками явная проблема (они в три раза выше чем у Intel). Вывод, текущая версия Эльбруса 8С очень не любит последовательные нагрузки небольшими блоками. Явно есть над чем работать.

А вот в последовательной нагрузке большими блоками картина прямо противоположная:


  • оба процессора показали примерно равный результат в MB/s, но есть одно НО. Показатели задержек у Эльбруса в 10 (в десять, Карл!!!) раз лучше (т.е. ниже), чем у аналогичного процессора от Intel (0,4/0,5 ms против 5,1/6,5 ms). Вначале мы подумали, что это глюк, поэтому мы перепроверили результаты, сделали повторный тест, но повторный тест показал ту же картину. Это серьезное преимущество Эльбруса (и архитектуры e2k в целом) перед Intel (и, соответственно, архитектуры amd64). Будем надеяться, что этот успех получит дальнейшее развитие.

Есть ещё одна интересная особенность Эльбруса, на которую внимательный читатель может обратить внимание, посмотрев на таблицу. Если взглянуть на разницу показателей чтения и записи у Intel, то во всех тестах чтение опережает запись в среднем примерно на 50%+. Это норма, к которой все (в том числе и мы) привыкли. Если посмотреть на Эльбрус, то показатели записи значительно ближе к показателям чтения, чтение опережает запись, как правило, на 10 30%, не более.


О чем это говорит? О том, что Эльбрус очень любит запись, а это, в свою очередь, говорит о том, что этот процессор будет очень полезен в задачах, где запись явно преобладает над чтением (кто сказал закон Яровой?), что также является несомненным преимуществом архитектуры e2k, и это преимущество нужно развивать.


Выводы и ближайшее будущее


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


Intel сильно превзошел Эльбрус в случайном чтении небольшими блоками, а также в последовательном чтении и записи небольшими блоками.


При случайной записи небольшими блоками оба процессора показывают равные результаты.


По показателям задержки Эльбрус выглядит значительно лучше Intel-а в потоковой нагрузке, т.е. в последовательном чтении и записи большими блоками.


Кроме того, Эльбрус в отличии от Intel, одинаково хорошо справляется как с нагрузками чтения, так и с нагрузками записи, в то время как у Intel чтение всегда значительно лучше записи.
Исходя из полученных результатов можно сделать вывод о применимости систем хранения данных Аэродиск Восток на процессоре Эльбрус 8С в следующих задачах:


  • информационные системы с преобладанием операций записи;
  • файловый доступ;
  • онлайн-трансляции;
  • видеонаблюдение;
  • резервное копирование;
  • медиа-контент.

Коллективу МЦСТ есть ещё над чем работать, но результат их работы виден уже сейчас, что, конечно, не может не радовать.


Данные тесты проводились на ядре Linux для e2k версии 4.19, на текущий момент в бета-тестах (в МЦСТ, в Базальт СПО, а также у нас, в Аэродиске) находится ядро Linux 5.4-e2k, в котором, кроме всего прочего, серьезно переработан планировщик и много оптимизаций под скоростные твердотельные накопители. Также специально для ядер ветки 5.х.х АО МЦСТ выпускает новый компилятор LCC версии 1.25. По предварительным результатам, на том же процессоре Эльбрус 8С, собранное новым компилятором новое же ядро, окружение ядра, системные утилиты и библиотеки и, собственно, ПО Аэродиск ВОСТОК позволит получить ещё более значительный прирост производительности. И это без замены оборудования на том же процессоре и с теми же частотами.


Мы ожидаем выхода версии Аэродиск ВОСТОК на базе ядра 5.4 ближе к концу года, и как только работа над новой версией будет завершена, мы обновим результаты тестирования и также опубликуем их здесь.


Если теперь вернуться к началу статьи и ответить на вопрос, кто же прав: пессимисты, которые говорят, что Эльбрус никакой и никогда не догонит ведущих производителей процессоров, или все-таки оптимисты, которые говорят, что уже почти догнали и скоро перегоним? Если исходить не из стереотипов и религиозных предубеждений, а из реальных тестов, то, однозначно, правы оптимисты.


Эльбрус уже сейчас показывает хорошие результаты, если сравнивать его с процессорами amd64 среднего уровня. До верхних в линейке моделей серверных процессоров Intel или AMD 8-ке Эльбруса, конечно, далеко, но она туда и не целилась, для этого будут выпущены процессоры 16С и 32С. Вот тогда и поговорим.


Мы понимаем, что после этой статьи вопросов про Эльбрус станет ещё больше, поэтому мы решили организовать ещё один онлайн-вебинар ОколоИТ, чтобы в прямом эфире на эти вопросы дать ответы.


В этот раз у нас в гостях будет заместитель генерального директора компании МЦСТ, Константин Трушкин. Записаться на вебинар можно по ссылке ниже.


РЕГИСТРАЦИЯ НА ВЕБИНАР


Всем спасибо, как обычно ждем конструктивной критики и интересных вопросов.

Подробнее..

Нагрузочное тестирование СХД на Эльбрусе на базе нового ядра Линукс версии 5.4

31.05.2021 06:09:55 | Автор: admin


Тестирование СХД Аэродиск Восток на базе процессоров Эльбрус 8С на новом ядре 5.4 показало крайне позитивный результат: 1,4 миллиона IOPS! Пока оптимисты верили и надеялись, а пессимисты снисходительно улыбались, программисты работали писали код. В итоге новая версия ядра Линукс v5.4 для архитектуры Эльбрус позволила в разы улучшить производительность подсистемы ввода-вывода и полностью реализовать процессора Эльбрус 8С/СВ для систем хранения данных.


По этому прекрасному поводу мы в Аэродиске, предварительно обновив боевую версию встроенного Альт-Линукса в СХД ВОСТОК до ядра 5.4, повторно выполнили нагрузочное тестирование СХД, которое мы публиковали полгода назад. С прошлым отчетом можно ознакомиться по данной ссылке.


Новые тесты проводились на долгожданном ядре Линукс для e2k версии 5.4, которое появилось начале 2021 года, за что хотим сказать огромное спасибо коллективам разработчиков МЦСТ, Базальт СПО, а также Михаилу Шигорину лично.


В ядре 5.4 изменений много, но нас интересуют только основные изменения с точки зрения СХД, а их можно разделить на следующие группы:


Общие обновления:


  • переработан планировщик ввода-вывода, что позволяет лучше параллелить IO между дисками;
  • много мелких оптимизаций под скоростные твердотельные накопители;
  • и самое главное изменение новый компилятор от МЦСТ (LCC версии 1.25).

Обновления от Аэродиска:


  • обновлённый таргет-драйвер, который позволяет лучше параллелить IO между процессорными ядрами;
  • обновление логики работы связки ядро процессора диск для систем на Эльбрусе.

Тестовый стенд


Тестирование мы выполняли на том же железе, что и в прошлый раз. Стенд состоит из сервера с Линуксом, подключенного через FC-коммутатор к двум контроллерам СХД Восток, в которой установлено 12 SAS SSD дисков.


Конфигурация оборудования следующая:


  • Linux-сервер (2xIntel Xeon E5-2603 v4 (6 cores, 1,70Ghz), 64 GB DDR4, 2xFC-адаптер 16G 2 порта) 1шт.
  • Коммутатор FC 16G 1 шт.
  • СХД Аэродиск Восток 2-Э12 (2xЭльбрус 8С (8 cores, 1,20Ghz), 32 GB DDR3, 2xFE FC-adaptor 16G 2 port, 12xSAS SSD 960 GB) 1 шт

Ниже схема стенда.



Методика тестирования


Также как и в прошлый раз для нагрузочных тестов мы использовали популярную и проверенную временем программу Flexible IO (FIO).


СХД сконфигурирована исходя из наших рекомендаций к высокой производительности на блочном доступе или просто настройки для ALL-Flash систем. Поэтому используем не менее двух дисковых пулов DDP (Dynamic Disk Pool). Чтобы не бить в одну точку и максимально реализовать вычислительный потенциал платформы создаем несколько LUN-ов в RAID-10 (8 шт. по 500 ГБ каждый).


Все LUN-ы презентуем двум контроллерам (пополам, по 4 каждому), чтобы максимально утилизировать все ресурсы СХД.


В ходе тестирование будут выполняться следующие популярные сценарии использования СХД, в частности:


Последовательная нагрузка маленькими блоками 4k


  • 100%_read_4k_sequential
  • 100%_write_4k_sequential

Случайная нагрузка маленькими блоками 4k


  • 100%_read_4k_random
  • 100%_write_4k_random

Последовательная нагрузка большими блоками 128k


  • 100%_read_128k_sequential
  • 100%_write_128k_sequential

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


Во всех тестах мы, чтобы не искажать результаты тестирования, намеренно отключаем RAM-кэш СХД, который используется для ускорения ввода-вывода, компрессии и дедупликации. Забежим вперед и отдельно скажем про утилизацию оперативной памяти СХД в целом (чтобы к этому вопросу больше не возвращаться). Во всех тестах RAM утилизируется практически одинаково, т.е. слабо, т.к RAM-кэш, дедуп и компрессия отключены. Вся утилизация RAM это внутренние системные операции СХД. Если бы мы включили RAM-кэш, то результаты были бы заметно лучше, но тогда тест был бы не совсем честным. При этом график утилизации оперативки мы для порядка все-равно приводим в отчете ниже.


Кроме того, исходя из опыта публикации прошлой статьи про производительность Эльбруса и по многочисленным просьбам трудящихся, мы также выкладываем подробные конфиги FIO.


100%_read_4k_sequential

[global]
blocksize=4k
size=80%
direct=1
buffered=0
ioengine=libaio
iodepth=128
group_reporting
rw=read
numjobs=16
runtime=2400
time_based=1
per_job_logs=0
log_avg_msec=30000
write_bw_log=./logs/read-iodepth-128-numjobs-16
write_iops_log=./logs/read-iodepth-128-numjobs-16
write_lat_log=./logs/read-iodepth-128-numjobs-16
[job-1]
filename=/dev/sdj
[job-2]
filename=/dev/sdc
[job-3]
filename=/dev/sdd
[job-4]
filename=/dev/sde
[job-5]
filename=/dev/sdf
[job-6]
filename=/dev/sdg
[job-7]
filename=/dev/sdh
[job-8]
filename=/dev/sdi


100%_write_4k_sequential

[global]
blocksize=4k
size=80%
direct=1
buffered=0
ioengine=libaio
iodepth=128
group_reporting
rw=write
numjobs=16
runtime=2400
time_based=1


write_bw_log=./logs/4k-seq-write.results


write_iops_log=./logs/4k-seq-write.results


write_lat_log=./logs/4k-seq-write.results


[job-1]
filename=/dev/sdj
[job-2]
filename=/dev/sdc
[job-3]
filename=/dev/sdd
[job-4]
filename=/dev/sde
[job-5]
filename=/dev/sdf
[job-6]
filename=/dev/sdg
[job-7]
filename=/dev/sdh
[job-8]
filename=/dev/sdi


100%_read_4k_random

[global]
blocksize=4k
size=80%
direct=1
buffered=0
ioengine=libaio
iodepth=64
group_reporting
rw=randread
numjobs=2
runtime=2400
time_based=1
per_job_logs=0
log_avg_msec=30000
write_bw_log=./logs/4k-rand-read.results
write_iops_log=./logs/4k-rand-read.results
write_lat_log=./logs/4k-rand-read.results
[job-1]
filename=/dev/sdc
[job-2]
filename=/dev/sdd
[job-3]
filename=/dev/sde
[job-4]
filename=/dev/sdf
[job-5]
filename=/dev/sdg
[job-6]
filename=/dev/sdh
[job-7]
filename=/dev/sdi
[job-8]
filename=/dev/sdj


100%_write_4k_random

[global]
blocksize=4k
size=80%
direct=1
buffered=0
ioengine=libaio
iodepth=16
group_reporting
rw=randwrite
numjobs=2
runtime=2400
time_based=1
per_job_logs=0
log_avg_msec=30000
write_bw_log=./logs/4k-rand-write.results
write_iops_log=./logs/4k-rand-write.results
write_lat_log=./logs/4k-rand-write.results
[job-1]
filename=/dev/sdc
[job-2]
filename=/dev/sdd
[job-3]
filename=/dev/sde
[job-4]
filename=/dev/sdf
[job-5]
filename=/dev/sdg
[job-6]
filename=/dev/sdh
[job-7]
filename=/dev/sdi
[job-8]
filename=/dev/sdj


100%_read_128k_sequential

[global]
blocksize=128k
size=80%
direct=1
buffered=0
ioengine=libaio
iodepth=128
group_reporting
rw=read
numjobs=16
runtime=2400
time_based=1
per_job_logs=0
log_avg_msec=30000
write_bw_log=./logs/128k-seq-read.results
write_iops_log=./logs/128k-seq-read.results
write_lat_log=./logs/128k-seq-read.results
[job-1]
filename=/dev/sdj
[job-2]
filename=/dev/sdc
[job-3]
filename=/dev/sdd
[job-4]
filename=/dev/sde
[job-5]
filename=/dev/sdf
[job-6]
filename=/dev/sdg
[job-7]
filename=/dev/sdh
[job-8]
filename=/dev/sdi


100%_write128k_sequential

[global]
blocksize=128k
size=80%
direct=1
buffered=0
ioengine=libaio
iodepth=16
group_reporting
rw=write
numjobs=2
runtime=2400
time_based=1
per_job_logs=0
log_avg_msec=30000
write_bw_log=./logs/128k-seq-write.results
write_iops_log=./logs/128k-seq-write.results
write_lat_log=./logs/128k-seq-write.results
[job-1]
filename=/dev/sdj
[job-2]
filename=/dev/sdc
[job-3]
filename=/dev/sdd
[job-4]
filename=/dev/sde
[job-5]
filename=/dev/sdf
[job-6]
filename=/dev/sdg
[job-7]
filename=/dev/sdh
[job-8]


Результаты тестов


Последовательная нагрузка маленькими блоками 4k


100%_read_4k_sequential
График загрузки CPU СХД и RAM СХД


Ввод-вывод СХД, IOPS и latency


100%_write_4k_sequential
График загрузки CPU СХД и RAM СХД


Ввод-вывод СХД, IOPS и latency


Результат:


Результаты теста с использованием последовательного характера нагрузки небольшими блоками 4k нас впечатлили, получилось !1,4 миллиона! IOPS на чтение и 700k на запись. Если сравнивать это с предыдущим нашим тестом на ядре 4,19 (371k и 233k IOPS), то это скачек в четыре раза при том, что железо мы не меняли.


Также отмечаем довольно небольшую утилизацию CPU, она примерно на 20% ниже предыдущего теста (69/71% против 76/92%).
Задержки при этом остались на том же уровне, что и полгода назад, это не значит, что с этим мы думаем мириться, это значит, что над этим мы ещё будем работать. В конце статьи, будет итоговая таблица сравнения с тестом полугодовой давности на ядре 4,19.


Случайная нагрузка маленькими блоками 4k


100%_read_4k_random
График загрузки CPU СХД и RAM СХД


Ввод-вывод СХД, IOPS и latency


100%_write_4k_random
График загрузки CPU СХД и RAM СХД


Ввод-вывод СХД, IOPS и latency


Результат:


Показатели случайной нагрузки маленькими блоками, характерной для транзакционных СУБД остались практически без изменений по сравнению с прошлым тестом. СХД Восток на Эльбрусе вполне нормально справляется с подобными задачами, выдавая 118k IOPS на чтение и 84k IOPS на запись при довольно высокой утилизации CPU.


Отмечаем, что для Эльбруса в отличии от других процессоров работа в режиме постоянной загрузки близкой к 100% является штатной ситуацией (он для этого создавался). Мы это проверяли, оставляя СХД Восток с нагруженным процессором под 95% на несколько дней и результат был следующий: 1) процессор был холодный; 2)процессор и система в целом работали в нормальном режиме. Поэтому к высокому уровню утилизации процессоров Эльбрус следует относиться спокойно.


Также с прошлого ядра сохранилась приятная особенность. Если посмотреть на задержки при случайной нагрузке маленькими блоками, то внимание привлекает то, что задержки на запись ниже, чем на чтение (3 мс против 8 мс), когда мы все привыкли, что должно быть наоборот. Эльбрус с точки зрения случайного характера нагрузки по-прежнему любит запись больше чем чтение, что несомненно является отличным преимуществом, которое грех не использовать.


Последовательная нагрузка большими блоками 128k


100%_read_128k_sequential
График загрузки CPU СХД и RAM СХД


Ввод-вывод СХД, IOPS и latency


100%_write_128k_sequential
График загрузки CPU СХД и RAM СХД


Ввод-вывод СХД, IOPS и latency


Результат:


Ещё полгода назад СХД Восток на базе процессоров Эльбрус показала отличный результат в тесте последовательной нагрузки большими блоками, что актуально для видеонаблюдения или трансляций. Особой фишкой Эльбруса были ультранизкие задержки при работе с большими блоками (0,4-0,5 мс против 5 6 мс у аналогичного процессора архитектуры x-86).


При чтении данных большими блоками данное преимущество удалось не только закрепить, но и развить. Максимальную скорость на новом ядре удалось поднять в два раза (5,7 ГБ/с на ядре 5.4 против 2,6 ГБ/с на ядре 4.19) при задержках 0,3 мс! Также нагрузка на процессор при данном тесте тоже выглядит лучше (52% на 5,4 против 75% на 4,19).


А вот с записью не так все радужно. К сожалению, в новой версии ядра получить ультранизкие задержки на запись уже не удается, во всяком случае пока. Они находятся на уровне 11 мс (а было 0,5 мс), что в целом не плохо, т.к. примерно такой же уровень задержек при таком тесте мы видим на процессорах других архитектур. Так или иначе это наше домашнее задание, над которым мы будем работать. При этом позитивный момент все-таки есть. Как и в других тестах утилизация процессора значительны снижена (74% против 95%).


Итоговые результаты тестирования АЭРОДИСК ВОСТОК на базе процессоров Эльбрус 8 С, ядро 5.4


Улучшение в 5.4 зеленые, ухудшения 5.4 оранжевые


Для сравнения, результаты тестирования АЭРОДИСК ВОСТОК на базе процессоров Эльбрус 8С, ядро 4.19


Улучшение в 5.4 зеленые, ухудшения в 5.4 оранжевые


Прогресс виден не вооруженным глазом! Новая версия ядра 5.4 для архитектуры Эльбрус позволила выжать практические максимумы из совсем не нового процессора Эльбрус 8С (2016 г. выпуска). На данный момент даже у самых ярых пессимистов уже не повернется язык назвать процессор Эльбрус медленным, все таки полтора миллиона IOPS это много.


В очередной раз мы убедились в отличной работе СХД на Эльбрусе среде, где преобладает последовательная нагрузка, а это аналитические СУБД, онлайн-трансляции, видеонаблюдение, обработка больших данных и т.п.


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


Безусловно есть ещё над чем работать (те же задержки при записи больших потоков), но за прошедшие полгода коллектив МЦСТ проделал титаническую работу, и она дала видимый результат, что не может не радовать.


В конце этого 21-ого года мы ожидаем новый процессор Эльбрус 16С, который, кроме того что будет намного быстрее, ещё будет поддерживать аппаратную виртуализацию, а это значит что у нас в России наконец-то появится полностью отечественные не только СХД, но и системы виртуализации, и гиперконвергентные системы (кто сказал АИСТ и vAIR?))).


Кстати о птичках! В течение этой недели мы определимся с датами следующего технического вебинара ОколоИТ про нашу систему виртуализации АИСТ и гиперконвергентную систему vAIR, ссылка на регистрацию появится в этой статье (следите за обновлением), а также в нашем телеграмм-чате.
Ну и само собой, не можем не напомнить о бесплатных курсах по системам Аэродиск, на которые можно записаться тут.


На этой позитивной ноте завершаем очередную статью про Эльбрус. Традиционно ждем каверзных вопросов, конструктивных споров и предложений.

Подробнее..

Цифровой рентген прогулка по Эльбрусу

15.10.2020 14:05:55 | Автор: admin

Привет Хабр!


В прошлый раз писал про проект по рентгеновской инспекции печатных плат. Сейчас мы сильно продвинулись, есть рабочий прототип софта плюс потыкали палочкой в Эльбрус. Про этот опыт я и хочу рассказать.
image


Интро


На старте проекта нам удалось найти дополнительное финансирование, основным условием была работа ПО полная кроссплатформенность, в том числе поддержка отечественных процессоров. На тот момент наиболее производительным вариантом для десктоп машин был Эльбрус 8С (пока он им и остается, 8СВ еще вроде не вышел). Мы купили две станции Эльбрус 801-РС напрямую от МЦСТ. Сейчас их стоимость указана на сайте, год назад были чуть дороже.


Из курьезных мелочей, с которыми столкнулись при закупке бумажные заявки на поставку. Сразу советую заключить договор NDA, это даст доступ к свежим инструментам разработчика (оформление около месяца). Приехали машины быстро, по комплектации есть проблема с кастомизацией на стороне МЦСТ. Проще докупить и поставить самим нужные видеокарты или периферию. Перечень проверенного оборудования/чипов карт пока есть только в багтрекере МЦСТ, хотя стоило бы опубликовать список на вики ресурсе по Эльбрусам.


Операционные системы


По ситуации на начало 2020го года при заказе можно выбрать предустановленную ОС: оригинальную Эльбрус или партнерскую (Альт, Астра). В нашем проекте используется Астра Linux. Она хоть и была доступна официально, но по факту не получилось заказать за адекватное время. Ставили сами с лайв образа отдельной лицензией.


Выбор той или иной ОС дело вкуса, мне понравилось окружение Fly в Астре, субъективно оно шустрее. С другой стороны, пакетная база Альта шире, они теснее сотрудничают с МЦСТ и набор дистрибутивов интереснее.
Пример не существовал USB лайв образ Астры под Эльбрус, а для Альта их было аж несколько штук. Бэкап раздела Астры работал только из-под лайв образа Альта.


Сама ОС Эльбрус изначально разрабатывалась для демо процессора заказчикам. Мы начинали с версии 4.0, сейчас рабочая 5.0rc2 стало лучше, но все же она сыровата для конечного пользователя. Нужна для отладки или получения максимума от VLIW архитектуры. Именно на этой ОС производительность при обработке изображений была максимальной.


UPD: сейчас вышла версия ОС Эльбрус 6.0. Там заявлены C++20 и свежее ядро Linux, но так как мы работаем на Астра обновления еще не добрались.


Архитектура


Пока только С++, 14-ый стандарт, про CUDA и Vulkan лучше не думать, а вот OpenGL на AMD видеокартах работает нормально. Важно OpenGL не старше 3.1, QT 5.11.
По остальным ЯП возможно кто-то поделится свои опытом в комментариях. Знаю, что идет работа в закрытых конторах, в основном по обработке видеопотока и изображений. Понемногу народ осваивает отечественные процессоры.


Теперь слово архитектору проекта, Максиму Титову (titovmaxim, Unicore Solutions)
Наша цель сделать хороший софт для работы с рентгенографическими системами. Поэтому начали с главного подключения железа и тракта обработки изображений. Сильно волновались. TLDR: все прошло гладко.


Главная часть системы детектор рентгеновского излучения. Подключается по Ethernet и забивает канал 1Гбит под завязку, протокол GigE Vision. Коммерческие библиотеки под Эльбрус отсутствуют, библиотеки с открытым исходным кодом (например Aravis) не подходят по скорости и качеству, так что писали свою реализацию.


Столкнулись с тем, что встроенная сетевая карта материнской платы Эльбруса сильно нагружает процессор, и 1ГБит просто так не получить, теряются кадры. Пришлось дописывать дополнительный быстрый промежуточный буфер, чтобы разгрузить поток приема. Обрабатываем все потом в отдельных потоках. Все заработало, канал забивается полностью, потерь кадров нет. При установке на Эльбрус дискретной карты проблем становится заметно меньше.


Предварительная обработка изображений в реальном времени реализована на OpenGL, т.к. это единственное средство, доступное нам на всех платформах. В нее входит применение калибровки и коррекция битых пикселей детектора, обработка гистограммы, гамма коррекция, повышение резкости и подавление шума, раскраска полутонов, геометрические преобразования. Интересно было написать быструю оценку гистограммы изображения на OpenGL, а не CUDA, задача не совсем типичная.
Итого на обработку одного кадра 3000x3000 16 бит на самой слабой видеокарте (AMD R5) на Эльбрусе уходит ~33 мс. Очень даже неплохо, при условии независимости от ОС и полной разгрузки ЦП для задач сложной пост-обработки. Уже доступны более мощные видеокарты, так что здесь мы спокойны. К примеру, на x86 с GeForce RTX 2070 Max-Q мы получаем стабильные ~2мс, ждем подобного на Эльбрус
Подключение прочих компонентов рентгеновских генераторов и мехатроники по RS232, Web камер по UVC, прошло без проблем.


В проекте мы используем Qt 5.11 и QML для интерфейса. Здесь все прошло неожиданно гладко. Работает, заводится "из-коробки", основные пакеты в Астра есть. Ждем, когда будут доступны обновления, поскольку в 5.11 есть шероховатости и баги.
Немного о том, почему мы опасались C++ 14. Активное совместное использование C++ и QML часто вызывает сложности, поэтому мы решили использовать в проекте cвою библиотеку Flow.


Библиотека Flow


Среди плюсов библиотеки декларативность, сокращение boilerplate кода и ошибок. Помогает использовать ФП подход на С++, в частности есть гибкое объединение и композиция функций, ленивость, кеширование, потокобезопасность и фоновое выполнения в других потоках. Последнее, кстати, актуально для OpenGL, который не очень умеет в многопоточность. Все это в динамике с оповещением об изменениях (никаких update) отстыковки/пристыковки веток, действия (эффекты в смысле ФП), интегрированы с контекстами Qt. Из приятного автоматический контроль времени жизни объектов и подписок без ручных subscribe/unsubscribe и беспокойств, кто кого переживёт, все само :) Немного похоже на ReactiveX, но тут больше про состояния, а не про потоки данных.


Там же живет своя мета-система (в C++ рефлексию не завезли), используем вместо QMetaObject. Писать меньше, лучше интегрируется с QML (примерно, как WPF с C#), можно свободно перемещаться по дереву, в частности работать из QML с QVector в середине дерева как с моделью с умным diffом (без написания QAbstractItemModel), автоматическая сериализация/десериализация любого объекта одной командой и пр.
Библиотека изначально была рассчитана минимум на C++ 17. При переходе на C++ 14 мы, естественным образом, потеряли вывод типов и сейчас приходится прописывать большинство шаблонных параметров руками. Однако прогресс МЦСТ впечатляет, ждем новых компиляторов. Была пара особенностей компилятора Эльбрус, не замеченных ранее на GCC и MSVC. Не всегда понимаются auto параметры в лямбдах. Не умеет перезахватывать this во вложенные лямбды. Но это легко правится, в остальном все компилируется и работает без проблем. Да, ошибки компилятора на русском языке немного непривычны
Вследствие особенностей архитектуры на Эльбус не рекомендуется использовать исключения. Поэтому мы сразу отказались от них в нагруженных частях. Однако достаточно широко используем их на верхнем уровне, где операции единичные. Все работает как положено, зря боялись. Да, пока не завезли -fnon-call-exceptions для удобного отлова ошибок уровня системы и их обработки на месте возникновения.
Приятно, что можно большую часть кода писать "дома" на Linux под x86 и потом просто собирать на удаленной машине Эльбруса. При некоторой сноровке проблем с совместимостью кода почти не возникает.


Производительность OpenCV


Наиболее критичные вещи по обработке видеопотока вынесены на видеокарту, для неторопливой пост-обработки изображений используем OpenCV 3.2. Этот пакет портирован на Эльбрус, но есть нюанс производительность сильно зависит от версии пакета для конкретной ОС. См. таблицу по сравнению производительности пакетов OpenCV на Эльбрус 8С (1300 МГц) и Intel core i7 (2600 МГц) под разными ОС/сборками openCV:


Таблица сравнения openCV Эльбрус vs Intel i7
Операция Параметры ОС Эльбрус 5.0rc2 Эльбрус-8С OpenCV 3.2 ОС Астра Ленинград 8.1 Эльбрус-8С OpenCV 3.2 ОС Астра Смоленск 1.6 Intel Core i7 OpenCV 3.2 ОС Windows 10 Intel Core i7 OpenCV 3.2 ОС Windows 10 Intel Core i7 OpenCV 4.4
Свертка ядро 5x5, 3000x3000, 16S 35 334 99,7 94 105,9
Свертка ядро 5x5, 3000x3000, 16U 244 280 - 98 106,5
Свертка ядро 5x5, 3000x3000, 32F 32 271 23,9 24 11,4
Гауссово размытие ядро 5x5, 3000x3000, 16S 15,3 257 36,3 35 5,7
Гауссово размытие ядро 5x5, 3000x3000, 16U 184 251 - 12,5 40
Гауссово размытие ядро 5x5, 3000x3000, 32F 14,5 222 8,1 7,7 6,2

Производительность OpenCV на Эльбрусах напрямую завязана на низкоуровневые EML библиотеки (см. руководство по программированию МЦСТ, они оптимизированы под VLIW архитектуру). А пакеты EML зависит уже от дистрибутива ОС. В используемой нами Астре свежая сборка до сих пор не появилась, возможно она есть в Альт Линукс. Кто игрался напишите в комментариях.
Если говорить про рутину свертку изображений, то производительность может быть в 2 раза лучше (16S) по сравнению с i7, а может быть и в 2 раза хуже (32F). На сборке ОС с неоптимизированной библиотекой OpenCV проигрыш в производительности до 20 раз. И да, с 16U у Эльбруса пока все плохо.


Резюме


Жить на Эльбрусе можно. Постепенно МЦСТ и партнеры (Альт, Астра) допиливают ПО, улучшают сервис, снижают цены. Это радует.
С другой стороны их ресурсы ограничены, чего-то нужного именно вам можно ждать полгода.
Возможно правительство станет более активно продвигать отечественные процессоры и стимулировать их коммерческую эксплуатацию, посмотрим. Мы в любом случае к этому готовы.

Подробнее..

История электронной вычислительной техники в СССР

30.04.2021 10:21:30 | Автор: admin

Если бы только Джон фон Нейман в 40-х годах XX века знал, насколько по-другому будет выглядеть мир через семьдесят лет. В том числе благодаря его значимому вкладу в создание и развитие теории ЭВМ. А без этой техники было бы невозможно запустить человека в космос, относительно достоверно предсказать погоду, анализировать рынки и проводить другие сложнейшие вычисления, на которые у обычных людей раньше уходили целые месяцы, если не годы.

Да, сейчас у любого из нас в кармане лежит мобильный телефон с невероятной скоростью и объёмом вычислений, но раньше для всего этого были необходимы громоздкие шкафы с дорогой и очень ненадёжной техникой. О том, как учёные развивали вычислительную технику и каких успехов смог добиться СССР в этой сфере, я постараюсь кратко рассказать в этой статье.

Думаю, никто из читателей не сомневается в том, что самыми первыми заказчиками ЭВМ являлись государство и армия, у которых были деньги на создание и запуск в серийное производство огромных вычислительных машин. Самые первые из них использовались американцами при разработке термоядерной бомбы уже после уничтожения Хиросимы и Нагасаки. Но эти машины были лишь единичными разработками, а нас здесь прежде всего интересуют самые заметные серийные модели, поскольку только при помощи массовости они могли принести наибольшую пользу для общества. Подчёркиваю, именно массовости. Вы можете создать мощнейший в мире суперкомпьютер, но абстрактному инженеру Анатолию на каком-нибудь провинциальном заводе она особой пользы не принесёт. Как он в лучшем случае считал на примитивных вычислительных машинах, так он до пенсии и будет за ними сидеть. И это в лучшем случае, когда эта самая вычислительная машина у него есть. Поэтому для более равномерного развития производств необходима пусть и не самая мощная, но зато простая и надёжная техника, чтобы даже баба Клава из бухгалтерии, которая начала свой карьерный путь ещё при Николае II, смогла её использовать с благими целями.

А теперь от просто к немного сложному. Технической основой автоматизации вычислений для первого поколения ЭВМ стали вакуумные лампы (да, те самые, именно с их помощью ценители музыки добиваются лампового звучания), у которых при помощи работы с напряжением можно было создать двоичную систему исчисления (то есть в ней существуют только 0 и 1, а остальные буквы, цифры и т.п. представляют собой их комбинации разной длины, что продолжает быть стандартом и в наше время), являвшуюся одним из основных элементов архитектуры фон Неймана. Однако у них были три явные проблемы: большой размер, большое энергопотребление и низкая надёжность. Причём последнее создавало дополнительные проблемы, поскольку не всегда было возможно определить, насколько правильные данные выдаёт машина, ведь в каждой было по несколько тысяч ламп, а поломка одной уже давала ошибку в вычислениях. И если в вопросе сельского хозяйства плюс минус десяток килограмм удобрений погоды не делали, то вот при разговоре о ядерной сфере, медицине и исследовании космоса об отклонении не может идти и речи, потому что цена ошибки вырастает в миллионы раз. Но работали с тем, что есть, поскольку возможность широкомасштабного использования значительно более прогрессивных транзисторов в ЭВМ ещё лишь прорабатывалась.

Так изнутри выглядела первая советская ЭВМ МЭСМ. Все схемы данной машины находились не в стойках или шкафах, как это стало принято позже, а были развешаны по стенам помещенияТак изнутри выглядела первая советская ЭВМ МЭСМ. Все схемы данной машины находились не в стойках или шкафах, как это стало принято позже, а были развешаны по стенам помещения

Самой первой советской ЭВМ стала разработка киевского Института электротехники Академии наук УССР под руководством академика Сергея Лебедева под названием МЭСМ малая счётная электронная машина. Да, она выполняла лишь 50 операций в секунду при 25 кВт потребления (6 000 вакуумных ламп), но для самой первой ЭВМ в стране это было вполне неплохо. Параллельно с Киевом шла разработка в Москве, а позже и в Ленинграде, Минске, Ереване, Пензе. После перевода академика Лебедева в Москву к 1953 была завершена БЭСМ - большая электронная счётная машина, которая уже могла выполнять уже до 10 000 операций в секунду при энергопотреблении в 35 кВт на 5 000 вакуумных ламп, что было невероятным достижением по тем временам, а её дочка, которая пошла в серию, БЭСМ-2 и все 20 000 операций в секунду. Эта модель положила начало для целой серии ЭВМ, которая продолжилась уже в транзисторную эру в гражданской и военной сферах.

Если уж я говорю о транзисторах, то для начала необходимо пояснить, в чём был смысл в переходе на них. По сравнению со старыми-добрыми лампами они были дороже, но при этом потребляли меньше энергии, имели большую производительность и меньшие габариты при повышенной надёжности. А что означает уменьшение габаритов? Правильно, в тот же самый объём можно поместить ещё больше оборудования, повысив его эффективность. Однако для этого оборудования понадобится и новое охлаждение, потому что одной проточной вентиляции здесь уже не хватит. Если у вас техника выполняет миллион операций в секунду, то тут даже открытая форточка и махание дверью не помогут, поэтому стали появляться системы водяного, а на западе и фреонового охлаждения, которые было проще монтировать, чем громоздкие вентиляции, прокачивающие сотни кубометров воздуха в час.

Академик Сергей Алексеевич Лебедев, один из основателей и самых видных деятелей отечественной инфоматикиАкадемик Сергей Алексеевич Лебедев, один из основателей и самых видных деятелей отечественной инфоматики

Возвращаясь к транзисторной части серии БЭСМ. На гражданке это были БЭСМ-3 БЭСМ-6, в последней из которых производительность взлетела до одного миллиона операций в секунду, 50 кВт потребляемой энергии и занимаемой площади всего лишь 225 квадратных метров. В армии же её модификации использовались в войсках ПВО и ПРО, а самая последняя версия в 1975 даже стала частью зенитно-ракетного комплекса С-300.

Вот вроде бы всё так хорошо складывается: растёт производительность техники, внедряются новые технологии. Но где-то же должен быть подвох. Правильно, он был. И был он в размерах серий, которыми выпускались отечественные ЭВМ. Из всех гражданских машин серии БЭСМ за сотню перевалила только серия БЭСМ-6, которых за 19 лет выпуска создали 355 штук. Да, были ещё серии пензенские Урал, белорусские Весна, Минск, Снег, ереванские Наири, киевские Мир и ряд других моделей, но они всё ещё не могли обеспечить огромную страну достаточными вычислительными мощностями. Кроме малого числа самих станций ещё существовала проблема с их моделью распространения: их невозможно было просто купить: в СССР все ЭВМ распределялись по согласованию с высшими структурами.

А вот, что можно было наблюдать в США: первый же коммерческий компьютер UNIVAC I (1950 год) был выпущен серией в 46 экземпляров. Дальше - больше. IBM-704 (1954 год) разошлась в количестве 140 экземпляров при приблизительной производительности в 40 000 операций в секунду в 1954 году (против советских 20 000 на БЭСМ-2 того же периода). И это лишь отдельные представители американских линеек ЭВМ. А были же ещё английские... Кроме численного превосходства существовало и мощностное: про первый в мире американский серийный суперкомпьютер CDC 6600 (1963 год, то есть на 5 лет раньше пуска в серию невероятно удачной БЭСМ-6), с ноги вынесший дверь на рынок транзисторных ЭВМ, даже говорить немного грустно. Да, на ранних версиях при желании можно было без труда жарить стейк, а форма расстановки шкафов с оборудованием заставила меня пройтись по родословной и политическим мировоззрениям его создателей (да, да, это вполне рабочая форма расстановки шкафов с оборудованием), но эта машина наголову превосходила БЭСМ-6. Отечественные ЭВМ могла тягаться лишь с более бюджетными CDC 6400/6500/6700, представляющими из себя урезанные по мощности CDC 6600. При этом стоит отметить, что компания IBM, до этого безраздельно лидировавшая на рынке компьютеров в США, была искренне обескуражена мощностью машины конкурентов, поскольку их лучшая ЭВМ IBM Stretch давала в три раза меньше вычислительных мощностей при значительно больших размерах и возможностях отдела разработки, так что это был настоящий прорыв.

Достаточно оригинальная схема расстановки шкафов оборудования для CDC 6600. Через пустой центральный квадрат шли основные кабели и охлаждениеДостаточно оригинальная схема расстановки шкафов оборудования для CDC 6600. Через пустой центральный квадрат шли основные кабели и охлаждение

К сожалению, на стороне американцев действительно были производительность и большие экономические ресурсы, но у СССР на руках всё ещё оставался один козырь архитектура. Вот только с ней была ещё одна проблема: каждая команда инженеров считала своим долгом при создании ЭВМ сделать под неё внутреннюю архитектуру с нуля, часть технических решений тоже с нуля, а иногда даже и свой собственный язык программирования с трансляторами.

Минутка лирического отступления, если позволите. Если компьютерную архитектуру можно связать аналогией с обычной архитектурой (физическая и программная часть компьютера соотносятся с тем, как сделано само здание и в чём заключается его функционал), то языки программирования это смесь языков в понимании лингвистов и математиков. Каждый язык программирования отличается от другого, как и самые настоящие языки, но отличается функционалом (поэтому для сильно отличающихся сфер разработки принято использовать разные ЯП), который в него заложен, или на крайний случай самым обычным синтаксисом. Для примера можно взять трёх долгожителей мира IT: языки COBOL (с 1959 года), Fortran (c 1957 года) и Assembler (с 1949 года). COBOL создавался в первую очередь для нужд бизнеса, поэтому хорошо умеет работать с файлами. Fortran был разработан IBM для работы со сложной формульной математикой, где было необходимо максимально оптимизировать расчёты, не потеряв при этом их точность. Assembler же был создан для ускорения операций в тех местах, где могли найтись те или иные бутылочные горлышки (будь то ограничения в техническом плане или необходимость провести вычисления за короткий промежуток времени). Ещё в СССР был очень популярен ALGOL 68, созданный под эгидой ЮНЕСКО, для которого всегда было важно быстро и правильно обрабатывать большие объёмы информации. Думаю, на этом короткое лирическое отступление можно завершить, поэтому давайте вернёмся к проблеме очень широкого технического разнообразия в сфере советских ЭВМ 60-х.

А если у вас все машины работают по-разному, к ним не то что периферию одинаковую не подключишь, даже одну программу не факт, что сможешь запустить. Поэтому уже в 1966 году при переходе от обычных транзисторов к микросхемам (от второго поколения ЭВМ к третьему) наверху решили, что пора бы уже и меру знать, создав заказ по опытно-конструкторской работе Ряд, которая подразумевала всеобщую стандартизацию компьютерной техники путём вольного заимствования элементов из IMB 360. Однако:

В1984году в Москве состоялась выставка ЭВМ в Советской армии. Я, естественно, приехал. Там было представлено более 200 типов ЭВМ, не считая мелких брызгов. А что такое 200 ЭВМ? Это 200 операционных систем, 200 комплектов ЗИП запасных изделий и приборов. <> Я несколько раз выступал в оборонном отделе ЦК КПСС в Москве: Давайте сделаем одну машину. Андрей, не лезь, отвечали мне вежливо, но твердо. Была Броня базовая телефонная станция Советской армии. В ней три машины разных. Одна для коммутации, другая для управления сетью, третья для работы с оператором. С разными системами команд, с разными операционными системами, три комплекта офицеров надо, чтобы обслуживали. Тысяча номеров всего-то маленькая станция! Три ЭВМ куда это годится? И когда я пытался ругаться, мне снова говорили: не лезь.

Из интервью завкафедрой системного программирования Матмеха СПбГУ, профессора, доктора физмат наук Андрея Николаевича Терехова компании DataArt, 2019 г.

Да, в промежутке с 1966 по 1984 в армии с унификацией что-то не задалось, поэтому у них сохранился ровно тот жезоопарк (и это ведь только образцы, доступные для гражданских)техники, что и до принятия Ряда. Видимо, на армию она не распространялась. Зато в жизни гражданской всё начало меняться после начала копирования IBM 360. Когда я впервые прочитал об этом заимствовании, у меня возник вопрос: А как тогда американцы не засудили советскую сторону за полное копирование архитектуры? Всё просто: тогда традиция регистрации патентных прав на всё в этой вселенной ещё не была так распространена.
Выноси всё, что не прибито, а всё, что прибито, выламывай и тоже уноси.

ЕС-1035 (одна из машин серии ЕС ЭВМ) во Фрайберге, ГДР, 1981ЕС-1035 (одна из машин серии ЕС ЭВМ) во Фрайберге, ГДР, 1981

Унификация даёт нам что? Правильно, единый набор программ, средство от геморроя и совместимые со всем периферийные устройства (клавиатуры, наушники, а потом и мыши, и всё остальное, что мы сейчас можем воткнуть в порты наших компьютеров, телефонов, телевизоров и холодильников).


А что она у нас отбирает? В первую очередь при заимствовании иностранного мы теряем то преимущество в архитектуре, которое удалось создать ранее благодаря разработке техники с нуля, в то время как на западе некоторые не самые удачные старые наработки ложились в базу для новых. Ещё мы лишаемся полёта мысли и пространства для интеллектуального творчества, которое было важно для многих инженеров. Ведь когда у вас идёт стандартизация, то кроме небольшого улучшения уже имеющихся возможностей техники вы можете сделать приблизительно ничего. Ну, или ищите армейские заказы. Сам академик Лебедев называл полное копирование технологических наработок США путём для догоняющих, однако, как мне кажется, тут всё же стоило пойти на подобные жертвы, что будет объяснено чуть позже.

Хотя и находились смельчаки, разрабатывавшие технику не с архитектурой IBM. Взять, к примеру серию СМ ЭВМ (система малых ЭВМ, 70-80-е годы), основанную на отечественных разработках. Благодаря разделению на четыре подсерии данная линейка была совместима с техникой трёх других американских гигантов IT-индустрии тех времён: HP, DEC (в двух разных линейках) и Intel. А совместимость с западными ЭВМ позволяла продавать советскую технику через одно из подразделений Внешторга в капстраны, что повышало шансы создателей на увеличение бюджета на разработку новых машин и доводку тех, что уже готовились или были недавно пущены в серию.

Что же можно сказать о том, как повлияла ЕС ЭВМ, производство которой велось с начала семидесятых до конца девяностых, на отечественную разработку? Пусть лучше на это ответит приведённая ниже цитата.

Пять лет назад на конференции в Казани разгорелся спор по поводу копирования ЕС ЭВМ. Хорошо или плохо? Естественно, мы все сказали, что это была огромная стратегическая ошибка. Встает дядька, бывший директор какого-то завода: Вы все дураки. ЕС ЭВМ разных было выпущено 17 тысяч штук. Мы сделали китайский скачок и помогли сдвинуться с мертвой точки. Да, своровали огромное количество программного обеспечения. <...> У нас была БЭСМ-6, говорим. Да, с тремя операционными системами говенными.

Из интервью завкафедрой системного программирования Матмеха СПбГУ, профессора, доктора физмат наук Андрея Николаевича Терехова компании DataArt, 2019

Кроме огромных систем вполне возможно было встретить и вот такие вполне миниатюрные ЕС-1068Кроме огромных систем вполне возможно было встретить и вот такие вполне миниатюрные ЕС-1068

Только задумайтесь, силами стран ОВД (СССР, ГДР, Чехословакия, Польша, Болгария), а потом и отдельно в РФ было создано 17 тысяч компьютеров, что как минимум на порядок превосходит то количество ЭВМ, что были произведены в стране до этого. Вся линейка насчитывала в себе больше 20 разных моделей и подразделялась на четыре ряда:

первый ряд состоял из стандартных машин с производительностью от 2 750 до 700 000 операций в секунду (1971-1978);

второй ряд представлял собой техническое развитие предыдущих разработок. Здесь уже можно было получить от 150 000 до 4 000 000 операций в секунду (1977-1984);

третий ряд был во многом аналогичен второму, но после производства он ещё должен был пройти военную приёмку, показав, что способен защитить от несанкционированного доступа данные (1983-1988);

и последний четвёртый ряд был готов к выпуску уже после распада СССР и отличался от предыдущих моделей в первую очередь объёмом оперативной памяти и рядом на тот момент современных наработок.

На базе ЕС ЭВМ даже хотели сделать суперкомпьютер Однако стоит помнить, что западная компьютерная архитектура наследовала свои старые проблемы, из-за чего они перекочевали и к нам, создавая ещё больше проблем для совместимости старых и новых моделей советских ЭВМ. К тому же одни США за это время наштамповали ещё больше и частично даже мощнее, что вполне компенсировало программные недостатки. С каждым новым техническим поколением разрыв по суммарным мощностям между странами социалистического блока и США только рос. А ведь нельзя забывать про Великобританию, ФРГ и Японию.

Ну, а потом случился 1991. Финансирование почти всех разработок накрылось медным тазом, похоронив под собой и проект суперкомпьютера на базе ЕС ЭВМ. В живых остался только армейский суперкомпьютер Эльбрус (часть из которых работает в гос. организациях и по сей день, а наработки по нему до сих пор используются для создания отечественных процессоров одноимённой линейки для новых суперкомпьютеров), хотя его третья модификация тоже скончалась в безденежье девяностых. А что до организаций, занимавшихся созданием советских ЭВМ, то многие из них как раз тогда и сгинули (поскольку в прямом смысле народных ЭВМ, доступных в больших объёмах для обычного потребителя, у нас в больших сериях не было, в то время как мировой рынок уже начал переход к персональным компьютерам), а если и смогли удержаться на плаву, то только за счёт частных заказов с запада, а в нулевых и из Китая, который, к примеру, закупал у нас вычислительное оборудование для своих АЭС.

Суперкомпьютер Ростеха, в основе которого лежат процессоры Эльбрус-8ССуперкомпьютер Ростеха, в основе которого лежат процессоры Эльбрус-8С

Развал СССР безусловно лишил его бывших участников шансов на конкуренцию с западом, поскольку предприятия, раньше находившееся в одних границах, теперь должны были бороться не только с рынком, но и со множеством границ, которые приходилось преодолевать в ходе сотрудничества. Да и про резкий отток многих технических специалистов в Европу и США тоже не стоит забывать. Сейчас ведутся попытки вернуть на прежний уровень эту некогда огромную сферу, но особых перспектив, тем более в сравнении с США и Китаем, тут не видно.

Автор: Андрей Лебедев

Оригинал

Подробнее..

Разработка и тестирование на платформах Эльбрус программы для томографической реконструкции Smart Tomo Engine (2 видео)

08.10.2020 16:23:54 | Автор: admin

Сегодняшняя статья будет посвящена сразу двум нашим любимым темам: компьютерной томографии (КТ) и отечественному процессору Эльбрус. Мы расскажем, чем отличается рентгенограмма от результатов КТ и объясним, зачем такой большой и серьезной машине, как томограф, был бы кстати специализированный вычислитель. Несмотря на то, что томографы используются уже почти 50 лет (создание первого томографа было анонсировано в 1972 году [1]), это не означает, что все проблемы KT сегодня решены. Наоборот, существует острая потребность в новых томографических алгоритмах, которые были бы быстрее и точнее используемых, позволили бы уменьшить лучевую нагрузку на объект, что, в свою очередь, существенно расширило бы и сферу применения метода КТ. Понимая все это, мы создали такое программное обеспечение Smart Tomo Engine. О нем речь пойдет ниже. Рассказав ранее о борьбе с ортотропными артефактами и об оценке эффекта чаши, в данной статье мы опишем несколько тестов, проведенных с использованием синтетических и собранных на отечественном томографе реальных томографических датасетах и покажем работу нашей программы на процессоре Эльбрус нового поколения (видео прилагается ниже). Результат работы программы приоткроет внутренний мир майского жука, причем значение слова внутренний здесь следует понимать буквально.




Рентгенография широко используемый метод неинвазивной диагностики, основанный на формировании изображения объекта с помощью рентгеновского излучения. Для этого исследуемый объект помещается между источником рентгеновского излучения и регистратором (рис. 1 слева). В качестве регистратора может выступить рентгеночувствительная пленка или позиционно-чувствительный детектор. Изображение формируется прошедшим через объект и ослабленным при своем прохождении излучением. Разные материалы ослабляют рентгеновское излучение по-разному, что обеспечивает контраст на изображении. Регистрируя прошедшее через объект рентгеновское излучение, можно судить о локальном составе исследуемого объекта. Пример рентгенограммы грудной клетки показан на рис. 1 справа. Здесь светлые области характеризуют участки большего поглощения. Рассматривая ребра (светлые изогнутые пластинки), ограничивающие грудную клетку (темная полость с просматриваемыми светлыми участками бронхиального дерева), в верхней части грудины (центральный светлый столб) с правой стороны мы видим небольшое светлое утолщение.



Рис. 1. Рентгенография: принципиальная схема (слева); результат рентгеновского исследования рентгенограмма (справа). Источник.


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



Рис.2. Источник.


Уточнить форму и внутреннее строение поможет метод КТ. Также как и в рентгенографии, для сбора данных КТ объект помещается между источником рентгеновского излучения и детектором, но регистрируется уже набор рентгенограмм под разными углами. Углы поворота обычно равномерно распределены в некотором интервале. Принципиальная схема измерения показана на рис. 3.



Рис. 3. Принципиальная схема томографической съемки (источник).


Сбор изображений под разными углами проводится на специальном приборе томографе. Поскольку томографироваться могут самые разные объекты живой и неживой природы, а исследования проводятся и на микро-, и макро- уровнях, то разновидностей томографов огромное число. Они отличаются схемами сканирования (послойно-круговая, спиральная и т.д.), используемыми типами источников излучения, схемами формирования зондирующего пучка (конусная, параллельная, микрофокусная). В самых общих чертах схему томографа можно представить так: источник излучения, держатель объекта исследования и детектор. Подвижной частью, позволяющей контролируемо менять ракурс съемки, может быть любая из трех частей. Современный томограф также немыслим без компьютера, который не только управляет схемой сбора рентгенограмм, но производит обработку собранных данных с помощью специализированного ПО.


Для исследования объектов разной природы могут использоваться принципиально отличающиеся друг от друга технические решения. Так, при медицинских исследованиях гентри (подвижное устройство, содержащее систему детекторов и рентгеновских излучателей) (Рис. 4) вращается вокруг неподвижного пациента. Пространственное разрешение в таких томографах достигает 0.2-0.5 мм. Результаты КТ сохраняются в формате DICOM медицинском отраслевом стандарте, разработанном для создания, хранения, передачи цифровых медицинских изображений и сопутствующих документов обследованного пациента.



Рис. 4. Схема медицинского томографа (источник).


Для научных исследований in vitro, проводимых в лабораторных условиях, применяется другая экспериментальная схема источник и детектор неподвижны, а набор рентгенограмм получают, вращая образец. Во ФНИЦ Кристаллография и фотоника РАН (ФНИЦ КФ РАН) в лаборатории рефлектометрии и малоуглового рассеяния был сконструирован и функционирует целый комплекс лабораторных рентгеновских микротомографов. Изображение одного из созданных приборов представлено на рис. 5. В нем образец размещается на гониометре, ось которого перпендикулярна направлению зондирования. Прибор оборудован двумерным детектором. Размер пикселя 9 мкм, поле зрения детектора 24 на 36 мм. В данном приборе реализована возможность использования для зондирования как полихроматического, так и монохроматического излучения. Это позволяет не только повышать качество реконструируемых изображений, но и получать дополнительную информацию об элементном составе изучаемых объектов. Разработка собственных томографов позволяет получить доступ к экспериментальным данным (рентгенограммам) и параметрам работы всех узлов томографа, а, значит, позволяет оптимизировать протоколы измерений в зависимости от поставленных задач.



Рис. 5. Фотография лабораторного микротомографа ФНИЦ КФ РАН.


После регистрации рентгенограмм под разными углами, т.е. сбора полного набора проекций, начинается их обработка. Финальная цель обработки восстановление внутренней морфологической структуры объекта. Поскольку контраст на регистрируемом изображении формируется за счет способности разных материалов по-разному ослаблять рентгеновское излучение, то результатом реконструкции является пространственное распределение коэффициентов ослабления зондирующего излучения. На это распределение и опирается описание морфологической структуры томографируемых объектов.


Если зондирование проводится с использованием параллельного пучка, то задачу трехмерной реконструкции можно решить, восстановив серию двумерных сечений объекта. Для реконструкции одного сечения нет необходимости использовать полный набор проекций. Требуется лишь одна строка фиксированного номера от каждой угловой проекции. Все эти строки соответствуют одному горизонтальному сечению восстанавливаемого 3D распределения, которому можно приписать тот же номер. На рис. 6 слева представлено изображение, собранное из таких строк. Горизонтальная ось отвечает за номер столбца детектора, вертикальная за номер углового поворота. Справа на рис. 6 приведен результат реконструкции сечения.



Рис 6. Синограмма грудной клетки (слева); результат КТ сечение 3D изображения (справа).


Если для томографического зондирования используется монохроматическое рентгеновское излучение, то, опираясь на закон Бугера-Ламберта-Бера, задачу реконструкции можно свести к задаче обращения преобразования Радона. Преобразование Радона это интегральное преобразование, которое связывает значения функции со значениями ее интегралов по всевозможным прямым. Процедура обращения это восстановление неизвестной функции по известным значениям ее интегралов по прямым. Подынтегральная функция, которую и надо восстановить это распределение линейного коэффициента ослабления монохроматического рентгеновского излучения в объеме образца. Свойство обратимости преобразования Радона гарантирует точное восстановление неизвестной частотно-ограниченной функции при наличии достаточного числа интегралов по регулярно расположенным прямым. Это свойство использует алгоритм свертки и обратной проекции (Filtered Back Projection, FBP), реализованный в большинстве современных серийных томографов. Он состоит из двух шагов. Первый шаг линейная фильтрация зарегистрированных изображений. Второй шаг обратное проецирование, т.е. равномерное размазывание каждой полученной на предыдущем шаге одномерной функции по соответствующему направлению на все двумерное изображение с последующей суммацией. Результат работы алгоритма восстановленное пространственное распределение линейного коэффициента ослабления рентгеновского излучения заданной энергии. Если зондирование ведется не параллельным, а конусным пучком, то послойную реконструкцию организовать не удается, и приходится использовать более сложные алгоритмы. Об алгоритмах трехмерной реконструкции, например об алгоритме Фельдкампа, мы напишем как-нибудь в следующий раз. А теперь перейдем, наконец, к описанию нашего ПО.


Smart Tomo Engine


Сердцем Smart Tomo Engine служит библиотека томографической реконструкции, предоставляющая через API следующие функции: чтение томографических изображений (проекций); собственно томографическую реконструкцию (предлагается на выбор три алгоритма) и сохранение результатов (предлагаемые форматы: DICOM, PNG). Программный продукт дополнительно включает в себя графический интерфейс пользователя, обеспечивающий двухмерную визуализацию томографических изображений и результатов реконструкции. Основное назначение программного продукта выполнение реконструкции трехмерного цифрового изображения объекта по набору его трансмиссионных томографических изображений в рентгеновском диапазоне.


Для послойной двумерной реконструкции реализованы следующие алгоритмы:


  • FBP Filtered Back Projection. Классический метод томографической реконструкции, комбинирующий обратное проецирование и линейную фильтрацию. Вычислительная сложность O(n3). Подробнее о методе можно почитать в [2]).
  • DFR Direct Fourier Reconstruction. Алгоритм работает в частотной области и использует быстрое преобразование Фурье для фильтрации и обратного проецирования [3]. Вычислительная сложность O(n2 log n) операций умножений.
  • HFBP Hough FBP. Алгоритм реконструкции, который разработали наши ученые. Для обратного проецирования используется алгоритм Брейди быстрого вычисления преобразования Хафа, а для ускорения линейной фильтрации применяется метод Дериша [4,5]. Вычислительная сложность по сравнению с DFR снижена до O(n2) операций умножения (при O(n2 log n) операций сложения).

Тестирование на Эльбрус


Мы протестировали наше ПО на отечественной платформе. Тестирование проводилось на машинах Эльбрус-401, Эльбрус-804 и Эльбрус-801СВ. Эльбрус-401 это рабочая станция с процессором Эльбрус-4С, Эльбрус-804 сервер с 4 процессорами Эльбрус-8С. (Мы уже тестировали на них наше ПО, разработанное для решения других задач, и почитать про это можно, например, тут.) Эльбрус-801СВ это новейшая разработка МЦСТ: рабочая станция с процессором Эльбрус-8СВ. Про принципиальные отличия Эльбрусов разных поколений нам рассказали коллеги из МЦСТ: Эльбрус-4С первый процессор, массово поставленный на рынок. Имеет 4 ядра с частотой 750800 МГЦ, 3 канала памяти DDR3-1600. Эльбрус-8С 8 ядер, частота 1.21.3 ГГц, 4 канала памяти DDR3-1600, и при этом в каждом ядре в 1.5 раза больше исполнительных устройств (ALU) для вычислений с плавающей запятой. Эльбрус-8СВ дальнейшее улучшение: 8 ядер с частотой 1.5 ГГц, память DDR4-2400 и ещё в 2 раза больше ALU. Эльбрус-8СВ лучше работает с невыровненными данными, и в нём масса других небольших улучшений по сравнению с Эльбрус-8С.


Характеристики процессоров представлены в таблице 1.


Таблица 1. Технические характеристик использованных процессоров.


Эльбрус-4C, 800 МГц Эльбрус-8C, 1200 МГц Эльбрус-8СВ, 1500 МГц AMD Ryzen 7 2700 AMD Ryzen Threadripper 3970X
Тактовая частота, МГц 800 1200...1300 1500 3200 3700
Число ядер 4 8 8 8 32
Число операций за такт (на ядро) до 23 до 25 до 50
L1 кэш, на ядро (данные) 64 Кб 64 Кб 64 Кб 32 Кб 32 Кб
L1 кэш, на ядро (команды) 128 Кб 128 Кб 128 Кб 64 Кб 32 Кб
L2 кэш, на ядро 2 Mб 512 Кб 512 Кб 512 Кб 512 Кб
L3 кэш, общая 16 Мб 16 Мб 16 Мб 128 Мб
Организация оперативной памяти До 3 каналов DDR3-1600 ECC До 4 каналов DDR3-1600 ECC До 4 каналов DDR4-2400 ECC До 2 каналов DDR4-2933 ECC До 4 каналов DDR4-3200 ECC
Технологический процесс 65 нм 28 нм 28 нм 12 нм 7 нм
Количество транзисторов 986 млн. 2,73 млрд. 3,5 млрд. 4,8 млрд. 23,54 млрд.
Максимальная ширина SIMD инструкции 64 бита 64 бита 128 бит 256 бит 256 бит
Поддержка многопроцессорных систем до 4 проц. до 4 проц. до 4 проц. ? ?
Год начала производства 2014 2016 2019 2018 2019
Операционная система ОС Эльбрус 5.0-rc2 ОС Эльбрус 6.0-rc1 ОС Эльбрус 6.0-rc1 Ubuntu 18.04 Archlinux
Версия компилятора lcc 1.24.09 lcc 1.25.07 lcc 1.25.05 gcc 7.5.0 gcc 10.1.0

Про оптимизацию на платформе Эльбрус мы уже писали тут и тут, поэтому не будем повторяться. Здесь мы не делали ничего сверхъестественного:


  • использовали оптимизированную библиотеку EML (геометрические преобразования изображения (напр., аффинное преобразование), арифметические операции и т.д.);
  • использовали интринсики там, где EML не смогла нам помочь; однако на Эльбрус-8СВ SIMD стал 128-битным, и мы не успели полностью на него перейти, поэтому интринсики все еще работали с 64-битными векторами.

Для тестирования Smart Tomo Engine мы собрали два датасета: с синтетическими и реальными данными. Синтетический датасет Шепп-Логан 3D был получен методом математического моделирования. Проекции рассчитаны послойно от трехмерного фантома Шеппа-Логана с использованием веерной схемы. Срез представлен на рис. 8 слева. Размер изображения фантома 511х511х511. Проекции рассчитаны для 420 углов, равномерно распределенных от 0.5 до 210 градусов. В эксперименте на вход Smart Tomo Engine подавалось 511 синограмм (изображение одной из них приведено на рис. 7 справа) размером 511х420. Выход 511 реконструированных слоев, размер каждого слоя 511х511. Размер фантома примерно соответствует изображениям, получаемым на современных стоматологических томографах: максимальный размер зоны сканирования челюсти обычно составляет 16 см, заявляемое производителями пространственное разрешение 0.3-0.4 мм. В таком случае размер регистрируемой проекции составит примерно 500х500 пикселей.



Рис. 7. Слева срез трехмерного фантома Шеппа-Логана, справа синограмма центрального слоя.


Реальные томографические данные (датасет "Майский жук") были собраны на микротомографе ФНИЦ КФ РАН, предназначенном для проведения научных исследований. Размер пикселя использованного детектора составлял 9 микрон. Экспериментальный образец высушенный майский жук. Было снято 400 проекций в параллельной схеме. Образец, закрепленный на держателе, поворачивался на углы в диапазоне от 0.5 до 200 градусов с шагом 0.5 градусов. Время измерения одной проекции составило 5 секунд. Размер измеренной проекции 1261х1175. Вход для Smart Tomo Engine 1261 синограмма размером 1175х400, выход 1261 восстановленный слой размера 1175х1175.


А теперь самое интересное результаты замеров и выводы


На этих датасетах мы провели замеры скорости выполнения реализованных нами алгоритмов реконструкции: FBP, DFR и HFBP. Время работы алгоритмов приведено в таблице 2. Замеры проводились на 5 машинах: Эльбрусе-401, Эльбрусе-804, Эльбрусе-801СВ, AMD Ryzen 7 2700 и AMD Ryzen Threadripper 3970X. Для каждой машины в таблице указано число процессоров, число физических ядер и максимальное число одновременно выполняемых потоков (указано в скобках). Замеры скорости реконструкции проводились в двух режимах: однопоточном (1П) и многопоточном (МП), реализованном с помощью библиотеки tbb версии 2017 update 7.


Таблица 2. Замеры времени работы программы, сек.


Архитектура Эльбрус x86_64 (AMD Ryzen)
Модель 4С(800MHz) 8С(1200MHz) 8СВ(1500MHz) 7 2700 Threadripper 3970X
Процессоры х ядра (потоки) 1 x 4(4) 4 x 8(8) 1 x 8(8) 1 x 8(16) 1 x 32(64)
Режим 32П 16П 64П
Алгоритм Время работы, с
Датасет Шепп-Логан 3D (511 слоёв)
FBP 959 271 569 31 514 85 213 52 237 19
DFR 853 234 546 23 497 69 60 10.5 61 5.1
HFBP 760 200 496 19 406 55 46 8.3 42 2.3
Датасет Майский жук (1261 слой)
FBP 17755 6593 8845 685 8342 1992 4789 1061 4326 568
DFR 9910 2847 6351 236 5575 733 771 141 724 77
HFBP 9075 2419 5512 189 4540 597 578 97 579 41

Анализируя полученные результаты, прежде всего отметим, что в многопоточном режиме 4-процессорный сервер Эльбрус-804 затратил на реконструкцию 511 слоев фантома алгоритмом HFBP 19 секунд, то есть каждый слой был восстановлен за 0.037 секунды, а послойная частота составила 26.8 слоев в секунду (26.8 ips). Чтобы понять, высокая это частота или низкая, приведем следующую оценку. За секунду гентри 16-срезового кардиологического томографа совершает чуть меньше двух оборотов, регистрируя порядка 30 синограмм. Мы восстанавливаем 26.8 слоя в секунду, т.е. проводим реконструкцию практически в режиме реального времени. Таким образом, проведение реконструкции с использованием российской платформы удовлетворяет требованиям по скорости, предъявляемым в кардиологии, где основным реперным параметром является период сокращения сердца, который в среднем составляет одну секунду.


Реконструкция в реальном времени требуется также для реализации нового протокола сканирования, предложенного недавно нашими учеными контролируемой реконструкции [6]. Использование этого протокола уменьшает лучевую нагрузку за счет того, что сбор рентгенограмм прерывается сразу, как только их набор оказывается достаточным для восстановления.


Для научных исследований таких жестких ограничений по времени нет, но выше требования к пространственному разрешению. Поэтому размеры восстанавливаемых сечений больше. При работе с датасетом, полученным с лабораторного микротомографа, на реконструкцию 1261 слоя потребовалось 189 секунды в многопоточном режиме (6.7 ips). Измерение входных данных на лабораторном томографе заняло 2000 секунд, а 3 с небольшим минуты, которые потребовались на реконструкцию всех слоев при использовании Smart Tomo Engine на Эльбрусе-804, соответствуют 10% этого времени. Ещё быстрее будет работать 4-процессорный сервер с процессором Эльбрус-8СВ, который в МЦСТ уже разработали и скоро планируют довести до готовности к серийному производству.


В полученных результатах интересны и сами по себе соотношения производительностей разных платформ на каждом из алгоритмов, с учётом тактовой частоты ядер. На FBP отставание Эльбрусов умеренное, и при нормировании относительно тактовой частоты получаются близкие результаты. Но на алгоритмах DFR и HFBP отставание всех Эльбрусов от платформы х86 значительно больше. Почему? Ответ кроется в недостаточной оптимизации нашего ПО под платформу Эльбрус, все же на x86_64 мы потратили 5 лет, а под Эльбрус, особенно под 8СВ, большую часть программ и алгоритмов мы еще вовсе не оптимизировали.


В ближайшее время мы планируем ускорения в трех направлениях. Первое, что мы сделаем, это оптимизируем наши вычисления на интринсиках. Сейчас наши вычисления сделаны для 64-битного SIMD, а у Эльбрус-8СВ SIMD стал 128-битным. Второе ускорение будет сделано командой МЦСТ. Уже сейчас ведутся разработки для поддержки двумерного и одномерного дискретного преобразования Фурье для входного вектора, размер которого не равен степени двойки. И так как пока его нет, мы пользовались библиотекой ffts, с некоторой доработкой как под Эльбрус, так и под х86.


Для оценки возможного ускорения нашей программы мы сделали замеры времени выполнения дискретного преобразования Фурье на процессоре Эльбрус-8СВ для входной комплексной матрицы размером 512 на 512. Неоптимизированная на Эльбрус библиотека ffts выполнила эту операцию за 27 миллисекунд, а eml справилась всего за 5.5. Мы ускорили, как могли, ffts с помощью вызовов EML в 2 раза, и в таблице 2 замеры проведены уже с учётом этой оптимизации. Таким образом, если оптимизацию проводить с той тщательностью, с которой сделана библиотека eml, то алгоритм DFR на Эльбрусе все еще может быть ускорен почти в 2,5 раза.


Третье, но не менее важное ускорение относится к алгоритму HFBP, который основан на применении преобразования Хафа. Данное преобразование также пока еще не представлено в библиотеке eml, а наша версия оптимизирована только с помощью векторных операций. И, так как данный алгоритм вычислительно эффективнее, чем DFR, наши теоретические выводы и оптимизированная под платформу x86_64 версия это показывают, то данный алгоритм тоже может быть ускорен еще в несколько раз. О результатах этих оптимизаций мы обязательно расскажем в следующий раз.


А вот и обещанное видео с работой программы на Эльбрус-8СВ.



Вот такой внутренний мир майского жука у нас получился.



Заключение


В статье мы представили вам нашу новую разработку программное обеспечение для томографической реконструкции Smart Tomo Engine, которое:


  • включает в себя инновационный алгоритм HFBP, стабильно обгоняющий по производительности лидера прошлых лет DFR;
  • поддерживает операционные системы: ОС Эльбрус, MS Windows, macOS, различные дистрибутивы Linux;
  • поддерживает процессорные архитектуры: Эльбрус, x86, x86_64;
  • является полностью отечественной разработкой;
  • в составе программно-аппаратного комплекса на платформе Эльбрус подходит для медицинских и промышленных сканеров всех поколений, для новейших нано-томографов (приборов, которые реконструируют объекты с субмикронным разрешением), а также синхротронных центров.

Ну а главный результат этой статьи заключается в том, что комбинации отечественного процессора Эльбрус и Smart Tomo Engine достаточно для томографии в реальном времени, даже без дополнительных ускорений, работа над которыми уже ведется!


P.S. А еще мы не смогли удержаться и замерили производительность UNetа на Эльбрусе. UNet популярная нейросетевая архитектура для решения задач сегментации. Изначально Unet была разработана для решения задачи сегментации в медицине, а по обработанным этим нейросетевым подходом томографическим снимкам теперь определяют патологии и новообразования. Вычислительно тяжелые части нейронных сетей у нас реализованы на EML, а EML оптимизировано под разные поколения Эльбрусов, поэтому на таком замере можно лучше оценить реальную производительность разных процессоров. Замеры выполнены для одного ядра, без распараллеливания, чтобы не оглядываться на число ядер.


Эльбрус-4C, 800 МГц Эльбрус-8C, 1200 МГц Эльбрус-8СВ, 1500 МГц AMD Ryzen Threadripper 3970X, 3700 (до 4500) МГц
UNet, вход 256 на 256 4,45 c 2,45 c 0,81 с 0,61 c

Обратите внимание на последние две цифры. Круто?.. А наши исследования продолжаются...


Литература
  1. https://en.wikipedia.org/wiki/History_of_computed_tomography
  2. A. C. Kak, M. Slaney, G. Wang. "Principles of computerized tomographic imaging", Medical Physics, 2002, vol. 29, 1, pp. 107-107.
  3. F. Natterer. "Fourier reconstruction in tomography", Numerische Mathematik, 1985, vol. 47, 3, pp. 343-353.
  4. A. Dolmatova, M. Chukalina and D. Nikolaev. "Accelerated fbp for Computed tomography image reconstruction", IEEE ICIP 2020, Washington, DC, United States, IEEE Computer Society, 2020, to be published.
  5. А. В. Долматова, Д. П. Николаев. "Ускорение свертки и обратного проецирования при реконструкции томографических изображений", Сенсорные системы, 2020, Т. 34, 1, c. 64-71, doi: 10.31857/S0235009220010072.
  6. K. Bulatov, M. Chukalina, A. Buzmakov, D. Nikolaev and V. V. Arlazarov, "Monitored Reconstruction: Computed Tomography as an Anytime Algorithm", IEEE Access, 2020, vol. 8, pp. 110759-110774, doi: 10.1109/ACCESS.2020.3002019.
Подробнее..

История портирования Reindexerа как покорить Эльбрус за 11 дней

15.06.2021 18:13:51 | Автор: admin

Всем привет! На связи Антон Баширов, разработчик из ИТ-кластера Ростелекома. Импортозамещение набирает обороты, а российский софт всё глубже проникает в нашу повседневную ИТ-шную сущность бытия. Процессоры Эльбрус и Байкал становятся более востребованными, комьюнити расширяется, но мысли о необходимости портировать весь наш любимый технологический стек на неизведанную архитектуру E2K звучат страшнее рассказов про горящий в пламени production-кластер.

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

Итак, гость в студии база данных Reindexer, разработка нашего ИТ-кластера.

Стоит сказать, почему выбор пал именно на Reindexer, а не другую БД. Во-первых, всеми любимый и известный Postgres уже есть в составе пакетов ОС Эльбрус. Переносить его нет необходимости. Во-вторых, наш гость уже прошел испытания на ARM, следовательно, пришло время ему покорить Эльбрус.

Стоит упомянуть, что Reindexer появился на свет как продуктвыбора между Elastic и Tarantool. Это определенно хочется попробовать завести на отечественном процессоре.

День 0. Знакомство с гостем

Несколько слов про нашего гостя:

Имя:NoSQL in-memory database Reindexer с функционалом полнотекстового поиска
Возраст:на момент испытаний версия БД была 3.1.2
Происхождение:Россия
Место рождения:пытливый ум разработчика Олега Герасимова@olegator99
Место жительства:https://github.com/Restream/reindexer
Место работы:Ростелеком
Строение:основная составляющая C++, имеются примеси из языка Ассемблера и немного CMake
Особенности:- Ассемблерные вставки;
- Много С++11 и C++14;
- Используются корутины.

Деятельность:- Хранение данных в памяти и на диске;
- Выполнение SQL запросов со скоростью 500K queries/sec для PK запросов;
- Выполнение запросов типа full-text search (почти как Elastic, только не тормозит);
- Работа в режиме server и embedded;
- Общение с крутыми парнями: Go, Java, Rust, .NET, Python, C/C++ и (да простит меня Хабр) PHP.

Заскучали? На этом нудная часть закончилась. В эфире рубрика Ээээксперименты!

День 1. А ты думал, в сказку попал?

Для начала попробуем нашего друга собрать из того, что есть.Идем на тестовый сервер Эльбрус 8C с ОС Эльбрус 6.0.1, клонируем туда репозиторий и запускаем CMake.

Хорошие новости, мы нашли компилятор! Новость действительно хорошая, ведь у Эльбруса свой компилятор LCC.

К счастью, создатели Эльбрус сделали LCC полностью совместимым с GCC и наши любимые нативные программки и сборщики смогут чувствовать себя хорошо без особых манипуляций. LCC уже сделал за вас нужные линки:gcc -> /opt/mcst/bin/lcc*.

Зачем Эльбрусу свой компилятор?

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

В архитектуре Эльбрус основную работу по анализу зависимостей и оптимизации порядка операций берет на себя компилятор. Процессору на вход поступают т.н. широкие команды, в каждой из которых закодированы операции для всех исполнительных устройств процессора, которые должны быть запущены на данном такте. От процессора не требуется анализировать зависимости между операндами или переставлять операции между широкими командами: все это делает компилятор, тщательно планируя отдельные операции, исходя из ресурсов широкой команды. В результате аппаратура процессора может быть проще и экономичнее.

Ключевая идея архитектуры давайте попробуем выполнить несколько операций за один присест. Эльбрусы позволяют реализовать параллельные выполнение кода без применения многопоточности. Достигается это путем одновременного выполнения разных инструкций внутри одной широкой команды на разных устройствах процессора. Но для того, чтобы процессор понимал, что от него хотят и мог правильно распределить инструкции, ему нужно дать на вход оптимизированный поток больших команд. Именно в формировании этого потока и заключается назначение LCC компилировать код так, чтобы широкие команды содержали параллельно выполняемые инструкции с целью задействовать все устройства CPU. Подробнеетут.

Но вернемся к нашему гостю и тому, что не понравилось CMake.

В скриптах сборки, в CMakeLists.txt выполняется определение операционной системы и архитектуры процессора, на которой собирается Reindexer. Нужно это для того, чтобы подключать правильные исходники ассемблера, ведь как говорится Write once, run anywhere.

Разумеется, на момент написания скриптов никто не знал про процессоры Эльбрус, поэтому наш скрипт и упал. Исправляем.

Программисты люди ленивые, поэтому:

Попытка 2:

А что так можно было? На самом деле да для того, чтобы завелся CMake, этого было достаточно. Теперь ударим в бубен и запустимmake -j8:

Для тех, кто уже успел поработать с кроссплатформенным софтом, не новость, что С/С++ код с помощью макросов разделяют на платформозависимые секции.

Поэтому, в некоторые места кода Reindexer понадобилось добавить парочку новых условий для__E2K__и__LCC__:

После колдовства с макросами нас ждал монстр пострашнее:

Вот что бывает, когда игнорируешь messages у CMake.

Из-за того, что CMake не нашел подходящих исходников, компилятор не смог найти реализации двух функций:jump_fcontextиmake_fcontext. Про назначение этих функций я расскажу чуть позже, а пока что давайте успокоим нашего гостя и подсунем ему пару пустышек:

Этих операций оказалось достаточно, чтобы Reindexer собрался.

Поздравляю, у вас двойня!

Вот они, наши два долгожданных файла:

# file reindexer_serverreindexer_server: ELF 64-bit LSB executable, MCST Elbrus, version 1 (GNU/Linux
# file reindexer_toolreindexer_tool: ELF 64-bit LSB executable, MCST Elbrus, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux.so.2, for GNU/Linux 2.6.33, with debug_info, not stripped

Это можно считать успехом. Мы смогли собрать наш первый Эльбрус-бинарник. Даже два бинарника: reindexer_server и reindexer_tool.

Подведем итоги. Чтобы собрать Reindexer, мы:

  • Поправили CMake-скрипты;

  • Добавили несколько условий в макросы препроцессора;

  • Заглушили ASM функции.

День 3. Наш Гость, попав на Эльбрус, начал подавать признаки жизни

Первый запуск прошел успешно - сервер поднялся, и даже открылся web-ui.

Я привык не останавливаться на достигнутом и решил немного поработать над Reindexer.

Результат меня порадовал - Гость устал и прилег отдохнуть:

Такое поведение наблюдалось только на Эльбрус. На i5 все работало штатно.

Давайте разбираться. Вооружившись отладчиком (gdb кстати под E2K работает прекрасно) и CLion, мне удалось докопаться до истины.

Пару запросов к Reindexer смогли воспроизвести ошибку:

Падает в деструкторе. Интересный момент - упало на free (в данном случае free реализуется через jemalloc). Видимо, здесь идет высвобождение памяти по некорректному указателю. Ошибку эту я исправлял в два этапа:

  1. work around - дело в том, что QueryEntry лежит в объекте ExpressionTree, в самом классе примечательного я не нашел, поэтому копнул в сторону родителя. Оказалось, что до вызова деструктора был вызван вот такой копирующий конструктор, в котором есть интересный MakeDeepCopy(), реализованный с помощью библиотечкиmpark-variant.

    Подробнее про expression tree рассказываюттут.

    На часах было 2 часа ночи, я засиделся в офисе и разбираться в variant было уже лениво, поэтому, каюсь, я решил просто убрать вызов этого метода.

    Итог - оно заработало.

  2. TODO: Исправление тоже есть, но рассказ про него уже выходит за рамки данной статьи. Небольшой спойлер (код из mpark-variant с патчем под e2k):

inline constexpr DECLTYPE_AUTO visit(Visitor &&visitor, Vs &&... vs)#ifdef E2K //Fix for Elbrus    -> decltype(detail::visitation::variant::visit_value(lib::forward<Visitor>(visitor),                                                 lib::forward<Vs>(vs)...))    {     return detail::visitation::variant::visit_value(lib::forward<Visitor>(visitor),                                                 lib::forward<Vs>(vs)...);    }#else    DECLTYPE_AUTO_RETURN(        (detail::all(             lib::array<bool, sizeof...(Vs)>{{!vs.valueless_by_exception()...}})             ? (void)0             : throw_bad_variant_access()),        detail::visitation::variant::visit_value(lib::forward<Visitor>(visitor),                                                 lib::forward<Vs>(vs)...))#endif

День 5. Он ожил! Ну почти

Сервер у нас, действительно, работает, даже удалось получить первые результаты бенчмарков.

Но все это время я упорно игнорировал один компонент.

Помните, как мы убрали завязку на ASM и функцииmake_fcontext и jump_fcontext?

Так вот, ASM исходники в Reindexer нужны для реализации C++ корутин, а эти функции - ключевые для корутин из библиотеки boost/context.

Кто такая эта ваша Корутина?

Корутина это функция, которая может быть приостановлена и возобновлена в любой момент. Для реализации достаточно трех основных компонентов:
- функция
- механизм для ее паузы (suspend)
- механизм для возобновления ее с той точки, в которой была сделана пауза (resume).

Реализацию корутин можно увидеть в таких языках и библиотеках, как:

  • Libcoro(корутины на C/С++)

  • Koishi(тоже корутины, тоже на С/С++)

  • Boost(и это тоже корутины, тоже на С/С++, корутин много не бывает!)

  • Node-fibers(корутины для NodeJS на базе libcoro)

  • Tarantool(fibers на базе libcoro)

  • Kotlin(свои корутины, не на C++)

  • C++20

  • Goroutine

Для наглядности вот скрин теста корутин из Koishi:

Последовательность следующая:

  1. Создали корутину, выделили стек, задали функцию;

  2. Возобновили корутину - в этот момент вызвалась наша функция;

  3. Приостановили корутину с помощьюkoishi_yield здесь мы вернули управление в test1 сразу после строчкиkoishi_resume;

  4. Если мы еще раз сделаемkoishi_resumeна нашей корутине мы вернемся на строчку функции cofunc1 сразу после первого вызоваkoishi_yield.

Без корутин не будет работать reindexer_tool, но не можем же мы оставить Reindexer без такой важной конечности. Будем исправлять.

Начнем с анализа ситуации. Ожидаемо, что ASM Эльбруса бустовские корутины не поддерживают (пока что), а значит нам нужно реализовать их самим. Подробности и реализацию бустовских корутин можете посмотретьздесь, а сейчас наступило время скрещивать ужа с ежом.

Есть несколько вариантов реализовать корутины:

  • Вариант 1:написать ASM реализацию. Самый очевидный, но при этом самый сложный вариант. У нас есть в планах попробовать именно этот вариант, так как ASM корутины - самые быстрые.

  • Вариант 2: забить. Нет, это не наш путь.

  • Вариант 3: использовать библиотеку.

По счастливой случайности Koishi оказалось той самой библиотекой, поддерживающей реализацию корутин с помощью встроенных E2K функций:makecontext_e2k()иfreecontext_e2k().

Koishi, Koishi, что это вообще такое?

Если коротко это библиотека, предоставляющая удобный API по использованию корутин на C/C++ с несколькими вариантами реализации:

  • ucontext

  • ucontext_e2k (наша прелесть)

  • fcontext

  • win32fiber

  • ucontext_sjlj

  • emscripten

Там, где стандартная медицина бессильна, в дело вступает генная инженерия.

Для начала внедрим Koishi в организм Reindexer:

Заменим больной орган на здоровый:

Стараемся не повредить то, что уже работает:

Одним из backend-ов Koishi для корутин выступает fcontext (те же самые boost исходники, что в Reindexer). Последуем древней мудрости работает не трогай! и оставим как есть в случае, если у нас не E2K архитектура. Для Эльбруса мы будем использоватьucontext_e2k.c

И вот он, наш мутант с корутинами полностью здоров и функционален (и на amd64, и на E2K):

День 11. Проводим финальные испытания

Две половинки нашего Франкенштейна собраны вместе, даже сторонняя библиотека прижилась и отлично себя показала. Пришло время для финальных тестов.

Всего в Reindexer около 300 функциональных тестов, и мне не терпится запустить их все.

Тесты бежали, бежали и не добежали. Один из тестов вызвал Segmentation Fault.

Всему виной оказались вот эти строчки:

struct ConnectOpts {  /* тут тоже код, но он не такой интересный */  uint16_t options = 0;  int expectedClusterID = -1;};

Обычный код, что тут такого? скажете вы. Но не все так просто. Запоминаем, что здесь два поля, которые инициализируются при объявлении.

Попробуем воспроизвести на изолированном более простом примере.

ASM, настало твое время

Внимание на скриншот:

Ошибка проявляется именно в том случае, когда отсутствуют не проинициализированные поля. Другими словами, если все ваши поля инициализируются при объявлении вы счастливчик, поймавший Segmentation Fault.

Баг заключается в том, что скомпилированное создание структуры выглядит как странныйaddd. Именно эта строчка и вызывает segfault. Кстати, если вместоbool anyField = falseнаписать простоbool anyField, то код совершенно другой и ошибки нет.

Семь бед, один ответ обновитесь!

Разгадка тайны оказалась проста. На момент работы с Reindexer последней версией компилятора LCC была v.1.25.16, однако в состав пакетов ОС Эльбрус по умолчанию входит 1.25.14, на котором я и запускал тесты. Добрые люди из сообщества подсказали нам, что уже в 15 версии данный баг был исправлен. Я решил обновиться на 16-ую и посмотреть, что будет.

Вот что нам принес новый компилятор LCC v.1.25.16:

C++ код такой же, однако ASM совсем другой, и что самое главное он работает! Последовательно (заранее прошу прощения за мой ломаный asm-русский переводчик):

  1. gestp - выделяем стек и кладем его в %dr3

  2. setwd - задаем текущее окно в регистровом файле

  3. setbn - задаем подвижную базу регистров в текущем окне регистрового файла

  4. addd - кладем "дно" стека (стек размером 0x20) в %dr2

  5. addd - выделяем на стеке нашу структуру

  6. ldb - достаем из констант наш false и кладем его в %r5

  7. stb - кладем наш false из регистра %r5 в наше поле anyField1

  8. addd - подготовили локальный указатель на структуру для вызова метода

  9. addd - передаем указатель в базовый регистр для передачи при вызове anyMethod (в anyMethod мы достаем указатель из регистра %dr0)

  10. disp - подготавливаем регистр перехода на anyMethod

  11. call - вызываем anyMethod

Дальше все просто пересобрать, перезапустить, обрадоваться.

Тесты прошли успешно, и теперь у нас есть полностью рабочий и протестированный Reindexer на Эльбрусе.

На этом все ?

На самом деле нет. Сейчас мы смогли:

  • собрать Reindexer Server

  • запустить Reindexer Server

  • собрать Reindexer Tool

  • запустить Reindexer Tool

  • переписать кусочек Reindexer Tool

  • уронить Reindexer и поднять его

  • добиться 100% проходимости Reindexer тестов

Мы научились:

  • собирать C++ софт на Эльбрус

  • переписывать C++ софт под особенности и отличия Эльбрусов

  • разбираться в ASM E2K

  • превозмогать трудности

  • разбираться в C++ корутинах даже на Эльбрусе

Что в планах:

  • корутины на ASM E2K (может быть даже сравнить fcontext ASM на i5 и ucontext/ASM на E2K)

  • оптимизировать Reindexer под архитектуру Эльбрус

  • перенести еще несколько интересных приложений на Эльбрус

  • дополнить базу библиотек и пакетов Эльбрус

  • организовать E2K инфраструктуру и песочницу

Что же можно сказать про Эльбрус со стороны простого разработчика?

Эльбрус это ваш друг. Он уже умеет в 80% современного софта, работать с ним можно и достаточно комфортно. Его архитектура - действительно произведение искусства, идея одноядерного параллелизма достойна уважения и несет в себе большой потенциал. Вопрос лишь в том, получится ли его раскрыть.

На сегодня это всё, что хотелось бы вам рассказать, но я еще вернусь с новыми интересными подробностями про портирование и оптимизацию, и да прибудет с вами сила Эльбруса!

Подробнее..

На пути к вершине Магма и Кузнечик на Эльбрусе

17.06.2021 16:13:58 | Автор: admin

В последнее время всё чаще появляются статьи о производительности российских процессоров Эльбрус на различных задачах. Тема криптографии пока что остаётся за кадром, хотя в разное время были упоминания то о высоких возможностях Эльбруса (некий ГОСТ лучше в 9 раз на Эльбрус-4С, чем на Intel Core i7-2600), то о плохой оптимизации компилятора и, соответственно, крайне низкой скорости реализованных алгоритмов (Кузнечик в 100 раз медленнее, чем на Intel?). Предлагаю наконец разобраться, что может Эльбрус, на примере двух ГОСТ алгоритмов симметричного шифрования.

Чтобы статья не вышла слишком большой, будем считать, что читатель имеет общее представление об архитектурах процессоров, в том числе знает об Эльбрусе. Если же нет, на сайте разработчика (компании МЦСТ) есть отличное руководство по программированию и книга об архитектуре в целом. Именно с этих материалов и началось моё знакомство с Эльбрусами. Также отмечу, что в современных процессорах очень много различных механизмов и особенностей, так что в статье буду касаться только тех, которые, на мой взгляд, важны при реализации выбранных алгоритмов.

Что может предложить архитектура Эльбрус

Для выполнения арифметических операций у Эльбруса есть 6 АЛУ (арифметико-логических устройств), способных выполнять операции параллельно. Начиная с версии 5 архитектуры появилась поддержка упакованных (SIMD) инструкций над 128-битными регистрами.

Для хранения промежуточных результатов присутствует большой регистровый файл: суммарно в процедуре можно использовать более 200 (64-битных) регистров общего назначения. Для SIMD вычислений используются те же самые регистры, а не отдельные, как это часто бывает. Соответственно, с 5 версии архитектуры все регистры стали 128-битными.

Задачу симметричного шифрования можно отнести к потоковой обработке массива данных. Для таких ситуаций в Эльбрусе есть механизм асинхронной подкачки данных из памяти APB (Array Prefetch Buffer). Использование этого механизма позволяет вовремя подгружать данные из памяти, не теряя время на кэш-промахи.

Выбор реализаций

Хорошим подходом было бы взять несколько известных реализаций, оптимизировать их под Эльбрус и посмотреть на результаты. Но, с другой стороны, мы говорим о процессоре общего назначения, поэтому можно сэкономить силы и время, предположив, что лучшие результаты можно ожидать от подходов, которые являются самыми быстрыми на других архитектурах.

Правда, о производительности ГОСТ алгоритмов обычно говорят только в контексте семейства x86-64, другие архитектуры мало кого интересуют. Но это не беда: мне показалось, что при знании команд ассемблера x86-64 ознакомиться с набором целочисленных и логических инструкций Эльбруса проще, чем, скажем, с ARM-овым. То есть прослеживаются определённые параллели, особенно, в области SIMD инструкций, и даже прямые аналоги. В остальном, конечно, у них нет ничего общего.

Итак, для Магмы известна эффективная реализация режимов, допускающих параллельную обработку блоков, то есть когда несколько блоков могут шифроваться независимо друг от друга. Это, например, режимы ECB, CTR, MGM. При этом скорость конкурирует с AES, для которого на x86-64 есть аппаратная поддержка. Реализация заточена именно под параллельную обработку, в случае последовательной (режимы с зацеплением) используются другие подходы. Мне интересно добиться максимальной скорости, поэтому я ограничился только случаем параллельной обработки.

С Кузнечиком немного проще: лучшие результаты что при последовательной, что при параллельной обработке даёт одна и та же реализация её и берём.

Тестовые машины

То же самое в текстовом виде

Процессор

Версия арх-ры

Кол-во ядер

Тактовая частота

L1d

L1i

L2

L3

Эльбрус-4С

E2Kv3

4

0.75 ГГц

4 x 64 КБ

4 x 128 КБ

4 x 2 МБ

Нет

Эльбрус-1С+

E2Kv4

1

0.985 ГГц

1 x 64 КБ

1 x 128 КБ

1 x 2 МБ

Нет

Эльбрус-8С

E2Kv4

8

1.2 ГГц

8 x 64 КБ

8 x 128 КБ

8 x 512 КБ

16 МБ

Эльбрус-8СВ

E2Kv5

8

1.55 ГГц

8 x 64 КБ

8 x 128 КБ

8 x 512 КБ

16 МБ

Эльбрус-2С3

E2Kv6

2

2 ГГц

2 x 64 КБ

2 x 128 КБ

2 x 2 МБ

Нет

Эльбрус-16С

E2Kv6

16

2 ГГц

16 x 64 КБ

16 x 128 КБ

8 x 1 МБ

32 МБ

Магма

В случае x86-64 быстрая реализация Магмы опирается на использование расширений AVX и AVX2. При этом учитывается наличие в процессоре нескольких АЛУ и возможность параллельного исполнения до 3 векторных инструкций за один такт. Естественно, планирование параллельного исполнения остаётся на откуп процессора.

В случае же Эльбруса есть возможность явно распланировать параллельное исполнение. Опуская некоторые детали, можно считать, что на 3 и 4 поколении возможно исполнить 6 целочисленных векторных операций над 64-битными регистрами, а начиная с 5 поколения 4 векторных операции уже над 128-битными регистрами.

Для Эльбруса я написал собственную реализацию Магмы. Она использует те же идеи, что и исходная под x86-64, но при этом адаптирована под другой набор инструкций. Рассматривал перспективу написания на ассемблере и даже пробовал, но довольно быстро осознал, что ассемблер у Эльбруса достаточно сложный в плане программирования на нём (например, есть много нюансов по размерам задержек и зависимостям инструкций, которые тяжело учесть вручную). При этом оптимизирующий компилятор делает свою работу действительно хорошо: переставляет инструкции в рамках большого окна и при подборе опций компиляции выдаёт плотность кода, которая не отличается от теоретических оценок на количество инструкций и тактов. Так что я остановился на реализации на языке Си с использованием intrinsic функций для доступа к некоторым инструкциям процессора.

Для измерения скорости был выбран режим ECB. Обычно именно он (или даже его упрощения) используется при сравнении производительности, а скорость других режимов можно оценить на базе полученных результатов, отличия несущественны. Речь идёт о реализации базового алгоритма шифрования, поэтому накладные расходы от смены ключа также не учитываются. Объём данных для замера порядка 1 ГБ. Естественно, шифрование на одном ядре. Для многоядерной машины можно умножить результат на количество ядер и получить близкую к реальности оценку скорости. По крайней мере, во всех сравнениях я видел именно такую зависимость. Полученные результаты в таблице ниже:

То же самое в текстовом виде

Процессор

Скорость на невыровненных данных

Скорость на выровненных данных

Производительность

Эльбрус-4С

116 МБ/с

137 МБ/с

5.2 такт/байт

Эльбрус-1С+

151 МБ/с

179 МБ/с

5.2 такт/байт

Эльбрус-8С

185 МБ/с

220 МБ/с

5.2 такт/байт

Эльбрус-8СВ

402 МБ/с

520 МБ/с

2.8 такт/байт

Эльбрус-2С3

669 МБ/с

670 МБ/с

2.8 такт/байт

Эльбрус-16С

671 МБ/с

672 МБ/с

2.8 такт/байт

Здесь под выровненными данными подразумевается выравнивание по границе 8 байтов для E2Kv3/E2Kv4 и 16 байтов для E2Kv5/E2Kv6. При наличии такого выравнивания (на версиях до 6) работает механизм APB и данные для шифрования эффективно подкачиваются из памяти. При этом с версии 6 APB уже не требует выравнивания данных, поэтому при любом расположении данных достигается максимальная скорость. Для невыровненных данных на предыдущих версиях архитектуры я не провёл достаточно исследований, так что значения в этом столбце таблицы можно считать нижней границей.

Для сравнения приведу результаты из статьи с описанием базовой реализации на Intel Core i3-7100 @ 3.9 ГГц. При использовании AVX 458 МБ/с, 8.1 такт/байт; AVX2 1030 МБ/с, 3.6 такт/байт. Так что по абсолютной скорости Эльбрус достаточно близок к современным процессорам Intel (это при значительной разнице в тактовой частоте!) и превосходит x86-64 с AVX в тактах более чем в 1.5 раза (для 3 и 4 поколения), а x86-64 с AVX2 в 1.3 раза (для 5 поколения).

Кузнечик

По сравнению с Магмой, структура Кузнечика является более сложной. Несмотря на то, что удалось декомпозировать нелинейное преобразование S, техники реализации, основанные на широком использовании SIMD-инструкций, пока что отстают от "классической" реализации со склеенным LS (линейным и нелинейным) преобразованием и таблицей предвычислений размером 64 КБ (упоминается в статье под именами с LS или более простое описание на Хабре).

В случае x86-64 Кузнечик эффективнее всего реализуется с использованием AVX-инструкций (удобно работать со 128-битными регистрами, так как длина блока и размер значений в таблице равны в точности 128 битам). При этом для вычислений адресов в таблице не удаётся воспользоваться эффективной адресацией Scale-Index-Base-Displacement (именование из статьи), так как в качестве Scale нужно значение 16, а максимально возможное 8. На Эльбрусе можно ожидать конкурирующих результатов за счёт большого кэша L1d (64 КБ) и наличия 4 АЛУ, обеспечивающих произвольный доступ к памяти (насколько мне известно, у абсолютного большинства процессоров x86-64 2 порта для загрузки данных).

Как и в случае с Магмой, для Кузнечика я написал отдельную реализацию на Си под Эльбрус, чтобы добиться максимальных результатов. Начиная с 5 версии архитектуры я явным образом использовал тип __v2di (см. e2kintrin.h в составе компилятора), чтобы быть уверенным, что получится использовать регистры как 128-битные.

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

Итак, в случае строго последовательной обработки данных:

То же самое в текстовом виде

Процессор

Скорость на невыровненных данных

Скорость на выровненных данных

Производительность

Эльбрус-4С

52 МБ/с

69 МБ/с

10.4 такт/байт

Эльбрус-1С+

63 МБ/с

90 МБ/с

10.4 такт/байт

Эльбрус-8С

80 МБ/с

110 МБ/с

10.4 такт/байт

Эльбрус-8СВ

95 МБ/с

150 МБ/с

9.9 такт/байт

Эльбрус-2С3

170 МБ/с

171 МБ/с

11 такт/байт

Эльбрус-16С

171 МБ/с

172 МБ/с

11 такт/байт

Для сравнения результаты из статьи (лучшие из опубликованных) на Intel Core i7-6700 @ 4 ГГц 170МБ/с, 22.4 такт/байт. В отличие от Магмы, можно говорить о сопоставимой абсолютной скорости и преимуществе в тактах более чем в 2 раза.

В таблице заметен интересный момент: результаты ощутимо колеблются среди последних 3 версий Эльбруса. Такое поведение я заметил буквально недавно и начал обсуждение с коллегами из МЦСТ, так что есть надежда, что результаты удастся немного улучшить при доработке компилятора.

С параллельной обработкой ситуация намного интереснее:

То же самое в текстовом виде

Процессор

Скорость на невыровненных данных

Скорость на выровненных данных

Производительность

Эльбрус-4С

78 МБ/с

83 МБ/с

8.6 такт/байт

Эльбрус-1С+

102 МБ/с

108 МБ/с

8.7 такт/байт

Эльбрус-8С

126 МБ/с

133 МБ/с

8.6 такт/байт

Эльбрус-8СВ

248 МБ/с

291 МБ/с

5.1 такт/байт

Эльбрус-2С3

453 МБ/с

454 МБ/с

4.2 такт/байт

Эльбрус-16С

454 МБ/с

455 МБ/с

4.2 такт/байт

И традиционное сравнение с Intel Core i7-6700 @ 4 ГГц: на нём достигается 360 МБ/с, 10.6 такт/байт. В отличие от случая последовательной обработки, у E2Kv3 и E2Kv4 преимущество Эльбруса не такое большое, предположительно из-за того, что реализация обработки нескольких блоков вместе обладает более высокой степенью параллельности и планировщику на x86-64 легче справиться с выявлением независимых операций. А вот появление у 5 поколения Эльбруса 128-битных регистров и загрузок из памяти позволяет ему сохранить преимущество в тактах более чем в 2 раза.

Сравнивать E2Kv6 с i7-6700 оказалось несолидно, поэтому я взял ассемблерную реализацию режима ECB и провёл собственный замер. В статье с описанием результатов на i7-6700 данные шифруются на месте, без работы с памятью, поэтому у честного режима ECB результат чуточку хуже: на самом мощном из доступных мне процессоров Intel Core i7-9700K @ 4.7 ГГц вышло 411 МБ/с, 10.9 такт/байт. Эльбрус оказался быстрее, обеспечивая преимущество в тактах в 2.5 раза.

Заключение

На основании полученных результатов я делаю вывод, что Эльбрус обладает отличными возможностями для высокопроизводительной реализации шифрования данных, несмотря на отсутствие в выпущенных версиях архитектуры какой-либо аппаратной поддержки криптографических операций.

За время изучения архитектуры Эльбруса у меня сложилось впечатление, что многие полезные инструкции исторически добавлялись для обеспечения работы двоичного транслятора, но ситуация изменилась с 5 версии: Эльбрус начал больше развиваться собственным путём. Эту положительную динамику невозможно не отметить.

С другой стороны, сложившаяся похожесть ряда инструкций упрощает разработку и оптимизацию под Эльбрус. Можно сказать, что эта статья предлагает простой способ портирования и оптимизации алгоритмов под Эльбрус: достаточно взять хорошо зарекомендовавший себя на Intel/AMD алгоритм и немного адаптировать его под Эльбрус. Я искренне верю, что в результате практически любой алгоритм должен работать по крайней мере не хуже, чем в разницу тактовых частот.

Если немного поразбираться и осторожно писать код на Си, компилятор прекрасно справляется с задачей оптимизации и не оставляет человеку шансов написать на ассемблере более эффективный код.

P.S.

Эта статья написана по мотивам моего устного доклада на конференции РусКрипто. По ссылке можно найти презентацию, которая является краткой выжимкой с основными результатами на тот момент. К моменту же написания статьи удалось улучшить некоторые результаты, а также проверить реализации на новом поколении процессоров.

Несмотря на то, что для получения описанных результатов мне удалось разобраться с Эльбрусом на основании только открытой информации и документации к компилятору, я хочу выразить благодарность сотрудникам МЦСТ, в особенности, Александру Трушу, за ответы на периодически возникавшие у меня вопросы и, конечно, за предоставление удалённого доступа к новым процессорам.

Подробнее..

Российская СХД на отечественных процессорах Эльбрус все, что вы хотели, но боялись спросить

18.09.2020 18:11:01 | Автор: admin
BITBLAZE Sirius 8022LH
Не так давно мы публиковали новость о том, что отечественная компания разработала систему хранения данных на Эльбрусах с уровнем локализации >90%. Речь идет об омской компании Промобит, которой удалось добиться включения своей СХД Bitblaze Sirius серии 8000 в Единый реестр российской радиоэлектронной продукции при Минпромторге.

Материал вызвал дискуссию в комментариях. Читатели интересовались подробностями разработки системы, нюансами подсчета уровня локализации, историей создания СХД. Чтобы ответить на эти вопросы, мы взяли интервью у главы Промобит Максима Копосова.

Максим, расскажите, пожалуйста, когда и как у вас появилась идея создания отечественной СХД на базе российских процессоров Эльбрус?

Вы знаете, собственную систему хранения данных мы начали разрабатывать еще до появления Эльбрусов. Это была обычная СХД, которая работала на базе процессоров Intel. Подробнее об этом проекте можно почитать на РБК.

Примерно в 2013 году я увидел видеопрезентацию процессора Эльбрус, которую провел директор по маркетингу АО МЦСТ Константин Трушкин. О том, что эта компания разрабатывает отечественный процессор, я слышал еще в конце 90-х или начале 2000-х. Но тогда это была просто новость, я не думал, что проект будет реализован.


После того, как я убедился, что процессор реален и его можно купить, написал в администрацию АО МЦСТ с просьбой выслать коммерческое предложение. После обсуждения деталей производитель Эльбрусов согласился на сотрудничество.

Почему меня заинтересовал российский процессор? Дело в том, что отечественные системы на базе импортных комплектующих, включая процессоры Intel, достаточно тяжело продавать. С одной стороны, есть корпоративный рынок, который давно привык к продукции HP, IBM и других зарубежных компаний. С другой существуют недорогие китайские решения, востребованные у малого и среднего бизнеса.


Узнав об Эльбрусах, я подумал, что СХД на базе этого чипа сможет занять собственную нишу и получить покупателей со стороны государства, оборонного сектора. То есть тех, кому крайне важно использовать доверенную платформу, без аппаратных или программных закладок и недекларированных возможностей. Как-то я посмотрел динамику бюджета Министерства обороны страны и увидел, что объем бюджетирования постепенно растет. Деньги стали вкладывать в цифровизацию, информационную безопасность и т.п., отказавшись полностью или частично от импортных СХД и других электронных систем.


Так и получилось, правда, не сразу. Согласно постановлению Правительства РФ от 21 декабря 2019 года 1746 Об установлении запрета на допуск отдельных видов товаров, происходящих из иностранных государств, и внесении изменений в некоторые акты Правительства Российской Федерации, в целях обеспечения безопасности критической информационной инфраструктуры (КИИ) РФ, в том числе используемой при реализации национальных проектов, на два года вводится запрет на допуск к закупкам иностранных программно-аппаратных комплексов. А именно систем хранения данных (Устройства запоминающие и прочие устройства хранения данных).

Отмечу, что мы начали работу задолго до того, как все заговорили об импортозамещении. Более того, в 2011-2012-х годах с самых высоких трибун заявлялось о том, что импортозамещением в ряде отраслей, включая электронику, не стоит заниматься. Нужны инновации, а не повторение того, что уже пройдено другими. В то время термин импортозамещение носил негативную коннотацию, мы старались его не использовать.

Мы продолжали разрабатывать отечественные системы, считая это правильным. Поэтому, если кто-то говорит, что мы начали работу лишь после того, как импортозамещение стало восходящим трендом, это не так.


Расскажите подробнее о процессе разработки

Работа над созданием СХД Bitblaze Sirius серии 8000 началась в 2016 году. Тогда мы подали заявку на конкурс Министерства промышленности и торговли. Постановление от 17 февраля 2016 года с описанием этого конкурса носит длинное название: Об организации работы в Министерстве промышленности и торговли Российской Федерации по проведению конкурсного отбора на право получения из федерального бюджета субсидий российскими организациями на возмещение части затрат на создание научно-технического задела по разработке базовых технологий производства приоритетных электронных компонентов и радиоэлектронной аппаратуры в рамках государственной программы Российской Федерации Развитие электронной и радиоэлектронной промышленности на 20132025 годы.

Мы предложили Минпромторгу детальный развернутый бизнес-план с техническим и экономическим обоснованием. Рассказали, что именно мы хотим разработать, на какой рынок рассчитываем и кого видим в качестве целевой аудитории. В итоге Минпромторг заключил с нами договор, и мы начали разработку.

Проект практически не отличался от других проектов разработки программно-аппаратных платформ. Сначала мы собрали несколько команд инженеров, программистов и других специалистов. На первом этапе создали макетное решение, над которым работало параллельно несколько команд. Протестировали разные варианты программного обеспечения, после чего разработали три отличающихся по характеристикам макета.

В итоге выбрали вариант, который позволял пойти по пути горизонтального масштабирования системы хранения данных. Рынок как раз тогда развивался в этом направлении. Горизонтальное масштабирование было ответом на постоянно растущий объем данных у пользователей СХД. Оно дает возможность увеличивать емкость ЦОД с СХД.

Наработки для остальных двух макетов тоже не пропали даром их используем в других проектах.

Какие сложности возникали в ходе реализации проекта по созданию отечественной СХД?

В целом, проблемы можно разделить на две категории: разработка ПО и железо. Что касается программного обеспечения, то об этом написано огромное количество разных книг и статей, в нашем случае ничего уникального в этом отношении нет.

С точки зрения железа все гораздо интереснее. Сложности возникли уже на этапе проектирования корпуса. Нам необходимо было все построить с нуля. Ну а поскольку мы участники проекта Минпромторга, то работать должны с отечественными специалистами. Профессионалы, которые могли нам помочь, заняты в основном на предприятиях оборонно-промышленного комплекса. С ними достаточно сложно построить отношения с точки зрения бизнеса, поскольку разговариваем мы на разных языках. Они привыкли работать с такими заказчиками, как государство, военные, с нами им было очень непривычно поначалу. Мы долго привыкали друг к другу.

С течением времени госкорпорации и предприятия стали выделять у себя отделы по выпуску гражданской продукции своеобразные медиаторы между бизнесом и производством, которое заточено под выпуск военной продукции. Руководители этих отделов понимают язык бизнеса, с ними гораздо легче иметь дело, чем с руководством всего предприятия. Пока что проблем немало, но уже гораздо меньше, чем было в начале. Кроме того, текущие сложности постепенно решаются.

Расскажите, пожалуйста, об импортозамещении основных компонентов СХД и элементной обвязки. Что здесь отечественное, а что пришло из-за границы?

Наша главная цель в ходе реализации этого проекта импортозамещение крупных интегральных схем, в которых могут быть какие-либо незадекларированные возможности.

Кроме интегральных схем, мы используем и другие отечественные компоненты. Вот список:

  • Процессор Эльбрус.
  • Южный мост.
  • Печатные платы.
  • Материнская плата.
  • Световоды.
  • Корпус и металлические детали корпуса.
  • Пластиковые детали и ряд элементов конструкции.

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

А вот элементную обвязку, конденсаторы, резисторы закупаем из-за рубежа. Когда отечественные конденсаторы, резисторы и т.п. войдут в массовое производство, а их качество и надежность не будут уступать зарубежным образцам, мы на них обязательно перейдем.

Как производился расчет уровня локализации?

Ответить на это просто. В постановлении от 17 июля 2015 года N 719 О подтверждении производства промышленной продукции на территории Российской Федерации приводятся формулы, согласно которым все это рассчитывается. Наш специалист по сертификации руководствовался именно этими формулами, запрашивая в случае необходимости дополнительную информацию.


Стоит отметить, что наши расчеты не с первого раза были приняты Палатой, мы несколько раз ошиблись. Но после того, как все недочеты были исправлены, Торгово-промышленная палата все подтвердила. Основную роль здесь играет стоимость компонентов. При этом необходимо помнить, что в Постановлении 719 требования о соблюдении процентной доли стоимости использованных при производстве иностранных комплектующих изделий к изделию в базовой комплектации происходит без учета стоимости накопителей данных жестких магнитных дисков, твердотельных дисков, магнитных лент.


В итоге винты, конденсаторы, светодиоды, резисторы, вентиляторы, блок питания комплектующие иностранного происхождения составляют 6,5% от стоимости СХД BITBLAZE Sirius 8000. В 94,5% стоимости входит корпус, печатные платы, материнская плата, процессор, световоды, произведенные в России.

Что случится, если доступ к иностранным компонентам закроют?

Закрыть могут доступ к той элементной базе, производители которой подконтрольны США. Если вдруг возникнет этот вопрос, то мы будем использовать компоненты, произведенные китайскими компаниями. Всегда будут компании, которые не обращают внимания на санкции.

Возможно, сами наладим производство необходимых компонентов у себя или в другой стране. В этом отношении все хорошо.

Более реальная угроза если тайваньскому контрактному производителю запретят производить Эльбрусы. Тогда могут возникнуть проблемы иного порядка, как это было, например, у Huawei. Но и их можно решить. Наше программное обеспечение кроссплатформенно, так что работать оно будет и в случае замены процессоров на другие. Мы используем наиболее простые и эффективные алгоритмы, которые без особых проблем можно перенести на другую архитектуру.

Подробнее..

Its a Sony! Впечатления от ультрапортативного флагмана 20 лет спустя

30.03.2021 02:20:56 | Автор: admin
В естественной среде обитания.В естественной среде обитания.

Не уверен, что это ещё актуально, но ниже около 25ти картинок.

Выезжая вечером из дома за внешнимCDприводом для давно запланированного к покупке некробукаSonyVAIOPCG-Z505LSу меня не было и мысли, что моя первая статья на Хабре, по итогу, окажется вовсе не о нём. Удачное предложение 505ого с полным комплектом (за исключением рекавери дисков) сорвалось, и я решил насобирать комплект по отдельности. Пролистывая тонны объявлений на площадках-продаж-непонятных-вещей, я наткнулся на объявление c весьма интересной железкой SonyVAIOPCG-C1VP, в комплекте с которой шел нужный мне (как тогда казалось) внешний привод для компакт дисков.

Выкроив вечер перед началом отпуска, и созвонившись со всеми продавцами, я отправился за покупками (жене сказал не выгнала). По итогу, без плясок и бубнов завелась только Цшка, обеспечив себе тем самым первенство в двухсерийном обзоре портативной продукции Сони конца 90х годов.

Итак, что это за зверь такой вообще, и что в нём, при его габаритах (и при его эпохе)? Самим по себе форм-фактором ультрапортативных ноутбуков никого не удивишь - ещё в 90х годах был форм-фактор с видеокассету с самым популярным представителем ToshibaLibretto. Это были ноутбуки лишенные встроенных приводов, с акцентом на минимальный вес, и имевшие всякие разные энергосберегающие фичи. В погоне за временем автономной работы производители знатно извращались, что мы можем увидеть в том числе на примере серии С уSony. В частности, и в обозреваемой сегодня модели. Основным отличием от современников был её центральный процессор производства компании (почившей на данный момент)Transmeta: CrusoeTM5600. Данный выбор в своих маркетинговых материалах Сони обуславливала наименьшим энергопотреблением. Аида64 сообщает нам следующие характеристики:

667 мегагерц, казалось бы, более чем достаточно для приятной и отзывчивой работы идущей в комплектеWindowsMillennium(наклейка на рамке дисплея гордо сообщает нам, что дизигнд ещё и для 2000Pro), да и 128 мегабайт оперативной памятиSDRдолжно хватать. Однако, 667 мегагерц от Крузо (в честь Робинзона), это совсем не столько же мегагерц отPentium.

Дело в том, что камни от Трансметы построены на микроархитектуреVLIW, что расшифровывается какVeryLongInstructionWord(привет Эльбрусу и Итаниуму). Отсюда забавный казус, что во время разработки Крузо, народная молва заочно причислила серию этих камней к суперкомпьютерам, и ожидала дивное шоу погибелиIntelс ихItanium(известных какMercedна тот момент). В принципе, учитывая звёздный состав трудового коллектива Трансметы, включавший в себя специалистов изSun, Motorola, Nvidia, Cyrix, Compaq, и даже самого Линуса Торвальда, приложившего руку к софтварной части процессора, такой сценарий не казался фантастическим. Среди инвесторов тоже наблюдался вал известных компаний, включавший в себя мировые банки, и даже венчурную компанию сооснователя Microsoft Пола Аллена.

Однако, вернёмся в наше время и посмотрим на то, что этой дримтим удалось воплотить в металле (и коде) на деньги именитых и известных.

Как мы уже разобрали, микроархитектураVLIWнесовместима с х86, но Винда работает. Дело в том, что команда разработки смогла реализовать транслятор инструкций для Крузо, который моментально преобразовывал х86 в те самые очень длинные слова, назвав егоCodeMorphing. Однако, как все мы уже знаем, любая эмуляция тормозит. Вот и мегагерцы Крузо, хоть и работают с х86, и даже делают это исправно, но в пересчете на субъективные ощущения, сравнивать этот процессор нужно с пазднимиPentium2 на ядреDeschutes. Что-то между 300-400Мгц. Со слов компании разработчика, их творение на 667Мгц нужно сравнивать сPentium3Katmai500Мгц.

В принципе, Линолеум ворочается сносно, но некоторые действия, например, отображение превью картинок в проводнике или открытие Ворда вызывают ломящую зубную боль, и не только у центрального процессора. С другой стороны, если рассматривать камень именно с точки зрения энергопотребления, то пазл действительно складывается. Трансмета разработалаSpeedStepдо появленияSpeedStep, и назвала егоLongRun. Более того, в отличии от первой версииIntelSpeedStepгде было возможно только 2 варианта работы камня,LongRunдавал возможность прыгать по всему диапазону. В Цшке профилей электропитания просто куча. Отдельный интерес вызывают пресеты, ограничивающие камень на отметке в 300Мгц, включающие постоянные 667Мгц, и весьма сносный адаптивный режим, который работает на черной магии - он действительно даёт такую производительность, которая нужна вот прямо сейчас, не вызывая заметных тормозов во время начала нагрузки.

Достоверной и логичной информации в одном месте о видеочипе М1 достать мне не удалось, но по нашедшейся из тонны различных источников, его следует отнести к первому поколению ATI RAGE, вышедшему в 1999 году. Которое, в свою очередь, базировалось на ядре Mach64 с некими блоками ускорения 3d и MPEG-1.

Видеокарта имеет на борту 8мб видеопамяти SGRAM, шину на 64 бита, частоту шины памяти 125 мегагерц, и частоту ядра в 83 мегагерца (по крайней мере это то, что мне удалось раскопать). А вот, что показывает Аида:

Субъективно, и исходя из тестов на играх без бенчмарков, его производительность близка к сборке из десктопного Matrox Millenium с 16ти мегабайтной Voodoo 2. Стоит отдельно отметить, что комплектный внешний привод умеет не только в cd, но и в dvd, однако, из-за его неработоспособности, проверить его возможности в воспроизведении видео с этого носителя возможным не представляется. По косвенным признакам, таким как наличие dvd-диска с фильмом в приводе от прошлого владельца, и наличия ведра dvd кодеков и проигрывателей, воспроизводить фильмы он мог. Это позволяет нам надеяться, что данный субноут подойдёт и для некрогейминга. И в целом, это действительно так - все игры из дос, раннего 3dи эпохиWindows9* стартуют, работают и отображаются нормально.

Впрочем, по поводу изображения есть, что отметить отдельно. Как вы могли заметить, монитор у цшки явно не 4:3 и даже не 16:9, так как имеет разрешение 1024:480.

В скейлинг он не умеет- картинка разрешением 640:480 будет не искажена, а будет ровно посередине. Изображение разрешением больше штатного будет просто не помещаться в экран, что делает невозможным игры с разрешением 800:600, например. Меня это совершенно не устраивает, и проходить первую Дьяблу в рамке желания не возникает. Так что, я озадачился поиском игр, которые нативно имеют поддержку различных нестандартных разрешений. К моему великому удовольствию, целых четыре игры, которые висят у меня в списке нужно перепройти и нужно пройти, наконец оказались из таких, и играются вполне приемлемо.

Кроме того, в процессе суточного гуглежа всего, что включало в поисковой раздаче буквы и цифры модели Цшки, я наткнулся на пару видео от состродальцев-по-ноутбуку, в которых они показывали производительность разных моделей различных по годам и начинке при помощи игр. У них я подсмотрел ещё пару тайтлов, работающих нативно на разрешении Цшки.

Ещё одна игра из моих списков показала совсем уж странный результат Томб Рэйдер 3 разрешение выставить даёт, но скейлит изображение, превращая игру про стройную расхитительницу гробниц в юмористическое шоу про хоббитянку, преодолевающую детский развлекательный центр.

До того, как я начал ставить всё подряд из папки Игры Пентиум2 со своего внешнего винта-для-некроты, мною были проведены собственные раскопки, и даже удалось расхитить одну из гро папок на штатном жестком диске. На 16ти гигабайтном простореToshibaMK1516GAPсо скоростью вращения шпинделя 4200 оборотов в минуту

была обнаружена музыкальная капсула времени, содержавшая в себе множество хитов 90х годов. Всего было обнаружено порядка 800 мегабайт отборной (наверное) музыки в формате мп3 с битрейтом 128кбс, и, полагаю, фото бывшего владельца зрелого мужчины актёрской наружности, в белом смокинге на каком-то светском рауте. Но, вернёмся к музыке.

Почему бы и не послушать- здраво рассудил я, ведь у ноутбука, при его размерах, стоит честная пара динамиков, которые очень усердно пытаются делать пользователю Стерио. Правда, из-за размеров, они скорее делают пользователю больно, так как низов не завезли, как факта. Вполне исчерпывающим будет сравнение с 11тым айфоном про у него тоже 2 динамика работают, но звук лучше. Никогда бы не подумал, что у телефонов будут пищалки лучше, чем у чего-либо другого на свете. Впрочем, я не оставил попытки проникнуться хай-фаем, так как в ноуте установлен аудио чип от Ямаха.

И стоило мне только подключить наушники Я никогда в жизни не слышал, что б мои обычные комплектные ифоновски таблетки ТАК играли. Я даже представить себе такого не мог. Я слышал отдельные инструменты, хороший низкий диапазон, отличные средние и высокие. Короче говоря, я потом неделю после покупки слушал музыку через наушники с него. Что меня особенно поразило, так это мощность встроенного усилителя, который без труда и потери качества раскачивал мои полноразмерные Стилсиреасы. А ещё, есть вот такая странная штука:

Осталось только преодолеть сложности, связанные с комплектным внешнимDVDприводом, и можно будет пытаться слушать музыкальные диски, илиDVDс концертами.

Как видно на фото, привод оборудован разъемом питания, и требует отдельного блока питания, которого у продавца не было.Обратите внимание на вольтаж с амперажем.

Собственно, мы плавно переходим к девизу хобби некротехнофилии- боль&страдания. В данном конкретном экземпляре добавляется отдельный подвид страданий - It`saSony!. Привод должен работать из коробки, но этого не делает. Не знаю точно (на данный момент), что в нём накрылось, но точно не сам привод разбирал и менял. Внутри красивого бокса прячется обычный ноутбучный привод с миниPATAразъемом. После рабора, чистки, и подмены привода, пришла в голову мысль о том, что вон то гнездо питания на правом торце тут не просто так.

В подтверждение этой теории высказался один из активных участников известного в узких кругах телеграмм-канала 640 балалаек, у которого привод не моргал диодомPower, а светил постоянно. Пришлось исследовать магазины с универсальными блоками питания. После половины дня потраченного впустую, я просто воткнул универсальный блок питания для ноутбуков, и диод наконец-то загорелся. Правда, только в Винде, не вBIOS.И в ней, наконец-то, стало отображаться вставленное содержимое диска! Правда, при входе в любую подпапку на диске вылеталBSOD. Равно, как и при попытке запуститьautorun.ехе. И после перезагрузки, вBIOSпривод больше не отображался. Эпопея с этим приводом ещё будет продолжаться, так как он мне будет нужен не только для Цшки, но и для второго ультрабука отSony, из времён, когда такого понятия ещё не придумали. Но, вернемся к страданиям.

В мой экземпляр уже кто-то лазил, и я не исключаю того, что и переустанавливал ОС. С одной стороны, у меня есть папки Drivers, но нету логического раздела восстановления на жестком диске. Стоят почти все программы из пакетаSonyдля этого ноутбука, но работают не все. Например, у меня не получилось восстановить из имеющихся на жестком диске дров и софта работоспособность Киллер-фичи всех ранних ноутбуковSonyJogDial. Представляет это собой софт, который управляет фирменной Сонивской навигационной крутилкой. Выглядит менюшка так:

И позволяет в большом количестве ситуаций даже не прикасаться к клавиатуре и трекпоинту. Также, из потерь, у меня были неработающие горячие клавиши. Но, с помощью встроенной авточинилки отSonyфункционал был восстановлен. Остались неработающими Вебкамера (да-да, в 2000м году), разъёмыDVGate, иFireWire.

Последнее обязательно нужно будет оживить, потому как есть возможность связывать 2 ноутбукаSonyэтим интерфейсом.

При учёте того, что в обоих моих Сони есть этот разъём, и нету даже 100мбс сетевой карты, это будет очень полезно.

Помимо прочих попыток восстановить софт, я ещё и решил немного восстановить хард. Первым делом был восстановлен штатный аккумулятор. Мне очень понравился форм-фактор этого субноута, и я искренне негодовал, что не могу перемещаться с ним по квартире, и более того, у меня возникла мысль взять его с собой в отпуск.

Естественно, не как основной ноутбук, но как что-то интересное, на случай ненастной погоды. О, как же я был прав! Глаза соседей по самолёту бесценны, когда видят этот субноут, вальяжно разложенный с проводной мышью на столике в самолёте, и включённой на нёмStarWarsDarkForces2:JediKnight. 2 часа. Естественно, найти в продаже батарею для этого реликта не представлялось возможным, так что я просто нашел человека, умеющего перепаковывать аккумуляторы за полтора часа. Съездил, отдал, попил кофе, и забрал свеженькую.

Счастья не было предела. Далее по списку идёт апгрейд заказал из маленького никому неизвестного китайского магазинчика переходникиide-m.sata, иssdна 128гб. Искренне надеюсь, чтоSSD, как подорожник, решит все проблемы этого аппарата.

Собственно, на этом рассказ про Цшку я закончу, но напомню, что впереди ещё вторая часть с описанием процесса восстановленияSonyPCG-Z505LS, в котором непременно будет принимать участие наша сегодняшняя героиня.

*под катом немного технопорно взрывная схема, и просто схема компонентов.

Взрывная
Компоненты
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru