2010-12-02 3 views
0

Кто-нибудь знает хороший способ профилировать алгоритм сортировки в java (последовательный и fork join)? потому что время работы слишком короткое (сортировка списка размер 5000 ..), System.nanoTime() кажется не работает должным образом.Профиль java параллельная/последовательная сортировка

Я планирую запустить такой же тест много раз (1000) и избавиться от первых 100 результатов (исключая проблему компилятора HotSpot) и выполнять среднее время работы с использованием System.nanoTime(). Любое предложение по этому вопросу?

Большое спасибо!

Могу ли я так поступать?

double count = 0; 
double start, end; 
for(int r = 0; r < warmup; r++) { 
    // do test 
} 
for(int t = 0; t < runs; t++){ 
    start = System.nanoTime(); 
    // do test 
    end = System.nanoTime(); 
    count += start - end; 
} 
double avg = count/avg 

ответ

1

Я могу заверить вас, что nanoTime() действительно работает, и если вы хотите избежать разминки горячих точек, вам нужно запустить его в 10K раз. Вы должны обнаружить, что что-то вроде 5K-элемента довольно быстро и даже 1K-тест не очень-то. Вам нужно написать тест, который дает результаты, способные воспроизводить. Если вы этого не сделали, вам нужно исправить тест, потому что это не очень хорошо.

Предлагаю вам попробовать и посмотреть, какие результаты вы получите.

На старом компьютере примерно 5K случайных значений int принимает около 500 человек. Примечание: сортировка отсортированного массива не даст вам такого же результата. (так что вы не можете сортировать один и тот же массив каждый раз)

Простой способ запустить тест определенное количество раз, игнорируя первые N прогонов.

long start = 0; 
for(int r = -warmup; r < runs; r++) { 
    if (r == 0) start = System.nanoTime(); 
    // do test 
} 
long avg = (System.nanoTime() - start)/runs; 
+0

Вы имеете в виду 10K раз, сортируя один и тот же список или избавляясь от первого результата 10k run? спасибо – Ang 2010-12-02 22:05:39

2

Если реальное время работы слишком короткое для бенчмарка, вероятно, не стоит его оптимизировать.

Если вы только сортируете списки из 5000 элементов, вероятно, лучше всего пойти с самым простым решением, а не преждевременно оптимизировать его. Если ваши списки значительно больше, вы должны провести сравнительный анализ в этих больших списках вместо небольших.

+0

Знаете ли вы хороший способ, если мне нужна такая информация? спасибо – Ang 2010-12-02 22:06:04

1

Начать сортировку большего размера. Я бы сказал, что 50 000 000 элементов более разумны, если вы пытаетесь сравнить контрольные времена.

Смежные вопросы