Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Си. Быстрый вывод данных  (Прочитано 2825 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн hon

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1044
  • Ubuntu 12.04 LTS
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #45 : 09 Мая 2014, 22:05:36 »
Заметил странную вещь — и 64-битные вариантыы 1-й версии и последней версии программ исполняются в два раза медленнее, нежели 32-битные. Почему так? Для компиляции 32-битной версии использую ключ -m32.

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #46 : 09 Мая 2014, 23:11:38 »
Заметил странную вещь — и 64-битные вариантыы 1-й версии и последней версии программ исполняются в два раза медленнее, нежели 32-битные. Почему так? Для компиляции 32-битной версии использую ключ -m32.

А процессор то сколько битный, на котором эти проги крутятся?

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #47 : 09 Мая 2014, 23:29:03 »
hon, ну проведи уже нормальный тест скорости с использованием функции printf и без её использования и сравни время выполнения. SergeyIT сделал это неоднократно.

Определи слабое место, из-за которого программа работает медленно. Посмотри, как там работает алгоритм, что там происходит, как это можно улучшить. Там всего-то чуть-чуть изменить осталось.

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #48 : 09 Мая 2014, 23:59:34 »
Раньше помню в играх (под DOS в основном)
для достижения скорости
использовали прямой вывод на адреса видео-памяти.
Сейчас не знаю как с этим делом обстоит.
Но мне кажется при современных процессорах -
- это давно уже не проблема.
TC не сказал, в чем есть суть вопроса.
Скорости обычного СИ думаю вполне достаточно
для большинства приложений.

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #49 : 10 Мая 2014, 00:07:31 »
Señor_Gaga, да он не на экран, а в файл выводит
Извините, я все еще учусь

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #50 : 10 Мая 2014, 00:23:24 »
Señor_Gaga, да он не на экран, а в файл выводит


Все равно не понял в чем проблема?
Пускай в файл. Скорость записи на винт
практически фиксированная.
Сложное форматирование вывода, сериализация??
Или и что-то еще?
Это уже конкретный вопрос и под конкретный язык программирования,
иначе TC точно ответить сложно на его вопрос.

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #51 : 10 Мая 2014, 00:30:39 »
Señor_Gaga, не мудри... у него один printf("%lu\n",i)
Извините, я все еще учусь

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #52 : 10 Мая 2014, 00:52:19 »
Señor_Gaga, не мудри... у него один printf("%lu\n",i)


Ну еще бы кусок его кода посмотреть
. Хотя на Си пишу очень редко и то на 20 строк.

Оффлайн hon

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1044
  • Ubuntu 12.04 LTS
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #53 : 10 Мая 2014, 01:02:07 »
Процессор 64-битный. Система 64-битная.
Бенчмарк 32-битной и 64-битной версий:
$ time ./primepower32 2 100000 3 > /dev/null
real 0m1.699s
user 0m1.528s
sys 0m0.008s
$ time ./primepower64 2 100000 3 > /dev/null
real 0m3.894s
user 0m3.380s
sys 0m0.004s
Разница в скорости в два раза.

unimix, сейчас разница с printf и без printf составляет 1/36 времени. Возможно, тогда я провел бенчмарк неправильно.

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 10 Мая 2014, 01:07:30 от hon »

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Си. Быстрый вывод данных
« Ответ #54 : 10 Мая 2014, 03:54:38 »
Начальный код: https://forum.ubuntu.ru/index.php?topic=243580.msg1922649#msg1922649
Последний код: https://forum.ubuntu.ru/index.php?topic=243580.msg1924127#msg1924127
Оптимиз. код: ведётся работа

Итак, тест с изменением начального значения 2 на 1000000:
start=1000000 max=1100000 power=2 (простые числа, просчёт 100000 чисел)
Начальный код: real 8m12.566s (492,566s)
Последний код: real 0m23.770s
Оптимиз. код: real 0m0.140s

Относительно начального кода, скорость последнего кода увеличена более, чем в 20 раз.
Относительно начального кода, скорость оптимиз. кода увеличена уже более, чем в 3500 раз.

Получается, что время работы начального кода при изменении начального значения увеличилось в 20 раз (с 0m24.596s при start=2 до 8m12.566s при start=1000000). Время работы последнего кода увеличилось в 16 раз (с 0m1.487s при start=2 до 0m23.770s при start=1000000). Время выполнения оптимизированного кода увеличилось всего в 2,5 раза (с 0m0.112s при start=2 до 0m0.280s при start=1000000).

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

Оптимизированный код:
start=4294867295 max=4294967295 power=2 (простые числа, просчёт 100000 чисел)
real 0m4.305s
user 0m4.297s
sys 0m0.012s

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.