Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Был тут на одном собеседовании, задали вопрос, почему еще ArrayList быстрее LinkedList 
:(
    Опции темы
w1nd
Дата 18.6.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(LSD @  18.6.2008,  14:00 Найти цитируемый пост)
А вообще написать тест который бы продемонстрировал это, дело 5 минут.

Написать тест для воспроизведения абсолютно неконтролируемого со стороны явления?

Это сообщение отредактировал(а) w1nd - 18.6.2008, 14:25


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
LSD
Дата 18.6.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(w1nd @  18.6.2008,  15:24 Найти цитируемый пост)
Написать тест для воспроизведения абсолютно неконтролируемого со стороны явления?

Какие дикие фантазии smile 

Тест который продемонстрирует, что итерация по массиву по порядку идет быстрей, чем итерация в случайном порядке (уж порядок итерации мы контролировать то можем, я надеюсь smile ).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 18.6.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(LSD @  18.6.2008,  17:04 Найти цитируемый пост)
Какие дикие фантазии smile 

Ваши - протестировать влияние работы менеджера памяти ОС на скорость итерирования списка ;)

Цитата(LSD @  18.6.2008,  17:04 Найти цитируемый пост)
Тест который продемонстрирует, что итерация по массиву по порядку идет быстрей, чем итерация в случайном порядке <...>

Ну вот вам черновик:

Код
import java.util.Random;

public class ListSpeedTest {

    public static void main(String[] args) {
        int count = 100000000, array[] = new int[count], indexes[] = new int[count];
        Random random = new Random();
        
        for (int i = 0; i < count; i++) {
            array[i] = random.nextInt(count);
        }
        
        if (false) { // тут переключаем
            for (int i = 0; i < count; i++) {
                indexes[i] = random.nextInt(count);
            }
        }
        else {
            for (int i = 0; i < count; i++) {
                indexes[i] = i;
            }
        }
        
        long time = System.currentTimeMillis();
        
        for (int i = 0, j; i < count; i++) {
            j = array[indexes[i]];
        }
        
        System.out.printf(
            "Elapsed time: %d ms\n", System.currentTimeMillis() - time
        );
    }
    
}

Что я упустил?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
LSD
Дата 19.6.2008, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(w1nd @  18.6.2008,  22:49 Найти цитируемый пост)
Ваши - протестировать влияние работы менеджера памяти ОС на скорость итерирования списка ;)

Я такого не писал, а если кто-то там такое узрел, это его личное воображение подсобило smile


Цитата(w1nd @  18.6.2008,  22:49 Найти цитируемый пост)
Что я упустил? 

Зачем вообще нужно 2 массива? Тут уже одновременно идут 2 итерации, 2 последовательных или 1 последовательная и 1 непоследовательная.
Код

import java.util.Random;

public class Test
{
  public static final int SIZE = 16 * 1024 * 1024;
  public static final int[] DATA = new int[SIZE];
  public static final Random rnd = new Random();

  public static void main(String[] args)
  {
    iterSeq();
    iterRnd();

    long seqTime = System.currentTimeMillis();
    iterSeq();
    seqTime = System.currentTimeMillis() - seqTime;

    long rndTime = System.currentTimeMillis();
    iterRnd();
    rndTime = System.currentTimeMillis() - rndTime;

    System.out.println("Sequential time: " + seqTime + " ms");
    System.out.println("Random time:     " + rndTime + " ms");
  }

  private static void fill()
  {
    for(int i = 0; i < SIZE; i++)
      DATA[i] = rnd.nextInt();
  }

  private static long iterSeq()
  {
    long result = 0L;
    for(int i = 0; i < SIZE; i++)
    {
      rnd.nextInt(SIZE);
      result += DATA[i];
    }
    return result;
  }

  private static long iterRnd()
  {
    long result = 0L;
    for(int i = 0; i < SIZE; i++)
    {
      result += DATA[rnd.nextInt(SIZE)];
    }
    return result;
  }
}

у меня получилась разница во времени 4 раза.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 19.6.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(LSD @  19.6.2008,  12:46 Найти цитируемый пост)
Я такого не писал, а если кто-то там такое узрел, это его личное воображение подсобило smile

Вы предложили написать тест в ответ на реплику про релокацию памяти. 

Цитата(LSD @  19.6.2008,  12:46 Найти цитируемый пост)
Тут уже одновременно идут 2 итерации, 2 последовательных или 1 последовательная и 1 непоследовательная.

По вашей логике в моём тесте в вариант с последовательным итерированием должен работать всегда быстрее.

Цитата(LSD @  19.6.2008,  12:46 Найти цитируемый пост)
у меня получилась разница во времени 4 раза.

На моей рабочей машинке разница составляет 2 (P4); на домашней (CORE2; 64-битная jvm) разницы нет вообще. Имеете ещё что-то рассказать про кэш процессора?

Это сообщение отредактировал(а) w1nd - 19.6.2008, 15:06


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Metal_Heart
Дата 19.6.2008, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

Репутация: 4
Всего: 12



Ну, чтож интересно, потестим, итак:
Код

public static final int SIZE = 1 * 1024 *1024;


Цитата

Sequential time: 172 ms
Random time:     297 ms


Машинка:
Intel P4 - 2.8ГГц 
RAM 1Гб


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
Platon
Дата 19.6.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Celeron 2GHz RAM 1Gb
Цитата

Sequential time: 859 ms
Random time:     2797 ms

Вот ничего себе! интересный факт.

Добавлено через 38 секунд
размер 8 мегабайт
PM MAIL ICQ   Вверх
LSD
Дата 19.6.2008, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(w1nd @  19.6.2008,  16:05 Найти цитируемый пост)
Вы предложили написать тест в ответ на реплику про релокацию памяти.

Эта фраза была сказана к дискуссии о кэше вообще, она даже специально отделена. Ну а кто как воспринял... smile


Цитата(w1nd @  19.6.2008,  16:05 Найти цитируемый пост)
По вашей логике в моём тесте в вариант с последовательным итерированием должен работать всегда быстрее.

Так у меня и быстрее: 63 миллисекунды против 1406 (я уменьшил размер до 20 000 000). Я неправильно тест запускаю? smile


Цитата(w1nd @  19.6.2008,  16:05 Найти цитируемый пост)
На моей рабочей машинке разница составляет 2 (P4); на домашней (CORE2; 64-битная jvm) разницы нет вообще. Имеете ещё что-то рассказать про кэш процессора?

Пора проводить исследование на тему: "Влияние скепсиса на CPU, на примере Sun JRE" smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
LSD
Дата 19.6.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Погонял тест на Celeron M 900 MHz (до этого был P4 3.0 GHz) получил:
Мой тест:
Цитата
Sequential time: 2593 ms
Random time:     7485 ms


Тест w1nd
Цитата
Elapsed time: 234 ms
Elapsed time: 2781 ms



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 19.6.2008, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(LSD @  19.6.2008,  17:56 Найти цитируемый пост)
Так у меня и быстрее: 63 миллисекунды против 1406 (я уменьшил размер до 20 000 000). Я неправильно тест запускаю?

Как пить дать smile 

Цитата(LSD @  19.6.2008,  17:56 Найти цитируемый пост)
Пора проводить исследование на тему: "Влияние скепсиса на CPU, на примере Sun JRE"

Пора уже понять, что прогнозировать такие вещи, как поведение кэша, бессмысленно и бесполезно. Кстати, на 32-битной JRE на домашнем CORE2 в моём тесте (где не меряется заодно скорость JIT и вероятность перекомпиляции "горячего" метода) результаты аналогичны полученным на 64-битной (98 +- 10 ms).


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
LSD
Дата 20.6.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(w1nd @  20.6.2008,  00:35 Найти цитируемый пост)
Пора уже понять, что прогнозировать такие вещи, как поведение кэша, бессмысленно и бесполезно.

Думаю стоит эту мысль донести до этих ребят, а то они мучаются, что-то пытаются прогнозировать и оптимизировать, по ночам поди не спят smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 20.6.2008, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(LSD @ 20.6.2008,  09:46)
Думаю стоит эту мысль донести до этих ребят, а то они мучаются, что-то пытаются прогнозировать и оптимизировать, по ночам поди не спят smile

А у нас в квартире газ. Содержательный разговор, не правда ли? Ваша ссылка вообще к чему?


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
serger
Дата 20.6.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 19.6.2007
Где: Ижевск

Репутация: 1
Всего: 5



Pentium 4 3ГГц

Sequential time: 1453 ms
Random time:     4047 ms
отношение 2.78

Sequential time: 1469 ms
Random time:     4219 ms
отношение 2.87

Sequential time: 1469 ms
Random time:     4469 ms
отношение 3.04

среднее отношение 2.9

Паралельно закрывал/открывал netbeans
Sequential time: 2468 ms
Random time:     6125 ms
отношение 2.48

Sequential time: 2438 ms
Random time:     6078 ms
отношение 2.49

среднее отношение 2.49

===============

Elapsed time: 343 ms
Elapsed time: 344 ms
Elapsed time: 343 ms
Среднее: 343 ms

Паралельно закрывал/открывал netbeans
Elapsed time: 656 ms
Elapsed time: 656 ms
Elapsed time: 750 ms
Elapsed time: 719 ms
Среднее: 695 ms

отношение 2.02

Random^

Elapsed time: 11000 ms
Elapsed time: 11015 ms
Elapsed time: 11016 ms
Среднее: 11015 ms (Пусть!)

Паралельно закрывал/открывал netbeans
Elapsed time: 12672 ms
Elapsed time: 11110 ms
Elapsed time: 13375 ms
Elapsed time: 12641 ms
Среднее: 12450 ms

отношение 1.13



--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
LSD
Дата 20.6.2008, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(w1nd @  20.6.2008,  11:45 Найти цитируемый пост)
Ваша ссылка вообще к чему? 

К тому, что эти ребята пишут компилятор который оптимизирует код с учетом поведения процессора (в том числе и кэша). И при этом они не считают свою работу бессмысленной и бесполезной. Вот я и посоветовал пойти и просветить их
Цитата(w1nd @  20.6.2008,  00:35 Найти цитируемый пост)
что прогнозировать такие вещи, как поведение кэша, бессмысленно и бесполезно.



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
w1nd
Дата 20.6.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(LSD @  20.6.2008,  15:25 Найти цитируемый пост)
К тому, что эти ребята пишут компилятор который оптимизирует код с учетом поведения процессора (в том числе и кэша). И при этом они не считают свою работу бессмысленной и бесполезной.

Не путайте <непроизносимое> с пальцем. Я где-нибудь говорил, что этот совет предназначен разработчикам КОМПИЛЯТОРОВ? Нет, не говорил. А что вы тут пытаетесь доказать?

Эти ребята (а также многие другие) сами скажут, что прогнозировать работу кэшей и блоков предсказания ветвлений не нужно и не полезно. Потому что это делает КОМПИЛЯТОР, если умеет. А всевозможные заточки непосредственно в коде в своё время очень плохо послужили пользователям процессоров P4, когда те вышли, ибо часть софта работала медленее не просто по причине отсутствия оптимизации под P4, а ещё и по причине оптимизации под P3.




--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0984 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.