Вопросы с тегами [parallel-processing]

2

голосов
0

ответ
185

Просмотры

Joblib and memory-bound parallelization

В Python, joblib обеспечивает очень хороший инструмент для выполнения ошеломляюще параллельного выполнения. Я вроде новой для него, и я пытаюсь выяснить, как обращаться с потенциально памяти переплете рабочих мест. Например, рассмотрим следующее: от joblib импорта Параллель, отложенный импорт NumPy как ир num_workers = 8 num_jobs = 100 memory_range = 1000 Защиту My_function (х): np.random.seed (х) = array_length (np.random.randint (memory_range ) +1) ** 3 big_list_of_numbers = np.random.uniform (array_length) возвращение (np.sum (big_list_of_numbers)) результаты = Параллельные (n_jobs = num_workers) (задержка (My_function) (я) для г в диапазоне (num_jobs)) использование памяти для каждой работы может варьироваться от нескольких сот байт до примерно 0,8 Гб. В идеальном мире, я хотел бы дать joblib некоторого бюджет агрегатных памятей (например, " Есть ли joblib поддерживать какую-либо часть этой функциональности? Есть ли какой-либо другой (надеюсь простой) инструмент?
Bill Bradley
3

голосов
0

ответ
250

Просмотры

Запуск ScalaTest сценариев полнометражных параллельно в SBT

) {Println ( «Сценарий 6»)}}} В моем functionatests модуле проекта, открытого в IntelliJ я определяю в build.sbt явного параллельного выполнения тестов: parallelExecution в тесте: = True. Когда я бегу в терминале: SBT «functionaltest / главная: testOnly tests.MyParallelTestSpec» она работать параллельно, но не с этими ошибками: [информация] Компиляция 1 Scala источник в /Users/francisk.baptista/Documents/Google/dataservices/functionaltest /target/scala-2.10/main-classes ... Сценарий 6 Сценарий 1.1 Сценарий 3.1 Сценарий 2 Сценарий 4 Сценарий 5 Репортер завершено резко с исключением после приема события: SuiteCompleted (Порядковый (0, 4, 3), DistributedTestRunnerSuite, орг. scalatest.tools.DistributedTestRunnerSuite, некоторые (org.scalatest.tools.DistributedTestRunnerSuite), Некоторые из них (40), некоторые (MotionToSuppress), некоторые (TopOfClass (орг. scalatest.tools.DistributedTestRunnerSuite)), Ничего, Ничего, бассейн-4-нить-3,1444495674366). java.lang.IllegalStateException: Ожидаемое SuiteStarting для события завершения: SuiteCompleted (Порядковый (0, 4, 3), DistributedTestRunnerSuite, org.scalatest.tools.DistributedTestRunnerSuite, Некоторые из них (org.scalatest.tools.DistributedTestRunnerSuite), Некоторые из них (40), некоторые (MotionToSuppress), некоторые (TopOfClass (org.scalatest.tools.DistributedTestRunnerSuite)), None, None, бассейн-4-токарно-3,1444495674366) в голове ванной событий, но мы не получили люкс событие вообще в орг. scalatest.tools.HtmlReporter.apply (HtmlReporter.scala: 948) в org.scalatest.DispatchReporter $ пропагаторных $$ anonfun $ пробег $ 1.Apply (DispatchReporter.scala: 240) в org.scalatest.DispatchReporter $ Propagator $$ anonfun $ бежать $ 1.Apply (DispatchReporter.scala: 239) в scala.collection.immutable.List.foreach (List.scala: 318) в org.scalatest.DispatchReporter $ Propagator.run (DispatchReporter.scala: 239) в java.lang.Thread.run (Thread.java:745) Репортер завершено внезапно с исключением после получения события: SuiteCompleted (порядковых (0, 8, 3), DistributedTestRunnerSuite, org.scalatest.tools.DistributedTestRunnerSuite, Некоторые из них (org.scalatest.tools.DistributedTestRunnerSuite), Некоторые из них (41), Некоторые из них (MotionToSuppress), Некоторые из них (TopOfClass (org.scalatest.tools.DistributedTestRunnerSuite)), Ничего, Ничего, бассейн-4-нить-7,1444495674366). java.lang.IllegalStateException: Ожидаемое SuiteStarting для события завершения: SuiteCompleted (Порядковый (0, 8, 3), DistributedTestRunnerSuite, org.scalatest.tools.DistributedTestRunnerSuite, Некоторые из них (org.scalatest.tools.DistributedTestRunnerSuite), Некоторые из них (41), некоторые (MotionToSuppress), Некоторые из них (TopOfClass (org.scalatest.tools.DistributedTestRunnerSuite)), Ничего, Ничего, бассейн-4-нить-7, Ничего, Ничего, бассейн-4-нить-8,1444495674366). java.lang.IllegalStateException: Ожидаемое SuiteStarting для события завершения: SuiteCompleted (Порядковый (0, 6, 3), DistributedTestRunnerSuite, org.scalatest.tools.DistributedTestRunnerSuite, Некоторые из них (org.scalatest.tools.DistributedTestRunnerSuite), Некоторые из них (41), некоторые (MotionToSuppress), некоторые (TopOfClass (org.scalatest.tools.DistributedTestRunnerSuite)), None, None, бассейн-4-токарно-8,1444495674366) в голове ванной событий, но мы не получили люкс событие вообще в орг. scalatest.tools.HtmlReporter.apply (HtmlReporter.scala: 948) в org.scalatest.DispatchReporter $ пропагаторных $$ anonfun $ пробег $ 1.Apply (DispatchReporter.scala: 240) в org.scalatest.DispatchReporter $ Propagator $$ anonfun $ бежать $ 1.Apply (DispatchReporter.scala: 239) в scala.collection.immutable.List.foreach (List.scala: 318) в org.scalatest.DispatchReporter $ Propagator. запустить (DispatchReporter.scala: 239) на java.lang.Thread.run (Thread.java:745) Сценарий 1.2 Reporter завершен внезапно с исключением после приема события: SuiteCompleted (порядковые (0, 3, 3), DistributedTestRunnerSuite, орг. scalatest.tools.DistributedTestRunnerSuite, Некоторые из них (org.scalatest.tools.DistributedTestRunnerSuite), Некоторые из них (3039), некоторые (MotionToSuppress), Некоторые из них (TopOfClass (org.scalatest.tools.DistributedTestRunnerSuite)), Ничего, Ничего, бассейн-4-нить -5,1444495677364). java.lang.IllegalStateException: Ожидаемое SuiteStarting для события завершения: SuiteCompleted (Порядковый (0, 3, 3), DistributedTestRunnerSuite, org.scalatest.tools.DistributedTestRunnerSuite, Некоторые из них (org.scalatest.tools.DistributedTestRunnerSuite), Некоторые из них (3039), некоторые (MotionToSuppress), Некоторые из них (TopOfClass (org.scalatest.tools.DistributedTestRunnerSuite)), Ничего, Ничего, бассейн-4-нить-5, DistributedTestRunnerSuite)), Ничего, Ничего, бассейн-4-нить-4,1444495678365). java.lang.IllegalStateException: Ожидаемое SuiteStarting для события завершения: SuiteCompleted (Порядковый (0, 5, 3), DistributedTestRunnerSuite, org.scalatest.tools.DistributedTestRunnerSuite, Некоторые из них (org.scalatest.tools.DistributedTestRunnerSuite), Некоторые из них (4040), некоторые (MotionToSuppress), некоторые (TopOfClass (org.scalatest.tools.DistributedTestRunnerSuite)), None, None, бассейн-4-токарно-4,1444495678365) в голове ванной событий, но мы не получили люкс событие вообще в орг. scalatest.tools.HtmlReporter.apply (HtmlReporter.scala: 948) в org.scalatest.DispatchReporter $ пропагаторных $$ anonfun $ пробег $ 1.Apply (DispatchReporter.scala: 240) в org.scalatest.DispatchReporter $ Propagator $$ anonfun $ бежать $ 1.Apply (DispatchReporter.scala: 239) в scala.collection.immutable.List.foreach (List.scala: 318) в org.scalatest. DispatchReporter $ Propagator.run (DispatchReporter.scala: 239) в java.lang.Thread.run (Thread.java:745) [информация] Run завершена за 4 секунды, 586 милисекунд. [Информация] Общее количество тестов, проведенных: 6 [информация] Suites: завершенные 7, прервано 0 [Информация] тесты: удалось 6, не удалось 0, аннулировано 0, 0 игнорируется, до 0 [Информация] Все тесты прошли. [Успех] Общее время: 17 сек, завершенные 10 окт 2015 5:47:58 PM Как я могу избавиться от этих ошибок и выполнить тесты нормально?
Francisk Baptista
2

голосов
0

ответ
1.3k

Просмотры

параллелизм с MySQL запросов

У меня следующая проблема: я имею дело с несколькими параллельными потоками в данный момент, который одновременно должен получить данные из одной и той же базы данных с помощью MySQL Query (я использую Java для этого - точнее, шторм с Java). Но вместо того, чтобы делать это паралельно, кажется, сделать sequentally и, следовательно, время, необходимое для всего процесса более или менее является добавленной до времени каждого запроса из каждого потока. Есть ли способ, чтобы фактически выполнить эти темы (и запросы из одной и той же базе данных, поступающих вместе с ними) паралельно? Мне действительно нужно, чтобы ускорить этот процесс, много. Unofortunately, есть слишком много строк кода, чтобы иметь возможность представить вам некоторые ПОЛЕЗНЫЕ экстракты ... Я надеюсь, что вы все еще можете помочь мне с этим. Thanks1
user1636427
5

голосов
0

ответ
1.5k

Просмотры

R и makePSOCKcluter ЕС2 SocketConnection

Я хотел бы иметь возможность подключить Mac к моим EC2 случаях осуществлять параллельную обработку на AWS через параллельный пакет с помощью makePSOCKcluster или makeSOCKCluster. На данный момент моя попытка уходит R «висит», так что я приспособил к makePSOCKcluster, и некоторые из ее подпрограмм, таких, что некоторые из его выходов можно увидеть, добавив опцию -v к SSH. Я думаю, мне удалось справиться с паролем менее SSH входа в систему, но я застрять на SocketConnection части, я думаю, что вызывает проблемы. Я попытался связать Elastic IP-адрес и использовать те как IP-адрес без толка, также пытался регулировать группы безопасности, с тем, что она включает в себя порт по умолчанию, который использует makePSOCKcluster но безрезультатно либо ... В последнем случае, я не использовал порты аргумент и используется параметр порта по умолчанию 10187, к которому он говорит: и я уточнил убунт как имя пользователя для входа в системе, как на экземпляре убунт EC2. makePSOCKcluster1
h.l.m
2

голосов
0

ответ
7.6k

Просмотры

Python scikit узнать n_jobs

Это не реальная проблема, но я хотел бы понять: бег sklearn от Anaconda дистрибьютора на 4 ядра системы 8 Гб Win7 фитинг модель KMeans на 200.000 образцов через * 200 значений таблицы. работаю с п-заданиями = -1: (после добавления, если __name__ == «__main__»: линия моего сценария) Я вижу сценарий, начиная с 4 процессом 10 потоков каждых. Каждый процесс использует около 25% от ЦП (всего: 100%). Кажется, работает, как ожидается, работает с н-рабочих мест = 1: остается на одном процессе (не удивительно), с 20 нитями, а также использует 100% CPU. Мой вопрос: какой смысл использования п-заданий (и joblib), если библиотека использует все ядра в любом случае? Я что-то пропустил? Является ли это Windows, определенное поведение?
Bruno Hanzen
1

голосов
0

ответ
1.3k

Просмотры

открытый МПИ: недопустимое сообщение типа 15

Я пытался запустить несколько кодов на открытом в фортране MPI, все работало хорошо, пока вдруг он не перестал работать и начал отображать «недопустимый тип сообщения: 15» (он компилирует отлично). Пробовал переустановить открытый МПИ, не помог. Что я должен делать? Я использую последнюю версию открытого MPI. КОД: программа основной включают '' mpif.h целочисленный параметр SIZE (SIZE = 4) целочисленные numtasks, ранг, IERR называют MPI_INIT (IERR) называют MPI_Comm_rank (MPI_COMM_WORLD, звание, IERR) называют MPI_Comm_size (MPI_COMM_WORLD, numtasks, IERR) печать *, Оценка вызова MPI_FINALIZE (IERR) конец ошибка получил после успешной компиляции, во время работы: [ГКГ-HP-Pavilion-g6-Notebook-PC: 24051] [[49070,0], 0] mca_oob_tcp_recv_handler: неверный тип сообщения: 15 [ГКГ -HP-павильон-g6-Notebook-PC: 24051] [[49070,0], 0] mca_oob_tcp_recv_handler: неверный тип сообщения:
codeass
1

голосов
0

ответ
153

Просмотры

pytest и параллельная программа бенчмаркинга

I'am использования py.test модуля для тестов два версий моего алгоритма и результатов я Изображен способом ниже, чем те, которые я получаю, когда я вручную запустить программу. Первый вариант опорный алгоритм, в то время как другие опорным улучшает выполнение алгоритма с помощью параллелизации. Для распараллеливания я использую multiprocessing.Process. Benchmark показывает ~ время выполнения 4s для параллельной версии (по сравнению с ~ 90 сек для последовательного), который является большим. Однако, когда я запускаю параллельную версию вручную, это занимает намного больше, чем 4 секунды (я даже не добирался, чтобы закончить выполнение, мой перегруженные ПК (все ядра перехода к использованию 100% в Htop) и я вынужден прервать выполнение. И да, я добавил, если __name__ == «__main__» часть перед созданием процессов. Я рассчитал первый вариант с time.time () и время. часы (), и они оба показывают около 100 сек (что все еще выше, чем pytest шоу, но, как executin времени зависит от начальной случайной установки, это может быть понятно). Я искал в документации, но не смогли найти каких-либо объяснений, почему это могло произойти. Есть ли у вас какие-либо идеи ? Является ли py.test даже хороший путь к эталонной параллельной программе, и у вас есть какие-либо другие предложения?
Ajdin Mujezinović
2

голосов
0

ответ
67

Просмотры

REPLACE function suppresses parallelism

В настоящее время я борюсь с проблемой производительности с интересным поведением. Я довольно сложный SQL заявление (85 ЛЕВОЙ соединения, 14 ВНУТРИПАРТИЙНЫМ присоединяется несколько подзапросов), с помощью которого я выбрать около 180 столбцов. Некоторые из этих столбцов могут включать в себя точку с запятой. Как я в дальнейшем придется писать данные в виде разделенных точкой с запятой файл CSV, я должен заменить эти точки с запятой. Я делаю простой Replace (Column1, «;», «») на кучу столбцов. Теперь проблема: Без тех REPLACE функции, запрос работает гладко примерно 30 секунд, выбирая 1500 строк. План выполнения показывает мне параллелизм. Весь план выполнения (только представьте себе): Но всякий раз, когда я добавить функции REPLACE, нет параллелизма больше и запрос выполняется навсегда. (Убил его через час или около того). Предполагаемый план выполнения выглядит совершенно иначе с тоннами вложенных циклов. Весь план выполнения (только представьте себе): Есть ли объяснение такого поведения? Почему не оптимизатор понимает, что он может сделать параллелизм, как и раньше, и сделать ЗАМЕНИТЬ в конце концов, после выбора данных? Я пытался упаковать весь выбор (без Заменяет) в подзапрос и делать ЗАМЕНИТЬ во внешнем выберите. Но его до сих пор не распараллелить. Как: SELECT A.col1, REPLACE (A.col2, ';', ' '), REPLACE (A.col3,';', ''), A.col4 FROM (мой сложный запрос без замены функций здесь ) Неважно намеки и идеи приветствуются. В настоящее время я имею в виду удаление REPLACE заявления SQL и делает REPLACE в моем пакете SSIS bevore записи данных в файл. Весь план выполнения (только представьте себе): Есть ли объяснение такого поведения? Почему не оптимизатор понимает, что он может сделать параллелизм, как и раньше, и сделать ЗАМЕНИТЬ в конце концов, после выбора данных? Я пытался упаковать весь выбор (без Заменяет) в подзапрос и делать ЗАМЕНИТЬ во внешнем выберите. Но его до сих пор не распараллелить. Как: SELECT A.col1, REPLACE (A.col2, ';', ' '), REPLACE (A.col3,';', ''), A.col4 FROM (мой сложный запрос без замены функций здесь ) Неважно намеки и идеи приветствуются. В настоящее время я имею в виду удаление REPLACE заявления SQL и делает REPLACE в моем пакете SSIS bevore записи данных в файл. Весь план выполнения (только представьте себе): Есть ли объяснение такого поведения? Почему не оптимизатор понимает, что он может сделать параллелизм, как и раньше, и сделать ЗАМЕНИТЬ в конце концов, после выбора данных? Я пытался упаковать весь выбор (без Заменяет) в подзапрос и делать ЗАМЕНИТЬ во внешнем выберите. Но его до сих пор не распараллелить. Как: SELECT A.col1, REPLACE (A.col2, ';', ' '), REPLACE (A.col3,';', ''), A.col4 FROM (мой сложный запрос без замены функций здесь ) Неважно намеки и идеи приветствуются. В настоящее время я имею в виду удаление REPLACE заявления SQL и делает REPLACE в моем пакете SSIS bevore записи данных в файл. Есть ли объяснение такого поведения? Почему не оптимизатор понимает, что он может сделать параллелизм, как и раньше, и сделать ЗАМЕНИТЬ в конце концов, после выбора данных? Я пытался упаковать весь выбор (без Заменяет) в подзапрос и делать ЗАМЕНИТЬ во внешнем выберите. Но его до сих пор не распараллелить. Как: SELECT A.col1, REPLACE (A.col2, ';', ' '), REPLACE (A.col3,';', ''), A.col4 FROM (мой сложный запрос без замены функций здесь ) Неважно намеки и идеи приветствуются. В настоящее время я имею в виду удаление REPLACE заявления SQL и делает REPLACE в моем пакете SSIS bevore записи данных в файл. Есть ли объяснение такого поведения? Почему не оптимизатор понимает, что он может сделать параллелизм, как и раньше, и сделать ЗАМЕНИТЬ в конце концов, после выбора данных? Я пытался упаковать весь выбор (без Заменяет) в подзапрос и делать ЗАМЕНИТЬ во внешнем выберите. Но его до сих пор не распараллелить. Как: SELECT A.col1, REPLACE (A.col2, ';', ' '), REPLACE (A.col3,';', ''), A.col4 FROM (мой сложный запрос без замены функций здесь ) Неважно намеки и идеи приветствуются. В настоящее время я имею в виду удаление REPLACE заявления SQL и делает REPLACE в моем пакете SSIS bevore записи данных в файл. после выбора данных? Я пытался упаковать весь выбор (без Заменяет) в подзапрос и делать ЗАМЕНИТЬ во внешнем выберите. Но его до сих пор не распараллелить. Как: SELECT A.col1, REPLACE (A.col2, ';', ' '), REPLACE (A.col3,';', ''), A.col4 FROM (мой сложный запрос без замены функций здесь ) Неважно намеки и идеи приветствуются. В настоящее время я имею в виду удаление REPLACE заявления SQL и делает REPLACE в моем пакете SSIS bevore записи данных в файл. после выбора данных? Я пытался упаковать весь выбор (без Заменяет) в подзапрос и делать ЗАМЕНИТЬ во внешнем выберите. Но его до сих пор не распараллелить. Как: SELECT A.col1, REPLACE (A.col2, ';', ' '), REPLACE (A.col3,';', ''), A.col4 FROM (мой сложный запрос без замены функций здесь ) Неважно намеки и идеи приветствуются. В настоящее время я имею в виду удаление REPLACE заявления SQL и делает REPLACE в моем пакете SSIS bevore записи данных в файл. COL4 FROM (мой сложный запрос без замены функции здесь) A Любые подсказки и идеи приветствуются. В настоящее время я имею в виду удаление REPLACE заявления SQL и делает REPLACE в моем пакете SSIS bevore записи данных в файл. COL4 FROM (мой сложный запрос без замены функции здесь) A Любые подсказки и идеи приветствуются. В настоящее время я имею в виду удаление REPLACE заявления SQL и делает REPLACE в моем пакете SSIS bevore записи данных в файл.
Esteban P.
3

голосов
0

ответ
106

Просмотры

R: установить «Checkpoint» на работника кластера

Я использую следующий код для ... 1. создать параллельный кластер 2. источник test.r 3. и сделать некоторые параллельную работу с функциями, определенных в библиотеке «test.r» (параллельно) сло
Bernd
2

голосов
0

ответ
196

Просмотры

Как параллельно R сценарий или запустить его на куски

У меня есть data.frame и список. Мои реальные данные действительно огромны, так что здесь примеры являются упрощением моей текущей информации. > DF УДС ПВС P1 P2 P3 P4 Р5 Р6 1 1 0,1 0,1 0,1 0,4 0,2 0,1 0,4 2 б 1 0,2 0,1 0,4 0,2 0,1 0,2 0,2 ​​3 C 1 0,4 0,4 ​​0,1 0,2 0,1 0,1 0,4 4 д 2 0,1 0,1 0,7 0,5 0,1 0,7 0,1 5 е 2 0,5 0,7 0,5 0,1 0,7 0,1 0,5 6 F 2 0,7 0,5 0,5 0,7 0,1 0,7 0,1 7 г 3 0,1 0,1 0,1 0,2 0,2 ​​0,2 ​​0,5 8 ч 3 0,2 0,2 ​​0,1 0,5 0,2 0,2 ​​0,5 9 ± 3 0,5 0,1 0,2 0,1 0,1 0,5 0,2 LL
user2380782
3

голосов
0

ответ
308

Просмотры

почему распараллеленный .at () OpenCV с OpenMP займет больше времени

я пытаюсь реализовать оператор морфологии изображения в C ++ с использованием OpenMP и OpenCV. Алгоритм работает хорошо, но, когда я получаю результат профилирования взятый с VTune, я заметить, что распараллеленный метод занимает больше времени, чем последовательный метод, и это вызвано .at) функциями (OpenCV. Зачем? как я могу решить эту проблему? вот мой код: Mat Morph_op_manager :: compute_morph_base_op (Mat изображение, BOOL параллельно, целого типа) {// атрибут Стрел INT strel_rows = 5; INT strel_cols = 5; // Стрел центр координат ИНТ кр = 2; INT куб.см = 2; // количество строки и столбца после Strel центр Int nrac = strel_rows - кр; ИНТ NCAC = strel_cols - кр; // Стрел INIT Mat Стрел (strel_rows, strel_cols, CV_8UC1, скалярная (0)); Mat op_result = image.clone (); если (параллельные) == ложные omp_set_num_threads (1); в моем профилировании лога Mat ::. выпуск () тратить много времени почему? как я могу решить эту проблему? Скорость вверх код: omp_set_num_threads (4); двойная start_time = omp_get_wtime (); #pragma OMP параллельно для общего (Стрел, образ, op_result, strel_el_count) частное (I, J) график (динамический), если (параллельно == верно) для (I = сг, я <image.rows-nrac, я ++) {op_result .addref (); Uchar * opresult_ptr = op_result.ptr (я); для (J = куб.см; J <image.cols-NCAC; j ++) {// тип == 0 -> подрывать если (тип == 0) {если (is_fullfit (изображение, I, J, StreL, strel_el_count, параллельно)) {opresult_ptr [J] = 0; } Еще opresult_ptr [J] = 255; } } } Вот' с функцией fullfit BOOL Morph_op_manager :: is_fullfit (Мат изображения, Int я, Int J, Мат Стрел, Int strel_counter, BOOL параллельно) {INT mask_counter = 0; INT б = 0; INT JJ = 0; для (II = 0; б INT б = 0; INT JJ = 0; для (II = 0; б INT б = 0; INT JJ = 0; для (II = 0; б
userfi
4

голосов
0

ответ
267

Просмотры

распараллеливание петли для GLM в R

Я пытаюсь запрограммировать распараллеливание цикла, где внутри я пытаюсь оптимально найти лучший GLM моделировать только переменные, которые имеют самое низкое значение р, чтобы увидеть, я ли или нет, я буду играть в теннис (да / нет в двоичном коде) , Например, у меня есть таблица (и dataframe из него), который имеет наборы метеорологических данных. Я построить модель GLM, видя, какой из этих моделей самая низкая величина р первого PlayTennis ~ ~ PlayTennis осадков Temp, PlayTennis ~ Relative_Humidity PlayTennis ~ WindSpeed) Скажем PlayTennis ~ осадков имеет самое низкое значение р. Таким образом, следующей итерации цикла в повторе, чтобы увидеть, что другая переменная будет иметь наименьший р-значение. PlayTennis ~ + Temp осадков PlayTennis ~ + Relative_Humidity осадков PlayTennis ~ + WindSpeed ​​осадков Это будет продолжаться до тех пор, пока не более значимых переменных (Р-значение больше 0,05). Таким образом, мы получаем окончательный вывод PlayTennis ~ засветки + WindSpeed ​​(это все гипотетические). Есть ли какие-либо рекомендации о том, как я могу распараллелить этот код на различных ядрах? Я пришел через новую функцию для GLM называется speedglm из библиотеки speedglm. Это улучшение, но не намного. Я также посмотрел в петлю Еогеаспа, но я не уверен в том, как он может взаимодействовать с каждым потоком, чтобы узнать, где р-значение больше или меньше для различных трасс. Спасибо заранее за любую помощь. д = Время Темп осадков Relative_Humidity WindSpeed ​​... PlayTennis 1/1/2000 0:00 0 88 30 0 1 0 1/1/2000 1:00 80 30 1 1 1/1/2000 2:00 0 70 44 0 1 1 / 1/2000 3:
lurodrig
2

голосов
0

ответ
944

Просмотры

Распараллеливание применить функцию в панд питона. работал на GroupBy

возможно или рекомендуется ли это? У меня есть функция, которая может быть распараллеливаемой (его не рекурсивной или что-нибудь), и это займет много времени, если он работает итеративно.
wolfsatthedoor
2

голосов
0

ответ
781

Просмотры

Джанго параллельный для предупреждения цикла joblib: «многопроцессорные поддержали параллельные циклы не могут быть вложенными ниже нитей, установки n_jobs = 1»

от joblib импорта Параллели, задержанной четкость FUNC (arg1, arg2, arg3): # некоторой обработка и возвращать результат обратного результата четкость func2 (): arg1 = 'значение1' arg2 = 'значение2' elems = [ 'а', 'б' , 'с', 'd', 'е'] resultsList = Параллельный (n_jobs = 4) (задержка (FUNC) (арг1, арг2, эль) для эля в elems) Вызов func2 в представлении DJANGO выдает следующее предупреждение: " многопроцессорные поддержали параллельные циклы не могут быть вложенными ниже резьбы, установки n_jobs = 1" Там связанный с этим вопрос, но обходной путь здесь, чтобы переименовать тему на „MainThread“, который, кажется странным и не будет работать в моем случае. Можно ли использовать joblib распараллеливание для петель в представлениях Джанго? Есть лучший способ сделать это?
tisch
3

голосов
0

ответ
1.2k

Просмотры

2017 Издание: 10,000 HTTP запросы параллельно в питона

Я знаю, этот вопрос был задан довольно много раз, но читать дальше. Маленький фон о моей проблеме, я хочу, чтобы получить ответ на +10,000 URL. Однако большой проблемой является время загрузки для каждой страницы. А именно для каждой страницы есть большой процесс на стороне сервера (~ 20-30) минут. Offcourse я мог бы сделать это синхронно и сказать вам в следующем году, как долго он взял;) Но это не вариант, так что я искал на переполнение стека и в Интернете, и придумали некоторые «ответы». Какой самый быстрый способ отправки 100000 HTTP запросов в Python? Lib: Нет подход:. многопоточность Даже если только с помощью 200 запросов моего процессора достиг 100% (возможно, из-за долгое ожидание?) Так что я думал, что многопоточность не была путем. Идеальный метод для отправки нескольких запросов HTTP через Python? [Дублировать] LIB: grequests подход: асинхронная Если много действительно много, чем вы, вероятно, хотите использовать асинхронный ввод-вывод не нитки. запросы + GEvent = grequests Ну, что кажется хорошо для меня, но grequests, кажется, своего рода осуждается (читать комментарии на этот ответ, если вы заинтересованы). Но, по крайней мере, я уверен, что я должен пойти на асинхронном вместо многопоточности. Поэтому я начал искать в Интернете. Изготовление 1 миллион запросов с питоном-aiohttp Lib: asyncio подхода: асинхронным Это кажется хорошим вариантом для меня, поэтому я настроил код и протестировал его. Проблемы с которыми я столкнулся: Медленные До ~ 200 запросов я вижу печать: 201. Ср, 28 сентября 2017 7:32:18 GMT: HTTP: //api.metagenomics.anl.gov/annotation/sequence/mgm4484960.3 источник = RDP с задержкой None Но после этого он принимает тааак долго, чтобы добавить остальные. Безразлично» т, кажется, пропорциональная При попытке 200 запросов займет ~ 2 часа, тогда как один запрос должен взять только 20-30 минут. Текущий код: Код выглядит долго на основе скроллинга, но большинство из них является URLs;) импорт asyncio время импорта из aiohttp импорт ClientPayloadError из aiohttp импорт ClientSession COUNTER = 1 асинхронной Защита выборки (URL, сессия): асинхронное с session.get (URL ) в качестве отклика: задержка = response.headers.get ( "задержка") дата = response.headers.get ( "Date") глобальной счетчик счетчик + = 1 печать ( "{} {}:. {} с задержкой {}" .format (ул (COUNTER), дата, response.url, задержка)) попробуйте: возвращение AWAIT response.text (), за исключением ClientPayloadError: печать ( "ERROR:" .format (URL)) асинхронной четкости bound_fetch (СЭМ, URL сессии ): Функция # Getter с семафором. асинхронный с гипюром: ждать выборки (URL, сессия) асинхронная четкость прогона (): URLS = [build_url (ID) для идентификатора в load_ids ()] задачи = [] # создать экземпляр Семафор = asyncio.Semaphore сема (1000) # Создать сеанс клиента, который будет гарантировать, мы не открыть новое соединение # на каждый запрос. асинхронная с ClientSession (conn_timeout = 10000, read_timeout = 10000) в качестве сессии: для URL в адресах: #pass Семафор и сессии каждый GET запрос задачи = asyncio.ensure_future (bound_fetch (семафор, URL, сессия)) tasks.append (задача) ответы = asyncio.gather (*) задачи ждут ответов Защиты build_url (ID): URL = «http://api.metagenomics.anl.gov/annotation/sequence/{}?source=RDP'.format(id) возвращает URL Защиту load_ids (): #I будет читать файл здесь, но добавил важное содержание, чтобы сделать его воспроизводит. вернуться ""»mgm4558908.3 mgm4484962.3 mgm4734169.3 mgm4558911.3 mgm4484983.3 mgm4558918.3 mgm4735453.3 mgm4735450.3 mgm4558931.3 mgm4734170.3 mgm4524851.3 mgm4485066.3 mgm4484952.3 mgm4484985.3 mgm4485062.3 mgm4484969 0,3 mgm4485024.3 mgm4485021.3 mgm4485061.3 mgm4485070.3 mgm4449604.3 mgm4510361.3 mgm4558912.3 mgm4485034.3 mgm4484996.3 mgm4524848.3 mgm4485035.3 mgm4734167.3 mgm4485001.3 mgm4735458.3 mgm4484948.3 mgm4508946.3 mgm4484973.3 mgm4485009.3 mgm4453148.3 mgm4485064.3 mgm4510364.3 mgm4547279.3 mgm4510360.3 mgm4484964.3 mgm4453150.3 mgm4548349.3 mgm4484975.3 mgm4558909.3 mgm4484945.3 mgm4734166.3 mgm4572199.3 mgm4485053.3 mgm4558915. 3 mgm4485020.3 mgm4445996.3 mgm4484990.3 mgm4485052.3 mgm4485055.3 mgm4485029.3 mgm4558903.3 mgm4558924.
CodeNoob
2

голосов
0

ответ
172

Просмотры

Equivalences in omp_places?

У меня возникли некоторые проблемы с omp_places и, кажется, найти противоречивую информацию Из http://openmp.org/mp-documents/OpenMP_Examples_4.0.1.pdf я считаю, что: omp_places = {0: 2}: 8: 2 эквивалентно : omp_places = "{0,1}, {2,3}, {4,5}, {6,7}, {8,9}, {10,11}, {12,13}, {14,15 }»в моем коде я автоматически строит строку в зависимости от количества ядер, обнаруженных в системе и пользовательской спецификации о NUMA не распространяющихся и т.д. Когда там нет распространения я часто в конечном итоге со следующей строки: OMP_PLACES = {0:16}: 1:16, который я бы предположить, что эквивалентно: OMP_PLACES = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15} проблема заключается в том, что первый один бросает предупреждение о потоках, пытающихся получить привязан к ID 16-31, который находится за пределами диапазона. Я предполагаю, что мой вопрос находится в строке OMP_PLACES последние 16, но я не понимаю, почему.
Tue
4

голосов
0

ответ
159

Просмотры

Task Parallelism on haskell code

I have struggling to understand some aspects of parallelism on haskell. I have to apply parallelism to a piece of code, but the attempts I have tried are not working properly. The function is this one: fft :: [Complex Float] -> [Complex Float] fft [a] = [a] fft as = interleave ls rs where (cs,ds) = bflyS as ls = fft cs rs = fft ds interleave [] bs = bs interleave (a:as) bs = a : interleave bs as halve as = splitAt n' as where n' = div (length as + 1) 2 -- twiddle factors tw :: Int -> Int -> Complex Float tw n k = cis (-2 * pi * fromIntegral k / fromIntegral n) bflyS :: [Complex Float] -> ([Complex Float], [Complex Float]) bflyS as = (los,rts) where (ls,rs) = halve as los = zipWith (+) ls rs ros = zipWith (-) ls rs rts = zipWith (*) ros [tw n i | i ([Complex Float], [Complex Float]) bflySTask as = (los,rts) `using` if n>1000 then parTuple2 (parListChunk 500 rseq) (parListChunk 500 rseq) else r0 where (ls,rs) = halve as los = zipWith (+) ls rs ros = zipWith (-) ls rs n = length as fx = (map (tw (n)) [0..n-1]) rts = zipWith (*) ros fx And with the Par Monad bflySTask :: [Complex Float] -> ([Complex Float], [Complex Float]) bflySTask as = f as where (ls,rs) = halve as los = zipWith (+) ls rs ros = zipWith (-) ls rs n = length as fx = (map (tw (n)) [0..n-1]) f as = if n>10000 then runPar $ do v1
lucasmoura
2

голосов
0

ответ
88

Просмотры

Параллельные Казни Maven Ассамблеи

Часть моей сборки создает экологически специфические застежки-молнии для каждого из моих 15 сред. Я использую Maven-сборку-плагин и ищу способ parallelise каждое исполнения, так что я могу сэкономить несколько минут на время сборки. В частности, это не параллельный Maven сборки, которая строит индивидуальные проекты параллельно, но параллельные расстрелы плагина в пределах одного сборки проекта.
beirtipol
2

голосов
0

ответ
362

Просмотры

Python multiprocessing share large readonly object

Я хочу поделиться большим прочитанным только объект между подпроцессом, сделанный многопроцессорными библиотеками на Linux. Я не хочу, чтобы использовать диспетчер (), потому что влияет на производительность. Большой объект не является массивом и на самом деле список gmpy.xmpz из библиотеки gmpy2. Это означает, что, используя общий массив из библиотеки многопроцессорной не работает. Как это сделать? В прошлом, когда я использовал Python 2, я могу использовать глобальную переменную в основном процессе. Подпроцесс может читать его без создания копий объекта на Linux, до тех пор, пока я не изменить объект каким-либо образом. Но, как-то трюк больше не работает после того, как я перекомпилировать питон 2 с интел компилятором. Я также перенести свой код на Python 3. Тот же трюк еще не работает. старый код: импорт многопроцессорная в МП импорта NumPy как нп четкости F (х): п = 0 для печати (shared_obj [0], Идентификатор (shared_obj)) Защита основной (): глобальный shared_obj # 7GB объект. в фактическом коде, это не массив shared_obj = np.zeros (7E9 / 4, DTYPE = np.int32) бассейн = mp.Pool (6) Результат = pool.map_async (F, диапазон (10)) pool.close () result.get () pool.join () основная () Ошибка: self.pid = os.fork () OSError: [Errno 12] Невозможно выделить память
hamster on wheels
2

голосов
0

ответ
379

Просмотры

Параллельный Еогеасп в Jenkinsfile

Я преобразовать процесс сборки в Jenkinsfile и в процессе я хотел бы упорядочить несколько вещей. У меня есть ряд общих модулей и развернутые модули. Развернутые модули все имеют Dockerfile в них, что-то вроде этого: Родитель | -shared1 | -shared2 | -Deploy1 | \ -Dockerfile | -shared3 | -Deploy2 | \ -Dockerfile | -Jenkinsfile | -pom.xml Все они имеют pom.xml. То, что я хотел бы сделать, это построить все общие компоненты, то в параллельной сборке и публиковать общие модули. Проблемы, которые я имею в получить только развернутые модули Execute на неизвестное количество вспомогательных модулей параллельно. Через некоторое разочарование стиранию, все у меня есть стадия ( 'Build Test') {dockerSupport.insideContainer ( 'dockerRepository / докер-МВН-ая: 0.1.0') {ш 'МВН чистой установки'}} этап ( 'Опубликовать') {ш "
Bill H
3

голосов
0

ответ
1.1k

Просмотры

Работа менеджеров для EJB параллельной обработки

Мне нужно распараллелить асинхронный вызов нескольких различных EJBs, в каждом из них нужно вызвать транзакционный метод. Я использую кластерный установку WebLogic в моей среде развертывания, и в идеале я хотел бы, чтобы распределить нагрузку между различными потоками в разных узлах кластера. После нахождения предыдущих постов на эту тему, я думаю, что с помощью Work менеджеров может быть жизнеспособной альтернативой для моего окружения, но после прочтения документации я оставил с парой вопросов, я был бы очень благодарен, если кто-то с большим опытом использования Работы Менеджеры могут пролить некоторый свет на это: можно ли реализовать интерфейс работать в EJB, таким образом, что, когда бег () метод вызывается, это может вызвать один из методов транзакционных этого EJB? Я' м заинтересован в асинхронном режиме и одновременно вызывая несколько EJBs, каждый из которых представляет собой другую единицу работы, но я не знаю, если работа менеджер будет распространяться необходимый контекст выполнения моих EJBs. Если настроить глобальную Работа диспетчера, когда я использую его, это позаботиться о автоматически распределять нагрузку между всеми узлами в моей группе? или все работы, отправленные на него будут выполняться в том же самом узле кластера, хотя в разных потоках? - если это так, как я мог распараллелить свою рабочую нагрузку таким образом, чтобы все узлы в моем кластере получить свою долю работы? Кроме того, было бы здорово, если бы кто-то может предложить другой вариант (вместо использования менеджеров работают), до тех пор, как требования, изложенные в первом абзаце этого вопроса будут выполнены. но я не знаю, если работа менеджер будет распространяться необходимый контекст выполнения моих EJBs. Если настроить глобальную Работа диспетчера, когда я использую его, это позаботиться о автоматически распределять нагрузку между всеми узлами в моей группе? или все работы, отправленные на него будут выполняться в том же самом узле кластера, хотя в разных потоках? - если это так, как я мог распараллелить свою рабочую нагрузку таким образом, чтобы все узлы в моем кластере получить свою долю работы? Кроме того, было бы здорово, если бы кто-то может предложить другой вариант (вместо использования менеджеров работают), до тех пор, как требования, изложенные в первом абзаце этого вопроса будут выполнены. но я не знаю, если работа менеджер будет распространяться необходимый контекст выполнения моих EJBs. Если настроить глобальную Работа диспетчера, когда я использую его, это позаботиться о автоматически распределять нагрузку между всеми узлами в моей группе? или все работы, отправленные на него будут выполняться в том же самом узле кластера, хотя в разных потоках? - если это так, как я мог распараллелить свою рабочую нагрузку таким образом, чтобы все узлы в моем кластере получить свою долю работы? Кроме того, было бы здорово, если бы кто-то может предложить другой вариант (вместо использования менеджеров работают), до тех пор, как требования, изложенные в первом абзаце этого вопроса будут выполнены. когда я использую его, это позаботиться о автоматически распределять нагрузку между всеми узлами в моей группе? или все работы, отправленные на него будут выполняться в том же самом узле кластера, хотя в разных потоках? - если это так, как я мог распараллелить свою рабочую нагрузку таким образом, чтобы все узлы в моем кластере получить свою долю работы? Кроме того, было бы здорово, если бы кто-то может предложить другой вариант (вместо использования менеджеров работают), до тех пор, как требования, изложенные в первом абзаце этого вопроса будут выполнены. когда я использую его, это позаботиться о автоматически распределять нагрузку между всеми узлами в моей группе? или все работы, отправленные на него будут выполняться в том же самом узле кластера, хотя в разных потоках? - если это так, как я мог распараллелить свою рабочую нагрузку таким образом, чтобы все узлы в моем кластере получить свою долю работы? Кроме того, было бы здорово, если бы кто-то может предложить другой вариант (вместо использования менеджеров работают), до тех пор, как требования, изложенные в первом абзаце этого вопроса будут выполнены.
Óscar López
2

голосов
0

ответ
394

Просмотры

Параллельный поиск асинхронный из Stackexchange.Redis не чувствует параллельно

I am trying to read and process some data from Redis in parallel. However, after printing various time stamps of when operations start and end and measuring such times it seems as if the tasks do not happen in parallel. I've extracted a small console app (from which I removed the console prints): public async Task WorkAsync() { var redis = ConnectionMultiplexer.Connect(...); var database = redis.GetDatabase(); Task task1 = Task.Run(async () => { return await database.HashGetAllAsync("some stored hash key"); }); Task task2 = Task.Run(async () => { return await database.HashGetAllAsync("another stored hash key"); }); await Task.WhenAll(new[] { task1, task2 }); } What I notice here is that the two tasks arrive at the HashGetAllAsync method calls virtually simultaneously (so parallelism OK so far) but then somehow there seems to be some contention over the database or multiplexer object. When commenting each of the tasks in turn, they each take roughly the same time to complete. When I run both of them as in the example above, the second one that finishes will always take much more time than the first (giving me a strong feeling that the second Redis call somehow waits for the first to complete). If I change the code so I make the multiplexer a local variable inside each task then they will behave as I expect (they finish about the same moment). public async Task WorkAsync() { Task task1 = Task.Run(async () => { var redis = ConnectionMultiplexer.Connect(...); var database = redis.GetDatabase(); return await database.HashGetAllAsync("some stored hash key"); }); Task task2 = Task.Run(async () => { var redis = ConnectionMultiplexer.Connect(...); var database = redis.GetDatabase(); return await database.HashGetAllAsync("another stored hash key"); }); await Task.WhenAll(new[] { task1, task2 }); } I know the documentation says that one should really not make more multiplexer instances but just one and store it, and that the multiplexer is optimized for heavily concurrent access. I don't know how to validate that the calls to the Redis server actually "leave" the Redis library at the same time (I tried procmon but instead of just 2 TCP events I see much more so that didn't clear up much). I really can't figure out why this behavior or whether I am not going about the best way of getting and processing Redis data in parallel.
CyberDude
2

голосов
0

ответ
73

Просмотры

Why is my scanner code so slow with Pthread or OpenMP?

I want to scan one array and get the scanning result . In My code , I make a disorder array with the shuffle function. then scan it get some number ( which is bigger than 60000 ). I split the array into threadnum-part ,every thread get one part to deal with. It seems that there are no shared memory between different thread. So, why the two parallel code is so slow, since it is too slow ,I think the padding things maybe not the main reason. Could anyone give me some tips ? I am a beginner in parallel programming ,thank you. here is my testing code with three part: serialization/Pthread/OpenMP. you can copy it and test on your own machine. serialization code : #include #include #include #define N (65532) #define threadnum 2 typedef struct{ int *mydata; int *myres; int val; int datalen; int reslen; int tid; }arg_t; int randint(int i, int k){ int ret; if(i> k){ int t= i;i=k;k=t; } ret = i + rand()%(k-i+1); return ret; } void shuffle(int *org,int n){ int j=0,i; for(i = n-1;i !=0;i--){ j = randint(0,i); int t = org[j];org[j] = org[i];org[i] =t; } } void scan(arg_t *arg){ int i; arg->reslen=0; for(i=0;idatalen;i++){ //if(arg->mydata[i] > arg->val){ arg->myres[arg->reslen] = arg->mydata[i]; arg->reslen +=(arg->mydata[i] > arg->val); //} } } int main(){ struct timeval begin,end; int i,A[N],*res,reslen,perthread; double diff_usec; arg_t args[threadnum]; for(i=0;i arg->val){ res[reslen] =A[i]; reslen +=(A[i] > 60000); //} } gettimeofday(&end,NULL); diff_usec = (((end).tv_sec*1000000L + (end).tv_usec)- ((begin).tv_sec*1000000L+(begin).tv_usec)); printf("\n%.4lf %d\n",diff_usec,reslen); return 0; } Pthread code : #include #include #include #include #define N 65532 #define threadnum 2 typedef struct{ int *mydata; int *myres; int val; int datalen; int reslen; int tid; }arg_t; int randint(int i, int k){ int ret; if(i> k){ int t= i;i=k;k=t; } ret = i + rand()%(k-i+1); return ret; } void shuffle(int *org,int n){ int j=0,i; for(i = n-1;i !=0;i--){ j = randint(0,i); int t = org[j];org[j] = org[i];org[i] =t; } } void scan(arg_t *arg){ int i; arg->reslen=0; for(i=0;idatalen;i++){ //if(arg->mydata[i] > arg->val){ arg->myres[arg->reslen] = arg->mydata[i]; arg->reslen +=(arg->mydata[i] > arg->val); //} } } int get_time(struct timespec *begin , struct timespec *end){ return 1000 * (end -> tv_sec - begin -> tv_sec) + (end -> tv_sec - begin->tv_sec)/1000000; } int main(){ struct timeval begin,end; //struct timespec begin,end; int i,A[N],*res,reslen,perthread; arg_t args[threadnum]; double diff_usec; pthread_t tid[threadnum]; for(i=0;itv_sec)/1000000; } int randint(int i, int k){ int ret; if(i> k){ int t= i;i=k;k=t; } ret = i + rand()%(k-i+1); return ret; } void shuffle(int *org,int n){ int j=0,i; for(i = n-1;i !=0;i--){ j = randint(0,i); int t = org[j];org[j] = org[i];org[i] =t; } } void scan(arg_t *arg){ int i; arg->reslen=0; for(i=0;idatalen;i++){ //if(arg->mydata[i] > arg->val){ arg->myres[arg->reslen] = arg->mydata[i]; arg->reslen +=(arg->mydata[i] > arg->val); //} } } int main(){ struct timeval begin,end; //struct timespec begin,end; int i,A[N],*res,reslen,perthread; double diff_usec; arg_t args[threadnum]; for(i=0;i
Youth92
2

голосов
0

ответ
973

Просмотры

Сохранение в цикле Еогеаспа (R пакет)?

Я использую пакет Еогеасп запустить метод Монте-Карло в параллельном режиме с использованием высокопроизводительных вычислений. У меня неты проблем с Еогеаспом возвращающего результаты, я хочу, но мне интересно, если это возможно, чтобы периодически сохранять рабочее пространство. Поэтому я спрашиваю, что я должен указать walltime (после чего работа прекращается), и поэтому я рискую 1. устанавливая walltime слишком низко, и потерять все, что до того, как цикл Еогеасп закончил и спас мой выход или 2. Установка консерватор walltime и тратить свою квоту. В идеале я хотел бы иметь возможность периодически сохранять свой вывод, в этом случае я все еще есть данные, если работа заканчивается. Например: результаты
yidryi
7

голосов
0

ответ
112

Просмотры

parList vs parTraversable

Я нашел «странное» поведение здесь. Я получил это: {- # LANGUAGE BangPatterns # -} импорта Data.List импорта Control.Parallel импорта Control.Parallel.Strategies приврать 0 = 1 FIB 1 = 1 п = FIB FIB (п-1) + FIB (п-2) Основной = пусть хз = [FIB (20 + п `mod` 2) | п Стратегии [а] тест Strat хз = сделать parTraversable STRAT XS - случай # 1 - parList STRAT XS - случай # 2 возврата хз случай # 1 означает использование parTraversable, случай # 2 означает использование parList. Результаты различны: случай # 1: ИСКРЫ: 1001 (1 преобразуются, 0 переполнены, 0 рвань, 1000 GC'd, 0 заторможена) Случай # 2: ИСКРЫ: 1001 (1000 конвертировано, 0 переполнена, 0 рвани, 0 «GC д, 1 заторможен) насколько я знаю, parList такое же, как parTraversable. В Control / Parallel / Strategies.hs: parTraversable :: Traversable т => Стратегия а -> Стратегия (та) parTraversable страты = evalTraversable (rparWith страты) parList :: Стратегия -> Стратегия [а] parList = parTraversable Поэтому я предположил, что они должны действовать так же. Все, что нужно, чтобы быть открывай здесь? Обновление # 1: Команды для компиляции и запуска: стек GHC - -O2 -threaded -rtsopts -eventlog parlist2.hs ./parList2 + RTS -N2 -s
Vũ Tô
3

голосов
0

ответ
318

Просмотры

Julia: Параллельный код медленнее, чем последовательный код

Я пытаюсь использовать параллелизм, чтобы ускорить свой код в Джулию, но мой код работает быстрее без распараллеливания (серийный для петель). Ниже я придерживаюсь простого примера из документации Джулии и серийный код намного быстрее, чем параллельный. (Добавление двух матриц д и и) @everywhere функцию MyRange (д :: SharedArray) IDX = indexpids (д) если IDX == 0 # Этот рабочий не назначается кусок возврата 1: 0, 1: 0 конец nchunks = длина ( проки (кв)) расщепляется = [круглый (Int, ов) для s в LINSPACE (0, размер (д, 2), nchunks + 1)] 1: размер (д, 1), расщепляется [IDX] +1: расколов [IDX + 1] конец # Вот кернфункция @everywhere advection_chunk! (д, и, IRange, jrange) @show (IRange, jrange) # дисплей таким образом, мы можем видеть, что происходит на J в jrange, я в IRange ц [я , J] = Q [I, J] + и [I, J] конец д конец advection_serial! (д, и) = advection_chunk! (Q, U, Я сделал что-то неправильно? Есть в любом случае, что я могу сделать параллельный код быстрее в этом примере?
Minsu Chang
2

голосов
0

ответ
136

Просмотры

параллельный процесс общего участка

Я использую doSNOW пакет в R и имеют параллельный процесс. Я хочу, чтобы создать сюжет, который будет обновляться, как каждый поток вычисляет Datapoint, так что я могу жить контролировать свой процесс. Как я могу это сделать в R? Приведенный ниже код должен ждать, пока все нити не закончили. библиотека (doSNOW) кл
user1042267
2

голосов
0

ответ
35

Просмотры

Какие решения парадигм используются для высокопроизводительных вычислений?

В чем разница между "Active Global Address Space (AGAS)" и "Разделенный Global Address Space (PGAS)" используется для высокопроизводительных вычислений? Это не конкретный вопрос о реализации, так что я думаю, что эта информация будет достаточно. Например: (программное обеспечение, основанное) AGAS используется HPX C ++ во время выполнения системы и PGAS использовалась параллельных языков программирования, таких как Капелла, СКП и т.д.
PreeJackie
3

голосов
0

ответ
64

Просмотры

Параллельный цикл работает на / с членами класса

Я пытаюсь использовать OpenMP для распараллеливания отдельных разделов относительно сложной имитационной модели автомобиля я программирование на C ++. Вся модель состоит из нескольких вложенных классов. Каждый экземпляр класса «автомобиль» имеет четыре экземпляра класса «подвески», и каждый из них имеет один экземпляр класса шин. Там совсем немного больше, но это не должно иметь отношения к этой проблеме. Я пытаюсь распараллелить обновление подвески на каждом шаге интегрирования с кодом, который выглядит следующим образом. Этот код является частью другого класса, содержащего другие данные simuation, в том числе один или несколько автомобилей. для (INT = 0 ICAR; ICAR <этом-> numberOfCars; ICAR ++) {omp_set_num_threads (4); #pragma OMP для параллельной графики (статический, 1) для (INT iSuspension = 0; iSuspension <4; iSuspension ++) {this-> автомобили [ИКАР] .suspensions [iSuspension] .update (); }} Я действительно упростил его немного и изменил имена переменных в надежде сделать его немного более понятным (и не в маскировке проблемы doning так!) Метод «обновление» просто вычисляю некоторые данные соответствующей суспензии на каждом шаг времени и сохраняет его в течение нескольких proporties своего собственного экземпляра класса Suspension. Все экземпляры класса подвески независимы друг от друга, так что каждый вызов метода «обновление» доступ только к данным, содержащимся в одном экземпляре «подвески». Поведение, которое я получаю с помощью отладчика можно описать следующим образом: в первый раз цикл запуска (на первом временном шаге моделирования) он работает нормально. Всегда. Все четыре суспензий обновляются правильно. Второй раз цикл выполняется, или, самое позднее на третьем, по меньшей мере, одной из суспензий стали обновленным с correpted данных. Это довольно часто, что две подвески становятся точно такими же (испорченные) данные, которые не должны быть возможным, так как они сконфигурированы с самого начала с несколько другими параметрами. Если я запускаю его с одной петлей вместо четырех (omp_set_num_threads (1)) он работает безупречно. Само собой разумеется, то же самое, когда я запускаю его без каких-либо директив препроцессора OpenMP. Я знаю, что не может быть возможным, чтобы выяснить решение проблемы, не зная, как остальная часть программы работает, но я надеюсь, что кто-то может сказать, по крайней мере, если есть какая-либо причина, почему вы просто не можете получить доступ к свойствам и методам класса в параллельном цикле OpenMP Кстати я м, пытаясь сделать это. Я использую W10 и Visual Studio 2017 Community. Я попытался скомпилировать проект и без оптимизаций, без разницы. Заранее большое спасибо!
2

голосов
0

ответ
106

Просмотры

В есть способ выполнить в параллельных быстрых «потоков»?

Поскольку Swift поддерживает интерфейс / методы Java потока (карта, фильтр, уменьшить и т.д.) по умолчанию для Массивы мне было интересно, если есть поддержка для параллельного выполнения, как и в Java? Например, [1,2,3] .parallel () отображение {х -> х * 2}. .Filter {х -> условие (х)} и т.д. В Java, если потоки "запрограммированы правильно", то есть фаза сумматор все сделано правильно, то распараллеливание работы очень легко, просто добавив параллельный (вызов) в цепи.
denis631
2

голосов
0

ответ
1.1k

Просмотры

p4 синхронизации параллельно на Linux дает «Perforce пароль (P4PASSWD) недействительным или снята с охраны.» ошибка

Я пытаюсь улучшить неволей синхронизации производительности на Linux с помощью --parallel вариант, но постоянно получаю сообщение об ошибке повторяется один раз для каждого потока указываю: неволей пароль (P4PASSWD) недействительный или отключенное. Если я устанавливаю P4PORT, P4USER, P4PASSWD и P4CLIENT переменные окружения, а затем сделать простой p4 синхронизации, она отлично работает. Если я использую следующую команду я получаю сообщение об ошибке 4 раза (один раз для каждого потока): p4 синхронизация --parallel «нить = 4, мин = 1, мин_разм = 1» Если я указать пароль, как глобальные в командной строке , я получаю один и тот же: стр.4 -P PASSWD синхронизации --parallel «нити = 4, мин = 1, мин_разм = 1» Если я получу билет первого использования p4 логин -p и заменить, что для пароля в синхронизации команды я получаю тот же самый.
Ian W
2

голосов
0

ответ
667

Просмотры

QtConcurrent со статической функции-члена

Я успешно распараллеливание некоторую работу с не-статической функции-члена в QtConcurrent :: Run (). Я сейчас пытаюсь осуществить распараллеленную работу с статической функцией члена. У меня есть случайный класс, и я хочу, чтобы позвонить рандов (двойной, двойной) статическую функцию на одном точном случае: это генератор случайных чисел, и я хочу, чтобы запустить поток вызывающего runif на вновь посеянных генератора. Я попробовал это здесь (класс solveParallel простой класс, где у меня есть runRandom () и функция resultRandom (), вызов QtConcurent :: прогонов и QFuture :: результат () соответственно): недействительные solverParallelData :: runRandom (Уст двойной & d1, Const двойной & d2) {futureRandom = QtConcurrent :: Run (Random :: Rand, этом-> m_generator, d1, d2); } И ошибка компиляции «не может вывести аргумент шаблона в качестве аргумента функции неоднозначен»:: любой ключ? Спасибо и привет.
octoback
0

голосов
0

ответ
4

Просмотры

Реализация нерегулярных связи точка-точка

У меня есть процессы Н MPI. Каждый процесс должен отправить на некоторые другие процессы массивов данных (целые числа). Массивы должны отправить имеют разные размеры. Все процессы знают, к / от кого отправлять / получать и сколько. Например, есть N = 4 процессов MPI (P). Р0 посылает: 2 Интс к P1, 5 Интс к Р2, 6 INTS к P3 P1 посылает: 3 INTS к P2, 4 Интс к P3 P2 посылает: ничего, только принимает. P3 посылает: 3 Интс Р1 Каков наилучший способ организовать такой обмен данными? Я имею в виду следующее: Пусть C (S, D) обозначают количество данных, которые должны быть отправлены из процесса S для обработки D. На каждом процесса Р: 1. При R = 0 ... N-1 {если C (R, Р)> 0 вызов MPI_IRECV (источник = R Count = C (R, Р), ...)} 2. при R = 0 ... N-1 {если С (Р, R)> 0 вызов MPI_Send ( назначения = R Count = C (R, Р), ...)} 3. MPI_WAITALL для запросов, созданных на шаге 1. Есть ли лучший подход? Этот обмен происходит только один раз во время выполнения.
user2052436
2

голосов
0

ответ
204

Просмотры

Как добавить пакеты управления DEoptim для Parellel вычислений в Linux?

Я недавно преобразовал мои окна R код для установки Linux для запуска DEoptim на функции. В моей системе окон все работало нормально, используя: анс
user2901667
3

голосов
0

ответ
484

Просмотры

Selenium / Appium Parallel Execution using JUnit 4

Trying to execute appium tests parallely on multiple devices. Idea goes like initiating JUnitRunner class as parameterized (e.g. deviceList) that creates parallel thread per device. From runner, invoking TestSuite via JUnitCore.run. Problem is that instantiating driver in test cases need device name (probably from Runner class), but JUnitCore doesnt provide such option (to invoke Suite / Test class by instantiating it). Any help? Code goes like: JUnitRunner.java @RunWith(Parallelized.class) // extension of the Parameterized runner public class JUTRunner { private String device; /** * @param device */ public JUTRunner(String device) { this.device = device; } /** * @return */ @Parameters public static Collection getParameters() { List deviceList = findAllDevices(); List parameters = new ArrayList(deviceList.size()); for (String device : deviceList) { parameters.add(new Object[] { device }); } return parameters; } /** * @return */ private static List findAllDevices() { return DeviceList.getInstance().getDeviceList(); } /** * @throws InterruptedException */ @Test public void testOnDevice() throws InterruptedException { Result result = JUnitCore.runClasses(JUTSuite.class); Result result = new JUnitCore().run(suite); for (Failure failure : result.getFailures()) { System.out.println(failure.toString()); } if (result.wasSuccessful()) { System.out.println("All tests finished successfully..."); } } } And TestCase.java public class MyTest extends TestCase { protected String device; protected AppiumDriver driver; private int deviceNum; @Rule public TestName testName = new TestName(); @Before protected void setUp() throws Exception { this.driver = new AndroidDriver(device).getDriver(); } @Test public void testLogin() { System.out.println(testName.getMethodName() + device); } }
user3386508
2

голосов
0

ответ
340

Просмотры

Python параллельное программирование «Нет отслеживающий доступен»

Я пытаюсь запустить параллельный код в Python с использованием ipyparallel пакета. импортировать ipyparallel в IPP # создать клиент и вид гс = ipp.Client () = DV гс [:] v = rc.load_balanced_view () Защиту мой (я): импорт NumPy как нп аа [:,:, I] = пр. точка (uanom_L [:,:, I-i_a: I + i_a + 1], lcoz_a) бб [:,:, I] = np.dot (uanom_L [:,:, I-I_b: I + I_b + 1] , lcoz_b) печать (я) возвращение аа, бб ааа = v.map (мой, np.arange (i_a, с-i_a)) aaa.get () Тем не менее, я получил следующее сообщение об ошибке, [3: применить]: Нет отслеживающий доступны [2: не применимо]: нет отслеживающий доступные [1: применять]: нет отладочных доступные [0: Нанести]: нет отладочных доступны 8773 больше исключений ... Любые идеи, спасибо
kernel
2

голосов
0

ответ
468

Просмотры

Neo4j параллельно обход апи

Ответ на этот пост (найти различные пути в базе данных Neo4j) рекомендует использовать Traversal API для идентификации конкретных путей в графе (см оригинальный вопрос) вместо Cypher запроса. Для графа, содержащего 10000 узлов API-интерфейс, возвращаемых результатов немедленно; гораздо быстрее, чем Cypher запроса. Я хотел бы создать те же результаты для графа, содержащего более 100 Мио. узлы. На основании простой проверки хода я добавил в код, идентифицирующий отчетливые пути вполне могут занять несколько часов. Файлы базы данных в общем ок 500 МБ. Память, похоже, не является проблемой, но процессор работает на 12% (на 8-основной машине) => он выглядит как процесс ЦП ограничен. Есть ли способ, чтобы сделать процесс запуска параллельно? Я использую Neo4j 2.1.3, JRE 1.7.0_51-b13 (64-Bit), стереосистеме и обновите на Windows 8. Большое спасибо!
2

голосов
0

ответ
48

Просмотры

Can I access the same vector from within nested parallel loops?

Я получаю в борьбу с тем, как #pragma OMP параллельна для работы, и мне интересно, если следующий код будет работать, или если я не использую в параллелизм правильно. Учитывая ввод вектора семенных решений с пользовательским классом Sol, я хочу, чтобы генерировать n_iter решения для каждого из этих семян, и поместить их все в один вектор. Простая версия этого кода: // ввод: СТД :: вектор seed_sols; // вектор, содержащий семенные растворы Int n_iter; // число итераций в семенах // создать структуру данных для хранения всех решений, которые будут созданы станд :: вектор Золи (seed_sols.size () * n_iter); #pragma OMP параллели для (INT seed_sol = 0; seed_sol <seed_sols.size (); ++ seed_sol) {Соль curr_seed = seed_sols [seed_sol]; #pragma OMP параллели для (INT I = 0; г <n_iter; ++ я) {золи [seed_sol * n_iter + I] = generateSol (curr_seed); }} Можно ли запустить две параллельные петли таким образом? и внутренний цикл на самом деле сделать что-нибудь, чтобы ускорить процесс, если я ограничен 4 нити, а размер seed_sols больше, чем 4? Могу ли я безопасно запустить этот код с помощью два параллельных циклов, даже если они получают доступ к тем же структурам данных, потому что нет никакого способа, которым они могут получить доступ и тот же элемент золей в то же время? Любая помощь будет принята с благодарностью, спасибо EDIT: Я успешно запустить код несколько раз без каких-либо ошибок, и это, кажется, работает достаточно хорошо. Однако я до сих пор не знаю, если это хорошая практика, или не parallelising такого рода код. и размер seed_sols больше 4? Могу ли я безопасно запустить этот код с помощью два параллельных циклов, даже если они получают доступ к тем же структурам данных, потому что нет никакого способа, которым они могут получить доступ и тот же элемент золей в то же время? Любая помощь будет принята с благодарностью, спасибо EDIT: Я успешно запустить код несколько раз без каких-либо ошибок, и это, кажется, работает достаточно хорошо. Однако я до сих пор не знаю, если это хорошая практика, или не parallelising такого рода код. и размер seed_sols больше 4? Могу ли я безопасно запустить этот код с помощью два параллельных циклов, даже если они получают доступ к тем же структурам данных, потому что нет никакого способа, которым они могут получить доступ и тот же элемент золей в то же время? Любая помощь будет принята с благодарностью, спасибо EDIT: Я успешно запустить код несколько раз без каких-либо ошибок, и это, кажется, работает достаточно хорошо. Однако я до сих пор не знаю, если это хорошая практика, или не parallelising такого рода код.
guskenny83
2

голосов
0

ответ
108

Просмотры

MPI_Finalize() won't finalize if stdout and stderr are redirected via freopen

У меня есть проблема с использованием MPI и перенаправления на стандартный вывод и стандартный поток ошибок. При запуске с несколькими процессами, если оба стандартный вывод и стандартный поток ошибок перенаправляются в (два разных) файлов, а затем каждые процессы будут получать stucked в MPI_Finalize (), ожидание до бесконечности. Но если только стандартный вывод или STDERR перенаправляется, то нет никаких проблем, и программа останавливается нормально. Я работаю на Windows 7 с интел MPI на визуальной студии 2013. Спасибо за вашу помощь! Ниже приведен простой код, который не работает на моем компьютере с 2-процессами (Mpiexec -np 2 mpitest.exe) #include #include #include INT основной (интермедиат ARGC, символ * ARGV []) {INT IERR = MPI_Init (& ARGC, и ARGV) ; ИНТ ранг, размер; MPI_Comm_rank (MPI_COMM_WORLD, & ранга); MPI_Comm_size (MPI_COMM_WORLD, и размер); Е ( "[% d /% d] Это напечатано на экране \ N", ранг, размер-1); // перенаправить выходные и ошибки при необходимости станд :: строка log_file = "log_" + станд :: to_string (ранг) + ".txt"; станд :: строка error_file = "err_" + станд :: to_string (ранг) + ".txt"; // Если один из двух следующих линии комментируется, то все работает отлично freopen (log_file.c_str (), «W», стандартный вывод); freopen (error_file.c_str (), "ш", STDERR); Е ( "[% d /% d] Это напечатано на файл_журнал \ п", звание, размер - 1); IERR = MPI_Finalize (); возвращать 0; } EDIT: Для тех, кто заинтересован, мы подаем эту ошибку в developper форум INTEL. Они были в состоянии воспроизвести ошибку, и работают, чтобы исправить это. В то же время, мы перенаправлять каждое сообщение Stderr на стандартный вывод (уродливый, но работает). // Если один из двух следующих линии комментируется, то все работает отлично freopen (log_file.c_str (), «W», стандартный вывод); freopen (error_file.c_str (), "ш", STDERR); Е ( "[% d /% d] Это напечатано на файл_журнал \ п", звание, размер - 1); IERR = MPI_Finalize (); возвращать 0; } EDIT: Для тех, кто заинтересован, мы подаем эту ошибку в developper форум INTEL. Они были в состоянии воспроизвести ошибку, и работают, чтобы исправить это. В то же время, мы перенаправлять каждое сообщение Stderr на стандартный вывод (уродливый, но работает). // Если один из двух следующих линии комментируется, то все работает отлично freopen (log_file.c_str (), «W», стандартный вывод); freopen (error_file.c_str (), "ш", STDERR); Е ( "[% d /% d] Это напечатано на файл_журнал \ п", звание, размер - 1); IERR = MPI_Finalize (); возвращать 0; } EDIT: Для тех, кто заинтересован, мы подаем эту ошибку в developper форум INTEL. Они были в состоянии воспроизвести ошибку, и работают, чтобы исправить это. В то же время, мы перенаправлять каждое сообщение Stderr на стандартный вывод (уродливый, но работает). } EDIT: Для тех, кто заинтересован, мы подаем эту ошибку в developper форум INTEL. Они были в состоянии воспроизвести ошибку, и работают, чтобы исправить это. В то же время, мы перенаправлять каждое сообщение Stderr на стандартный вывод (уродливый, но работает). } EDIT: Для тех, кто заинтересован, мы подаем эту ошибку в developper форум INTEL. Они были в состоянии воспроизвести ошибку, и работают, чтобы исправить это. В то же время, мы перенаправлять каждое сообщение Stderr на стандартный вывод (уродливый, но работает).
bertbk
3

голосов
0

ответ
4.3k

Просмотры

Using of tasks in openmp for recursive calls

Это пример программы с использованием OpenMP задач. В спецификации он отметил, что, как мы столкнулись с задачей в параллельной области будет назначен на поток. Теперь я не мог понять, что происходит в этом сценарии. В каждом рекурсивном вызове создается задача. Каждая задача будет иметь его собственное стек пространство и будет уничтожена, когда задача выполнена. Можете ли вы объяснить, как значения в рекурсивных вызовах preseved даже если переменные являются общими? #include "stdio.h" INT com_fib (Int N) {INT F, Fn2, fn1; // F (п) = е (п-1) + F (п-2), если (п == 0 || п == 1) возвращение п; если (п <20) возврата (com_fib (п-1) + com_fib (п-2)); #pragma OMP задача совместно (fn1) {fn1 = com_fib (п-1); } #Pragma OMP задача совместно (Fn2) {Fn2 = com_fib (п-2); } #Pragma OMP taskwait е = fn1 + FN1; вернуться п; } Силы основных (INT ARGC, символ * ARGV []) {INT результат; // Е (»
xenres