Информация об изменениях

Сообщение Re[27]: C# - from indians by indians от 06.06.2015 0:20

Изменено 06.06.2015 4:22 greenpci

Здравствуйте, Evgeny.Panasyuk, Вы писали:

G>>А вот List, похоже, тормозит из-за проверки индекса, которую нельзя убрать, с помощью unsafe


Кстати, я забыл поставить unchecked вчера и никто не заметил.

unchecked
{
  for (int i = 0; i < n; i++)
  {
    v[i] = v[i] * u[i];
  }
}


.NET Elapsed: 102.0000 ms
Elapsed = 93.6 ms        
.NET Elapsed: 102.0000 ms
Elapsed = 93.601 ms      
.NET Elapsed: 104.0000 ms
Elapsed = 78.001 ms      
.NET Elapsed: 105.0000 ms
Elapsed = 78 ms          
.NET Elapsed: 101.0000 ms
Elapsed = 78 ms          
.NET Elapsed: 105.0000 ms
Elapsed = 78 ms          
.NET Elapsed: 109.0000 ms
Elapsed = 93.6 ms        
.NET Elapsed: 107.0000 ms
Elapsed = 78.001 ms      
.NET Elapsed: 106.0000 ms
Elapsed = 78 ms          
.NET Elapsed: 107.0000 ms
Elapsed = 78 ms


EP>Не думаю что из-за проверки индекса будет такая разница — branch predictor должен с ней неплохо справится. Желательно посмотреть какой там ASM получается.


Смотри цифры наверху. Но это от unchecked и массива. То есть, немного другой случай.

EP>На MSVC++ если использовать std::vector::at, внутри которого такая же проверка, то там разница на десятки процентов а не в разы.


Согласен. Я это и имел ввиду. На десятки процентов, а то и меньше.

UPD:

не, не обращайте внимание. Сравнил IL, он такой же. Просто моя машина сегодня немножко быстрее работает
Re[27]: C# - from indians by indians
Здравствуйте, Evgeny.Panasyuk, Вы писали:

G>>А вот List, похоже, тормозит из-за проверки индекса, которую нельзя убрать, с помощью unsafe


Кстати, я забыл поставить unchecked вчера и никто не заметил.

unchecked
{
  for (int i = 0; i < n; i++)
  {
    v[i] = v[i] * u[i];
  }
}


.NET Elapsed: 102.0000 ms
Elapsed = 93.6 ms        
.NET Elapsed: 102.0000 ms
Elapsed = 93.601 ms      
.NET Elapsed: 104.0000 ms
Elapsed = 78.001 ms      
.NET Elapsed: 105.0000 ms
Elapsed = 78 ms          
.NET Elapsed: 101.0000 ms
Elapsed = 78 ms          
.NET Elapsed: 105.0000 ms
Elapsed = 78 ms          
.NET Elapsed: 109.0000 ms
Elapsed = 93.6 ms        
.NET Elapsed: 107.0000 ms
Elapsed = 78.001 ms      
.NET Elapsed: 106.0000 ms
Elapsed = 78 ms          
.NET Elapsed: 107.0000 ms
Elapsed = 78 ms


EP>Не думаю что из-за проверки индекса будет такая разница — branch predictor должен с ней неплохо справится. Желательно посмотреть какой там ASM получается.


Смотри цифры наверху. Но это от unchecked и массива. То есть, немного другой случай.

EP>На MSVC++ если использовать std::vector::at, внутри которого такая же проверка, то там разница на десятки процентов а не в разы.


Согласен. Я это и имел ввиду. На десятки процентов, а то и меньше.

UPD:

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