Re: Вызовы Native под Linux - в чём подвох?
От: VladCore  
Дата: 05.10.20 17:46
Оценка: 80 (1)
Здравствуйте, Sinclair, Вы писали:

S>Всем привет.

S>Вчера наконец заборол кросс-платформенную сборку для бенчмарков linq2d.
S>Получил какие-то удивительные результаты.
S>Вкратце, что происходит: я вызываю пару функций из нативной .dll/.so через интероп.
S>На винде dll собирается MS VC.
S>На linux so собирается g++.

S>Замеряем быстродействие там и там — получаем, что плюсовый код на винде чуточку быстрее аналогичного unsafe-кода на дотнете:

S>
S>Intel Core i7-6600U CPU 2.60GHz (Skylake), 1 CPU, 4 logical and 2 physical cores
S>|              CppC4 |  InProcess | InProcessEmitToolchain | p00743.bmp | 125.56 ms | 1.562 ms | 1.385 ms |  0.87 |    0.02 |
S>|           UnsafeC4 |  InProcess | InProcessEmitToolchain | p00743.bmp | 144.90 ms | 2.675 ms | 2.502 ms |  1.00 |    0.00 |
S>|          NaturalC4 |  InProcess | InProcessEmitToolchain | p00743.bmp | 284.03 ms | 3.851 ms | 3.006 ms |  1.96 |    0.03 |
S>

S>На линуксе получаем какой-то сюр:
S>
S>Intel Xeon Platinum 8171M CPU 2.60GHz, 1 CPU, 2 logical and 2 physical cores
S>|             Method |   FileName |      Mean |    Error |   StdDev | Ratio | RatioSD |
S>|------------------- |----------- |----------:|---------:|---------:|------:|--------:|
S>|              CppC4 | p00743.bmp | 330.92 ms | 1.103 ms | 0.921 ms |  2.73 |    0.03 |
S>|          NaturalC4 | p00743.bmp | 318.12 ms | 1.053 ms | 0.822 ms |  2.62 |    0.03 |
S>|           UnsafeC4 | p00743.bmp | 121.07 ms | 1.679 ms | 1.571 ms |  1.00 |    0.00 |
S>

S>Это там интероп такой дорогой, или это я не сумел включить релизную конфигурацию сборки для g++?

-O3/O2 в обычном gcc или llvm пробовал в линуксе?

В linux много базовых классов из netcore прекомпилировано в so майкрософтом и я не видел потерь от этого по сравнению с виндовс на однопоточных числодробительных задачах, хотя многопоточная синхронизация в линуксе в 2 раза медленее, чем в windows
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.