Здравствуйте, 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, он такой же. Просто моя машина сегодня немножко быстрее работает
Тем более, что калькуляция вообще не там происходит.