КулЛиб - Классная библиотека! Скачать книги бесплатно
Всего книг - 713397 томов
Объем библиотеки - 1405 Гб.
Всего авторов - 274741
Пользователей - 125104

Последние комментарии

Новое на форуме

Новое в блогах

Впечатления

Влад и мир про Семенов: Нежданно-негаданно... (Альтернативная история)

Автор несёт полную чушь. От его рассуждений уши вянут, логики ноль. Ленин был отличным экономистом и умел признавать свои ошибки. Его экономическим творчеством стал НЭП. Китайцы привязали НЭП к новым условиям - уничтожения свободного рынка на основе золота и серебра и существование спекулятивного на основе фантиков МВФ. И поимели все технологии мира в придачу к ввозу промышленности. Сталин частично разрушил Ленинский НЭП, добил его

  подробнее ...

Рейтинг: +3 ( 3 за, 0 против).
Влад и мир про Шенгальц: Черные ножи (Альтернативная история)

Читать не интересно. Стиль написания - тягомотина и небывальщина. Как вы представляете 16 летнего пацана за 180, худого, болезненного, с больным сердцем, недоедающего, работающего по 12 часов в цеху по сборке танков, при этом имеющий силы вставать пораньше и заниматься спортом и тренировкой. Тут и здоровый человек сдохнет. Как всегда автор пишет о чём не имеет представление. Я лично общался с рабочим на заводе Свердлова, производившего

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
Влад и мир про Владимиров: Ирландец 2 (Альтернативная история)

Написано хорошо. Но сама тема не моя. Становление мафиози! Не люблю ворьё. Вор на воре сидит и вором погоняет и о ворах книжки сочиняет! Любой вор всегда себя считает жертвой обстоятельств, мол не сам, а жизнь такая! А жизнь кругом такая, потому, что сам ты такой! С арифметикой у автора тоже всё печально, как и у ГГ. Простая задачка. Есть игроки, сдающие определённую сумму для участия в игре и получающие определённое количество фишек. Если в

  подробнее ...

Рейтинг: 0 ( 0 за, 0 против).
DXBCKT про Дамиров: Курсант: Назад в СССР (Детективная фантастика)

Месяца 3-4 назад прочел (а вернее прослушал в аудиоверсии) данную книгу - а руки (прокомментировать ее) все никак не доходили)) Ну а вот на выходных, появилось время - за сим, я наконец-таки сподобился это сделать))

С одной стороны - казалось бы вполне «знакомая и местами изьезженная» тема (чуть не сказал - пластинка)) С другой же, именно нюансы порой позволяют отличить очередной «шаблон», от действительно интересной вещи...

В начале

  подробнее ...

Рейтинг: +2 ( 2 за, 0 против).
DXBCKT про Стариков: Геополитика: Как это делается (Политика и дипломатия)

Вообще-то если честно, то я даже не собирался брать эту книгу... Однако - отсутствие иного выбора и низкая цена (после 3 или 4-го захода в книжный) все таки "сделали свое черное дело" и книга была куплена))

Не собирался же ее брать изначально поскольку (давным давно до этого) после прочтения одной "явно неудавшейся" книги автора, навсегда зарекся это делать... Но потом до меня все-таки дошло что (это все же) не "очередная злободневная" (читай

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).

Рассказы о математике с примерами на языках Python и C [Д Елисеев] (fb2) читать постранично, страница - 25

Книга 395988 устарела и заменена на исправленную


 [Настройки текста]  [Cбросить фильтры]

всего лишь 0.5 секунд заняло выполнение вышеприведенного кода на встроенной видеокарте. Для дешевого нетбука с процессором Intel Atom этот же код выполнялся 34 секунды на основном процессоре, и 6 секунд на GPU. Т.е. разница весьма прилична.


Разумеется, еще раз стоит повторить, что “игра стоит свеч” лишь в том случае, если задача хорошо распараллеливается на небольшие блоки, в таком случае выигрыш будет заметен.


Владельцы видеокарт NVIDIA (особенно игровых и достаточно мощных) могут также посмотреть в сторону библиотеки NVIDIA CUDA, расчеты с ее помощью должны быть еще быстрее.

23. Приложение 2 - Быстродействие языка Python

Язык Python очень удобен своей краткостью и лаконичностью, возможностью использования большого количества сторонних библиотек. Однако, один из его минусов, который может быть ключевым для математических расчетов - это быстродействие. Python это интерпретатор, он не создает exe-файл, что разумеется, сказывается на скорости выполнения программы.


Рассмотрим простой пример: рассчитаем сумму квадратов чисел от 1 до 1000000. Также выведем время выполнения программы.


Программа на языке Python выглядит так:


import time

start_time = time.time()


s = 0

for x in range(1,1000001):

s += x*x


print("Sum={}, T={}s".format(s, time.time() - start_time))


Результаты работы:

Sum = 333333833333500000, T = 0.47s


Учитывая, что чисел всего миллион, не так уж и быстро. Попробуем ускорить программу, для этого по возможности используем функции встроенных библиотек. Они зачастую написаны на С, и работают быстрее.


import time

start_time = time.time()


l = range(1000001)

s = sum(x*x for x in l)


print("Sum = {}, T = {}s".format(s, time.time() - start_time))


Результаты работы:

Sum = 333333833333500000, T = 0.32s


Быстрее, но лишь чуть-чуть.


И наконец, призываем “тяжелую артиллерию”: перепишем программу на языке Cи.

Код выглядит так:


#include <stdio.h>

#include <time.h>


int main()

{

clock_t start = clock();


unsigned long long int sum = 0, i;

for(i=1; i<1000001; i++) {

sum += i*i;

}


clock_t end = clock();

printf("Sum = %llu, T = %fs", sum, (float)(end - start)/CLOCKS_PER_SEC);

return 0;

}


Как можно видеть, он ненамного сложнее python-версии. Перед запуском программы, ее надо скомпилировать, выполнив команду C:\GCC\bin\gcc.exe "Appendix-2 - speedTest.c" -o"Appendix-2 - speedTest". Результат очевиден: T = 0.007 секунд. И еще чуть-чуть: добавляем флаг оптимизации по скорости, выполнив команду C:\GCC\bin\gcc.exe "Appendix-2 - speedTest.c" -o"Appendix-2 - speedTest" -O3. Результат: 0.0035 секунд, разница в быстродействии более 100 раз!


Увы, в более сложных задачах такого прироста реально не бывает (в последнем примере очень короткий код, который видимо полностью помещается в кеш-памяти процессора), но на некоторое улучшение быстродействия можно рассчитывать. Хотя переписывание программы - это крайний случай, сначала целесообразно поискать стандартные библиотеки, которые возможно уже решают данную задачу. К примеру, следующий код на языке Python вычисляет сумму элементов массива за 0.1с:

a = range(1000001)

s = 0

for x in a:

s += x

print(s)


Можно использовать встроенную функцию sum:

a = range(1000001)

s = sum(a)

print(s)


Данный код выполняется за 0.02 секунды, т.е. в 5 раз быстрее первого варианта.


Вопрос, что выбрать, на самом деле, не так однозначен - язык Си быстрее, но и сложнее в использовании. Но если заранее известно, что задача состоит в обработке большого набора чисел (например поиск простых чисел или магических квадратов), то может быть более целесообразным сразу писать программу на Си или С++, в принципе это не намного сложнее, а работать программа будет быстрее. С другой стороны, при наличии в программе сложной логики или структур данных, написание ее на Python будет гораздо проще. Поэтому, на практике целесообразно прототип программы делать на языке Python, и только в том случае, если проблема быстродействия становится критичной и не решаемой доступными средствами, переходить на более низкоуровневые средства разработки.


Еще одним важным средством повышения быстродействия является многопоточность. Все современные процессоры имеют более одного ядра, и разбив программу на несколько потоков, можно получить прирост скорости вычислений в 2-4 раза. Более “тяжелой артиллерией” являются рассмотренные выше вычисления с помощью видеокарты, этот способ сложнее в реализации, однако на ряде задач может дать ощутимый прирост в быстродействии. И наконец, самым кардинальным способом могут являться распределенные вычисления, для которых могут задействоваться несколько компьютеров, в качестве примера можно назвать dispy (http://dispy.sourceforge.net).

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