Оцениваем ядра CPU для оптимизации - страница 6

 
Тут собрал из источника информацию о сути инструкций 

Инструкции, которых нет у E5-2670:
BMI(Bit Manipulation Instructions) - наборы инструкций, используемые в процессорах Intel и AMD для ускорения операций, связанных с манипулированием битами. BMI не являются SIMD-инструкциями и работают только с универсальными регистрами процессоров.
Операции манипулирования битами чаще всего используется приложениями, предназначенными для низкоуровневого управления устройствами, обнаружения и исправления ошибок, оптимизации, сжатия и шифрования данных. Использование BMI программами значительно ускоряет эти операции (иногда в несколько раз), однако, код программ становится более сложным для написания программистами. 
Наборы инструкций BMI в процессорах Intel и AMD существенно отличаются.
В процессорах Intel используются пакеты BMI1 и BMI2 (дополнение к BMI1).
В процессорах AMD, кроме BMI1, используются инструкции ABM (Advanced Bit Manipulation), которые вошли в состав пакета SSE4a (в Intel эти инструкции также присутствуют, но реализованы как часть SSE4.2 и BMI1). Кроме того, в процессорах АМД используется набор инструкций TBM (Trailing Bit Manipulation), являющийся дополнением к BMI1.

F16C - набор инструкций, используемый в процессорах архитектуры x86 для ускорения преобразований между двоичными числами половинной точности (16 bit) и стандартными двоичными числами с плавающей запятой одинарной точности (32 bit).
F16C используется как в процессорах AMD, так и в процессорах Intel, значительно расширяя их возможности в плане работы с мультимедийными данными, а также данными других типов.
F16C (16-bit Floating-Point conversion) - набор инструкций, используемый в процессорах архитектуры x86 для ускорения преобразований между двоичными числами половинной точности (16 bit) и стандартными двоичными числами с плавающей запятой одинарной точности (32 bit). По сути, он является расширением основных 128-битных инструкций SSE. 
Использование чисел разной точности в компьютерной технике является компромиссом между точностью и диапазоном представляемых значений, необходимым для обеспечения высокого быстродействия и широкого спектра решаемых задач.
Впервые F16C использован в процессорах AMD в 2009 году, хотя разработан он значительно раньше и был известен под названием CVT16. Изначально CVT16 планировался как часть так и не вышедшего пакета SSE5, в который помимо него должны были войти инструкции XOP и BMI4.
Сегодня набор инструкций F16C используется как в процессорах AMD, так и в процессорах Intel, значительно расширяя их возможности в плане работы с мультимедийными данными, а также данными других типов.

FMA
Набор инструкций процессора, ускоряющий операции умножения-сложения чисел с плавающей запятой. Аббревиатура FMA образована от англ. Fused Multiply-Add, что переводится как умножение-сложение с однократным округлением.
Операции умножения-сложения очень распространены и играют важную роль в работе вычислительной техники. Особенно, когда речь идет о цифровой обработке аналоговых сигналов (двоичное кодирование видео, звука и другие подобные операции). В связи с этим, поддержка инструкций FMA внедрена не только в центральные процессоры, но и в графические процессоры многих современных видеокарт.

Инструкции, которых нет у всех, кроме  i7-8700:
TSX (Transactional Synchronization eXtensions) - набор инструкций многоядерного процессора, разработанный компанией Intel, который повышает эффективность взаимодействия ядер между собой при осуществлении общего доступа к одним и тем же данным и, в конечном счете, увеличивает общую производительность компьютера.

MPX (Memory Protection Extensions) - технология, обеспечивающая повышенную защиту компьютера от вирусных и других угроз, использующих механизм переполнения буфера.
Процессор получает возможность дополнительно проверять границы буферов стека и буферов кучи перед доступом к памяти, чтобы приложение, обращающееся к памяти, имело доступ лишь к той ее области, которая ему назначена. Вследствие этого хакеру или вредоносной программе становится значительно сложнее через память "подставлять" процессору свой код.

SGX (Software Guard Extensions) - набор инструкций, разработанный компанией Intel и используемый в ее процессорах, начиная с архитектуры Skylake.
SGX позволяет организовать защищённые участки кода и данных (так называемые "анклавы"), обеспечивающие высокий уровень защиты работающих с ними программ от вредоносных приложений и хакерских атак.


BMI2 (дополнение к BMI1).

Так как MPX и SGX - это про защиту, то рискну предположить, что компилятор активно использует инструкции/технологии BMI2 и есть эффект от TSX, что менее вероятно.

 
Алексей, мне кажется более эффективнее будет изучить как писать код под OpenCL, и прикупить для этого хорошую карточку.
OpenCL на карте в априори будет намного эффективнее нескольких процессоров. 
И забить на этот геморой выявления сравнений процессоров.
Но да, надо разобраться как писать код под OpenCL.
Ренат где то писал статью об этом, сам я не читал её и на сколько она информативна не могу сказать, всё сам не как не доберусь её почитать.
 
Roman:
Алексей, мне кажется более эффективнее будет изучить как писать код под OpenCL, и прикупить для этого хорошую карточку.
OpenCL на карте в априори будет намного эффективнее нескольких процессоров. 
И забить на этот геморой выявления сравнений процессоров.
Но да, надо разобраться как писать код под OpenCL.
Ренат где то писал статью об этом, сам я не читал её и на сколько она информативна не могу сказать, всё сам не как не доберусь её почитать.

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

И потом, не всегда OpenCL эффективен, так я сравнивал на ПО от Яндекс (CatBoost) карту 1060 и процессор FX-8350 - оказалось, что процессор в два раза быстрей, а если такая тенденция, то экономически выгодней купить мощный процессор, чем пяток 1080i, от которых будет конечно эффект, но дорого ж... в общем не однозначно и не для всех решение.

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

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

И потом, не всегда OpenCL эффективен, так я сравнивал на ПО от Яндекс (CatBoost) карту 1060 и процессор FX-8350 - оказалось, что процессор в два раза быстрей, а если такая тенденция, то экономически выгодней купить мощный процессор, чем пяток 1080i, от которых будет конечно эффект, но дорого ж... в общем не однозначно и не для всех решение.

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


 
Roman:

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


На сколько я знаю, красные просто умеют работать с double, а зеленые нет - это я знаю. Но, в машинном обучение (CatBoost) там заточка на операции сравнения, которые по идеи должны работать так же быстро как у красных и зеленых. А красные не поддерживаются CatBoost, увы.

В любом случае, я сам это не осилю, а исполнителей найти оказалась не так то просто за адекватную цену и пониманием дела.

 

Мне подсказали, что код можно ускорить за счет применения перечисления switch.

Было так:

         if(Type_Poisk_Tree==Tree_Buy_Filter || Type_Poisk_Tree==Tree_Sell_Filter || Type_Poisk_Tree==Tree_Buy || Type_Poisk_Tree==Tree_Sell)
           {
            if(Test_P>=1000 && Test_P<5000)
              {
               if(Test_P<2500)
                 {
                  if(Test_P==1000)if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; //(0.4810127 0.3037975 0.2151899)
                  if(Test_P==1001)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; //(0.4400657 0.4072250 0.1527094)
                  if(Test_P==1002)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; //(0.3739837 0.5121951 0.1138211)
                  if(Test_P==1003)if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; //(0.3390706 0.4647160 0.1962134)
                //Ещё 70к сравнений
                }

А стало теперь так:

         if(Type_Poisk_Tree==Tree_Buy_Filter || Type_Poisk_Tree==Tree_Sell_Filter || Type_Poisk_Tree==Tree_Buy || Type_Poisk_Tree==Tree_Sell)
           {
                  switch(Test_P)
                    {
                     case 1000: if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; break; //(0.4810127 0.3037975 0.2151899)
                     case 1001: if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; break; //(0.4400657 0.4072250 0.1527094)
                     case 1002: if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; break; //(0.3739837 0.5121951 0.1138211)
                     case 1003: if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; break; //(0.3390706 0.4647160 0.1962134)
                     //ещё 70к сравнений
                   }

По первым прикидкам, FX-8350 стал работать быстрей процентов на 30, а вот процессоры линейки Phenom II стали работать примерно в 3 раза быстрей! Тесты для сравнения сделаю чуть позже, когда машины освободятся от оптимизации.

Прикладываю новую версию советника Tree_Brut_TestPL, добавил "_Fast" в названии, прошу и его протестировать - очень интересно на каких архитектурах какой будет прирост. Есть надежда, что данные исследования помогут улучшить компилятор ME.

Файлы:
 

Мне поступили дополнительные данные от участника форума Fast528 (сейчас у него нет возможности писать на форуме)

Ryzen 2700 без разгона, память 3333

Tree_Brut_TestPL 8 ядер 16 потоков

2019.08.13 10:24:14.813 Tester optimization finished, total passes 11
2019.08.13 10:24:14.824 Statistics optimization done in 1 minutes 56 seconds
2019.08.13 10:24:14.824 Statistics shortest pass 0:01:13.337, longest pass 0:01:20.403, average pass 0:01:15.853
2019.08.13 10:24:14.824 Statistics 8731 frames (3.43 Mb total, 412 bytes per frame) received
2019.08.13 10:24:14.824 Statistics local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2019.08.13 10:24:14.864 Tester 11 new records saved to cache file 'tester\cache\Tree_Brut_TestPL.30.E415F787BBBCE67C438526613B41CB4F.opt'

Tree_Brut_TestPL_F 8 ядер 16 потоков

2019.08.13 10:24:14.824 Statistics 8731 frames (3.43 Mb total, 412 bytes per frame) received
2019.08.13 10:31:30.562 Tester optimization finished, total passes 11
2019.08.13 10:31:30.573 Statistics optimization done in 2 minutes 32 seconds
2019.08.13 10:31:30.573 Statistics shortest pass 0:02:12.689, longest pass 0:02:31.529, average pass 0:02:21.243
2019.08.13 10:31:30.573 Statistics 11000 frames (4.32 Mb total, 412 bytes per frame) received
2019.08.13 10:31:30.573 Statistics local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2019.08.13 10:31:30.626 Tester 11 new records saved to cache file 'tester\cache\Tree_Brut_TestPL_F.30.E415F787BBBCE67C438526613B41CB4F.opt'

Данный тест не полный, так как нужен вариант и с 8 ядрами и 8 потоками за счет активации 8 агентов, а кроме того на вкладке "Оптимизация" следует указать 16 проходов - по числу потоков (Старт 0, Шаг 1, Стоп 15).

При проведении повторного теста не забывайте чистить кэш, который находится ..\Tester\cache

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

 

К сожалению редактировать первое сообщение уже не могу, поэтому рейтинг тут размещаю

 

Вот результат fx8320e частота 4ГГц, память 1866 2 канала, 2 ранг. 

Tree_Brut_TestPL_F_Fast

4 агента 8 проходов

DF      0       13:27:26.728    Core 4  pass 6 returned result 1001000.00 in 0:00:28.342
HL      0       13:27:26.732    Core 1  pass 2 returned result 1001000.00 in 0:00:28.414
PE      0       13:27:26.844    Core 3  pass 4 returned result 1001000.00 in 0:00:28.476
PJ      0       13:27:26.936    Core 2  pass 0 returned result 1001000.00 in 0:00:28.619
QP      0       13:27:53.132    Core 4  pass 7 returned result 1001000.00 in 0:00:26.406
KI      0       13:27:53.219    Core 1  pass 3 returned result 1001000.00 in 0:00:26.489
MN      0       13:27:53.337    Core 3  pass 5 returned result 1001000.00 in 0:00:26.495
ND      0       13:27:53.571    Core 2  pass 1 returned result 1001000.00 in 0:00:26.637
OR      0       13:27:53.571    Tester  optimization finished, total passes 8
OF      0       13:27:53.582    Statistics      optimization done in 0 minutes 57 seconds
PI      0       13:27:53.582    Statistics      shortest pass 0:00:26.406, longest pass 0:00:28.619, average pass 0:00:27.484
NM      0       13:27:53.582    Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
HL      0       13:27:53.582    Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

8 агентов 8 проходов

DI      0       13:30:59.789    Core 2  pass 1 returned result 1001000.00 in 0:00:33.072
KN      0       13:30:59.887    Core 1  pass 0 returned result 1001000.00 in 0:00:33.177
PD      0       13:31:00.132    Core 3  pass 2 returned result 1001000.00 in 0:00:33.422
PM      0       13:31:00.245    Core 4  pass 3 returned result 1001000.00 in 0:00:33.531
RR      0       13:31:00.590    Core 8  pass 7 returned result 1001000.00 in 0:00:32.922
IH      0       13:31:00.615    Core 5  pass 4 returned result 1001000.00 in 0:00:33.197
CQ      0       13:31:00.981    Core 6  pass 5 returned result 1001000.00 in 0:00:33.506
GF      0       13:31:01.111    Core 7  pass 6 returned result 1001000.00 in 0:00:33.614
CS      0       13:31:01.111    Tester  optimization finished, total passes 8
KG      0       13:31:01.122    Statistics      optimization done in 0 minutes 35 seconds
RN      0       13:31:01.122    Statistics      shortest pass 0:00:32.922, longest pass 0:00:33.614, average pass 0:00:33.305
NO      0       13:31:01.122    Statistics      8000 frames (3.14 Mb total, 412 bytes per frame) received
HJ      0       13:31:01.122    Statistics      local 8 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

на 8 агентах почти в 2 раза быстрее

 
Maxim Romanov:

Вот результат fx8320e частота 4ГГц, память 1866 2 канала, 2 ранг. 

Tree_Brut_TestPL_F_Fast

4 агента 8 проходов

8 агентов 8 проходов

на 8 агентах почти в 2 раза быстрее

Спасибо, но добавьте для оценки результаты Tree_Brut_TestPL_F и Tree_Brut_TestPL !

Причина обращения: