LINUX.ORG.RU

Помогите, пожалуйста, советом студенту!

 , , ,


0

2

Привет, ЛОР. Тут такое дело: я первокурсник и на летнюю практику получил задание сравнить производительность контейнеров STL и Boost на различных задачах и объёмах памяти. Как бы ко всему этому пограмотнее подойти? Как придумать задачи и тесты для них? Какие контейнеры лучше сравнивать?


Для начала составь план. Вот уже есть пункты:

  • STL
    • мелкая задача
      • объём памяти до 256 байт (первичный кэш кэша процессора)
      • объём памяти до 4кБ (страница в x86)
      • объём памяти до 256 кБ (L1)
      • объём памяти до 1 МБ (L2)
      • объём памяти до 10 МБ (обычная память)
    • рядовая пользовательская задача
      • объём памяти до 256 байт (первичный кэш кэша процессора)
      • объём памяти до 4кБ (страница в x86)
      • объём памяти до 256 кБ (L1)
      • объём памяти до 1 МБ (L2)
      • объём памяти до 10 МБ (обычная память)
    • сложная задача
      • объём памяти до 256 байт (первичный кэш кэша процессора)
      • объём памяти до 4кБ (страница в x86)
      • объём памяти до 256 кБ (L1)
      • объём памяти до 1 МБ (L2)
      • объём памяти до 10 МБ (обычная память)
    • математический расчёт
      • объём памяти до 256 байт (первичный кэш кэша процессора)
      • объём памяти до 4кБ (страница в x86)
      • объём памяти до 256 кБ (L1)
      • объём памяти до 1 МБ (L2)
      • объём памяти до 10 МБ (обычная память)
  • BOOST
    • мелкая задача
      • объём памяти до 256 байт (первичный кэш кэша процессора)
      • объём памяти до 4кБ (страница в x86)
      • объём памяти до 256 кБ (L1)
      • объём памяти до 1 МБ (L2)
      • объём памяти до 10 МБ (обычная память)
    • рядовая пользовательская задача
      • объём памяти до 256 байт (первичный кэш кэша процессора)
      • объём памяти до 4кБ (страница в x86)
      • объём памяти до 256 кБ (L1)
      • объём памяти до 1 МБ (L2)
      • объём памяти до 10 МБ (обычная память)
    • сложная задача
      • объём памяти до 256 байт (первичный кэш кэша процессора)
      • объём памяти до 4кБ (страница в x86)
      • объём памяти до 256 кБ (L1)
      • объём памяти до 1 МБ (L2)
      • объём памяти до 10 МБ (обычная память)
    • математический расчёт
      • объём памяти до 256 байт (первичный кэш кэша процессора)
      • объём памяти до 4кБ (страница в x86)
      • объём памяти до 256 кБ (L1)
      • объём памяти до 1 МБ (L2)
      • объём памяти до 10 МБ (обычная память)

Как видишь всё просто.

ziemin ★★ ()

а с преподом пообщаться тебе западло?

anonymous ()
Ответ на: комментарий от intelfx

Да не ворует, просто boost - испытательный полигон для stl. Учил C++11, когда поддержки в stl ещё не было все примеры работали простой заменой namespace std на boost::...

frozenix ★★★ ()
Ответ на: комментарий от frozenix

Ещё один студент штоле? В плане же чётко сказано: проверять варианты.

Да и в задании так же.

Погоди, а STL и Boost вообще отличаются в этом плане? Вроде бы в boost'e, то, что будет в stl.

А. Так ты школьник. Ты не застал войн Boost vs STL. Считай что это одно и то же.

...Просто одно быстрее.

ziemin ★★ ()
Ответ на: комментарий от ziemin

Погоди, где ты взял план?

Уж прости, что битодрочером не являюсь. Тут и правда не ясно, что будет быстрей. У boost'a могут быть лучше алгоритмы, за счет новизны. А вот у STL большую роль играют компиляторы, ибо могут оптимизировать те или иные случаи.

frozenix ★★★ ()
Ответ на: комментарий от ziemin

У каждого компилятора может быть своя версия stl, которая может использовать особенности этого компилятора, благодаря чему и быть быстрее. А аргументы в пользу буста уже были выше.

Так что ещё не ясно. Но синтетический эксперимент показал, что одна из реализаций stl может быть быстрее буста при использовании в определённом алгоритме.

./std  2.11s user 0.02s system 99% cpu 2.132 total
./boost  2.46s user 0.04s system 99% cpu 2.505 total
NeXTSTEP ★★ ()
Ответ на: комментарий от NeXTSTEP
У нас были два тестовых компа, семьдесят пять различных алгоритмов, 5 стандартных математических тестов или benchmark'ов, набор данных, наполовину с астрономической обсерватории, и целое море разных самописных тестов, генераторов случайных чисел и штатный random, а так же данные mpeg, данные jpeg, набор гифок, дамп википедии, и 12 левых дампов сайтов. Не то, чтобы всё это было категорически необходимо для тестирования, но если уж начал тест, то к делу надо подходить серьёзно.
ziemin ★★ ()
Последнее исправление: ziemin (всего исправлений: 1)
Ответ на: комментарий от ziemin

Я отвечал не ТС. Ты говорил, что [тебе] ясно, что быстрее, а мне из любопытства интересно, что тебе ясно.

NeXTSTEP ★★ ()

По идее многое зависит от компилятора и от платформы. Boost, как мне кажется должен обойти STL на больших задачах (где много данных) за счёт более новых алгоритмов с меньшей временной сложностью. Но на мелких STL может быть очень сильно оптимизирован. А вообще задачка дурная.

Сравни, например, boost::ptr_vector<T> и std::vector<shared_ptr<T> > на однопоточной и многопоточной задаче. На однопоточной задаче они примерно равны должны быть, а вот когда несколько потоков boost должен обойти STL.

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

А можно примеры, где временная сложность алгоритмов из stl и из boost различаются?

devsdc ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.