|
6 / 5 / 2
Регистрация: 04.01.2013
Сообщений: 56
|
||||||
Время расчета на нескольких процессорах в 30-40 раз больше чем на одном27.04.2015, 15:37. Показов 1584. Ответов 12
Метки нет (Все метки)
Нужно написать программу для параллельных вычислений на нескольких процессорах. На одном считает очень долго.
Начал с простого примера взятого из интернета и переделанного под себя.
В результате время выполнения на 4-8 процессорах в 40-60 раз дольше чем на одном. Подскажите в чем проблема?
0
|
||||||
| 27.04.2015, 15:37 | |
|
Ответы с готовыми решениями:
12
MPI: программа на нескольких процессорах работает не как на одном Функция: Написать функцию next(t, t1, d), которая присваивает параметру t1 время на d секунд больше, чем время t. Монета брошена 800 раз. Найти вероятность того, что «герб» выпадет на 20 раз больше, чем решка |
|
6 / 5 / 2
Регистрация: 04.01.2013
Сообщений: 56
|
|
| 27.04.2015, 18:13 [ТС] | |
|
Область памяти должна быть общей, потому что для каждой точки рисунка (двумерный массив) нужно произвести отдельные вычисления от нескольких выделенных точек и результата для данной точки суммировать.
numpy навряд ли поможет, потому что нужно делать кучу специфических вычислений
0
|
|
|
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
|
|
| 27.04.2015, 18:40 | |
|
hexadecimal, Ты не прав, все вычисления такого рода нужно сделать через numpy и подобные библиотеки.
Посмотри вот это видео, там много полезной инфы https://moscowdjango.ru/meetup... ython-why/ + почитай стати на которые он ссылается. Добавлено через 1 минуту hexadecimal, Кстати стоит заметить, что все библиотеки связанные с научными вычислениями или графикой используют numpy и подобные. Посмотри на пример на matplotlib.
0
|
|
|
|
|||
| 28.04.2015, 07:30 | |||
|
Создание своих копий областей памяти должно сработать в силу того, что задачу распараллелить возможно. А смысл - в более эффективном использовании кэша процессора L3, есть такой нюанс. А если вы будете использовать numpy - скорость увеличится не только за счёт перехода на уровень нативного кода, но и за счет кэша процессора в целом.
0
|
|||
|
6 / 5 / 2
Регистрация: 04.01.2013
Сообщений: 56
|
|
| 28.04.2015, 09:48 [ТС] | |
|
dondublon, попробую объяснить.
Есть изображение (карта), на ней выделены сколько-то точечных объектов (objs = [obj1, obj2, ...]). Для каждого объекта (obj) просчитаны несколько различных вариантов сценариев (scripts = [script1, script2, ....]). Для каждого сценария получен массив некоторых значений (resultArr = [100,90,80, ..., 0]), которые зависят от расстояния. Сначала создаем массив (arr = [[0,0,0,...],[0,0,0,...],...]) с размерами изображения (w, h) и забиваем его нулями. Потом для каждого точечного объекта (obj) для каждого сценария (script) Это упрощенно. Значения могут меняться в зависимости от направления (angl = 0... 2*pi), может быть направлено только в определенную сторону (в остальные стороны = 0), объект может находится в замкнутом пространстве какой-то формы (shape = [p1, p2, p3, p4 ... p1]) и необходимо определять находится точка рисунка внутри shape или на определенном расстоянии от shape, также нужно отсекать области для сценариев (script) rect = ((Xmin,Ymin),(Xmax,Ymax)) (для одних сценариев максимальное расстояние м.б. 10 пк для других выходить за пределы изображения) и др.для каждой точки на рисунке (x,y) определяем расстояние до точечного объекта. Для нескольких точечных объектов (5-10-20) расчет происходит быстро. Проблемы возникают для линейных объектов особенно протяженных на больших изображениях. Эти объекты мы делим на участки (попиксельно) и получаем сотни и тысячи точечных объектов. В этом случае расчет занимает уже десятки минут или несколько часов. Для сокращения времени этого расчета и нужно распараллелить вычисления. Например, по объектам или по строкам. Попробую вечером накидать пример.
0
|
|
|
|
|||||||
| 28.04.2015, 11:29 | |||||||
|
hexadecimal, и всё-таки - не вижу у вас ничего специфичного. Сплошная арифметика. numpy c этим справляется на ура. Главная сложность - в формировании массивов.
Например, я у вас вижу вычисление расстояния в цикле, многократно повторяется. Питоновские циклы - медленные. Начать переписывать можно с этого. Добавлено через 14 минут Например, вот этот кусок:
Да, чё-та я не подумал. Так неоптимально, много повторяющихся вычислений. Но я показал общее направление, если интересно - спрашивайте.
0
|
|||||||
|
6 / 5 / 2
Регистрация: 04.01.2013
Сообщений: 56
|
|
| 04.05.2015, 22:23 [ТС] | |
|
Дошли, наконец-то, руки написать скрипт. Вот что получилось (см. аттач).
На Win7 x86 на 2-х процессорах считает немного быстрее чем на одном (примерно 3 мин вместо 4). На Win7 x64 выдает ошибку " File "....\Python\27\lib\pickle.py", line 748, in save_global (obj, module, name)) pickle.PicklingError: Can't pickle <type 'ImagingCore'>: it's not found as __builtin__.ImagingCore" dondublon, для nampy здесь слишком много логики (принадлежность многоугольнику, расстояние до многоугольника, направление). Не совсем представляю как его применить для данного случая
0
|
|
|
|
|||||||||||
| 05.05.2015, 07:58 | |||||||||||
|
Функция принадлежности точки многоугольнику, на numpy.
Давно собирался написать для себя, кстати, да всё руки не доходили. Вот, подвернулся случай ![]()
2
|
|||||||||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
| 05.05.2015, 18:21 | |
|
dondublon, в 8 строке целочисленное деление при целочисленных координатах и потенциальное деление на 0.
Добавлено через 15 минут И ещё, кажется, если попадётся точка с x = p[0], можно получить сюрприз.
0
|
|
|
|
|
| 05.05.2015, 20:58 | |
|
Насчёт строки 8 - ну так не надо держать координаты целыми. А деления на 0 там не будет, потому что в строке 6 так сформирован массив. Если x1==x0, то этот отрезок не попадёт в in_trap_x.
Если x==p[0], то всё нормально, там просто 0 будет.
1
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||
| 06.05.2015, 18:48 | ||
|
0
|
||
|
|
|
| 06.05.2015, 22:11 | |
|
Somebody, так уж вышло
0
|
|
| 06.05.2015, 22:11 | |
|
Помогаю со студенческими работами здесь
13
На нескольких ПК - браузер Google Chrome везде-на одном ПК через время перестают загружаться Яндекс Картинки Работа Java на нескольких процессорах Вычесть два массива, если в одном массиве больше элементов, чем в другом Множество: напечатать все звонкие согласные, которые есть в больше чем в одном слове Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|