ЛитВек: бестселлеры недели
Бестселлер - Джулия Эндерс - Очаровательный кишечник. Как самый могущественный орган управляет нами - читать в ЛитвекБестселлер - Джули Старр - Полное руководство по методам, принципам и навыкам персонального коучинга - читать в ЛитвекБестселлер - Роберт Гэлбрейт - На службе зла - читать в ЛитвекБестселлер - Владимир Николаевич Войнович - Малиновый пеликан - читать в ЛитвекБестселлер - Абрахам Вергезе - Рассечение Стоуна - читать в ЛитвекБестселлер - Евгений Германович Водолазкин - Авиатор - читать в ЛитвекБестселлер - Роберт Тору Кийосаки - Богатый папа... Бедный папа... - читать в ЛитвекБестселлер - Стивен Р Кови - 7 навыков высокоэффективных семей - читать в Литвек
Литвек - электронная библиотека >> Дмитрий Елисеев >> Математика и др. >> Рассказы о математике с примерами на языках Python и C >> страница 12
теоретически можно поговорить по телефону с астронавтами на МКС (в 2015 году британский астронавт Тим Пик ошибся номером, и удивил неизвестную женщину вопросом «Здравствуйте, это Земля?»), а вот для Марса время задержки составит около 15 минут — так что поговорить по телефону или по Скайпу с марсианской колонией было бы невозможно.

18. Сколько вольт в электросети?

Глупый вопрос, подумают многие. Каждый школьник в России знает что напряжение в сети 220 вольт (в США каждый школьник знает что напряжение в сети 110 вольт). Полезно привести такую картинку:


Рассказы о математике с примерами на языках Python и C. Иллюстрация № 46

Кстати, в 90-е годы, когда поездки за границу только становились доступными, некоторые привозили американскую электронику, но работала она зачастую не долго, из-за того что сетевое напряжение отличается в 2 раза. А сейчас даже чуть больше, по российскому стандарту 2003 года, напряжение в сети должно составлять 230 В. Предельно допустимым отклонением считается 10%, т. е. Значения 210-250 В в принципе возможны.

Но вопрос заголовка не в этом. Будем для простоты считать напряжение равным «условным» 220 вольт. Однако подключим осциллограф к электросети, и увидим примерно такую картинку:


Рассказы о математике с примерами на языках Python и C. Иллюстрация № 47
Что это значит? Где «наши» 220 вольт?


Всё просто (хотя и не совсем). Ток в сети переменный — он меняет свое направление с частотой 50 раз в секунду. В отличие к примеру, от батарейки — если на ней написано 1,5 вольта, это значит что на ней действительно 1,5 вольта и направление тока не меняется. Но вернемся к розетке. Ток в нее подается не просто так, а с целью выполнения какой-либо работы. Как измерить работу переменного тока, который в разные моменты времени движется то в одну, то в другую сторону? Для этого было введено понятие действующего напряжения — величины постоянного тока, способного выполнить ту же работу (например нагрев спирали электроплитки). Напряжение, которое показывает осциллограф — называется амплитудным. Эти величины связаны простой формулой:


Рассказы о математике с примерами на языках Python и C. Иллюстрация № 48

220 умноженное на √2, дает как раз 310 В. Разумеется, обычный тестер откалиброван в «бытовых» единицах, в режиме измерения переменного тока он покажет 220 В. А если выпрямить напряжение, например диодным мостиком, то тестер покажет как раз 310 В постоянного тока.

И еще немного про переменный ток. Откуда берется напряжение в 380 вольт? Ток от трансформатора подается по 3-м фазам: это 3 линии, напряжение в которых сдвинуто на разный угол друг относительно друга.

Картинка из Википедии:


Рассказы о математике с примерами на языках Python и C. Иллюстрация № 49

Нулевой провод — общий. В квартиры подается напряжение с одной из фаз, значением в стандартные 220 вольт. Это напряжение называется фазным. Если же используется 3-фазная сеть целиком, то напряжение между двумя фазами, например в точках a и c на рисунке, составляет как раз 380 вольт. Это напряжение называется линейным.

Математически, оба напряжения связаны простой формулой:


Рассказы о математике с примерами на языках Python и C. Иллюстрация № 50

Действительно, 220 * √3 = 380.

Кстати, обрыв нулевого провода в доме — серьезная неисправность, из-за чего в квартиры может быть подано линейное напряжение, составляющее те самые 380 В. Такой случай произошел лично с автором, впрочем ущерб оказался невелик, перегорели лишь настенные электронные часы и несколько блоков питания. Но при отсутствии в доме людей это может привести и к пожару, такие случаи не редкость. Так что тем, у кого в квартире старая проводка, рекомендуется установить в электрощиток устройство защиты от перенапряжения, его цена невелика, и явно дешевле ремонта в квартире.

19. Приложение 1 - Вычисления с помощью видеокарты

Еще 20 лет назад, во времена процессоров 80386, пользователям приходилось покупать математический сопроцессор, позволяющий быстрее выполнять вычисления с плавающей точкой. Сейчас такой сопроцессор покупать уже не надо — благодаря прогрессу в игровой индустрии, даже встроенная видеокарта компьютера имеет весьма неплохую вычислительную мощность. Например, даже бюджетный видеочип Intel Graphics 4600 имеет 20 вычислительных блоков, что превышает количество ядер «основного» процессора. Разумеется, каждое ядро GPU по отдельности слабее CPU, но здесь как раз тот случай, когда количество дает преимущество над качеством. Вычисления с помощью GPU сейчас очень популярны — от майнинга биткоинов до научных расчетов, диапазон ценовых решений также различен, от «бесплатной» встроенной видеокарты до NVIDIA Tesla ценой более 100 тыс. рублей. Поэтому интересно посмотреть, как же это работает.

Есть две основные библиотеки для GPU-расчетов — NVidia CUDA и OpenCL. Первая обладает большими возможностями, однако работает только с картами NVIDIA. Библиотека OpenCL работает с гораздо большим числом графических карт, поэтому мы рассмотрим именно ее.

Основной принцип GPU-расчетов — параллельность вычислений. Данные, хранящиеся в «глобальной памяти» (global & constant memory) устройства, обрабатываются модулями (каждый модуль называется «ядром»), каждый из которых работает параллельно с другими. Модуль имеет и свою собственную память для промежуточных данных (private memory). Так это выглядит в виде блок-схемы:


Рассказы о математике с примерами на языках Python и C. Иллюстрация № 51

Таким образом, если задача может быть разбита на небольшие блоки, параллельно обрабатывающие небольшой фрагмент блока данных, такая задача может эффективно быть решена на GPU.

Рассмотрим пример: необходимо проверить, какие числа в массиве являются простыми. Массив может быть большим, например миллион элементов. Такая задача идеальна для распараллеливания: каждое число может быть проверено независимо от предыдущего.

Для решения такой задачи с помощью OpenCL необходимо выполнить ряд шагов.

1. Написать код микроядра (kernel):

Этот код будет запускаться непосредственно на графических процессорах видеокарты. Код пишется на языке C. В данном примере мы для упрощения храним код прямо в виде строки в программе.

const char *KernelSource = "\n" \

"__kernel void primes(                      \n" \

"  __global unsigned int* input,            \n" \

"  __global unsigned int* output)           \n" \

"{                                          \n" \

"  unsigned int i = get_global_id(0);       \n" \

" //printf(\"Task-%d\\n\", i);              \n" \

" output[i] =