Здравствуйте, SuhanovSergey, Вы писали:
SS>Направления оптимизации:
SS>1. Параллелизм
SS>2. Убирание лишних проверок (unsafe)
SS>3. Ускорение чтения входного массива путём итерирования по словам (машинным) вместо байтов
SS>Решения для 1 и 2 уже рассматривали. Привожу тесты, которые реализуют 2+3 и 1+2+3
SS>Результаты:
SS>SS> Simple: 155ms : 820658
SS> Parallel For: 60ms : 820658
SS> Words: 89ms : 820658
SS> Words parallel: 35ms : 820658
SS>
Выполнение на андроиде для размера буфера 1382400 byte
Simple: 109ms : 10951
Parallel For: 170ms : 10951
UnsafeSimple: 96ms : 10951
Simple Step 2: 66ms : 10951
Words: 39ms : 10951
Words parallel: 78ms : 10951
Measure("Simple Step 2", () =>
{
int[] result = new int[256];
for (int i = 0; i < data.Length; i++,i++)
{
result[data[i]]++;
}
return result.Max() + result[0];
});
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>