Вопросы интеграции часовня-питон - PullRequest
6 голосов
/ 11 октября 2019

Я пытаюсь понять, могу ли я использовать Chapel для написания параллельного кода для использования в модели климата на основе Python: https://github.com/CliMT/climt

У меня нет опыта работы с Chapel, но, похоже,очень перспективный для моего варианта использования. У меня было несколько вопросов о том, как интегрировать код Chapel в мой текущий рабочий процесс:

  1. Я знаю, что вы можете создавать импортируемые .so файлы, но можно ли остановить сборкукогда генерируется файл Cython? Затем я могу включить его в дистрибутив и использовать стандартный setuptools для компиляции моего проекта на Travis.

  2. Могу ли я передать numpy* 1020? * массивы для расширения Python, написанные в часовне?

  3. Если ответ на вопрос 2. да, и мои вычисления смущающе параллельны в одном измерении массива, есть ли элегантный способ выразить этот паралеллизм в часовне?

  4. Если я напишу код Chapel, который работает на нескольких узлах, и скомпилирую его в расширение Python, как мне его запустить? Могу ли я использовать mpirun python my_code.py вид команды?

1 Ответ

7 голосов
/ 11 октября 2019
  1. К сожалению, пока нет. Однако мы оставляем сгенерированные файлы .pxd и .py (x) в каталоге вместе с .so, чтобы вы могли использовать их в это время (это не был функциональный запрос, который мы рассмотрели, так что если вычувствую себя мотивированным, определенно не стесняйтесь открывать проблему на нашей странице Github: https://github.com/chapel-lang/chapel/issues).

    Для справки, мы делаем это, потому что команда компиляции Cython довольно сложная. флаг компиляции chpl --print-commands, но это не так (я сделаю для этого вопрос).

  2. Вы можете передавать одномерные массивы numpy известных примитивовтипы в Chapel из Python. Мы надеемся добавить поддержку других массивов numpy в ближайшее время (надеюсь, в 1.21, намечено на март 2020 г.)

  3. Это определенно выполнимо для массивов в Chapel - Iрекомендовал бы использовать цикл forall при обходе этого измерения вашего массива для ваших вычислений, который разделит индексы в этом измерении на ряд задач, определяемыхЧасовня. (Для тех, кто не знаком с forall петлями, эта ссылка дает хороший обзор концепции)

Например:

forall x in arr.domain.dim(1) {
  // traverses the first dimension of arr's domain in parallel
  ...
}
Если вы компилируете свою библиотеку Chapel в расширение Python с настройками нескольких локалей, вы можете указать необходимое количество локалей (узлов), используя аргумент numlocales для функции chpl_setup расширения. Это поможет распределить код Chapel для вас при запуске вашей программы на Python.

Например, вы можете написать:

import MyChplLib

MyChplLib.chpl_setup(4)
...

, чтобы запустить вашу программу с 4locales (узлы).

Я, вероятно, должен упомянуть, что в версии 1.20 у нас нет поддержки аргументов массива в многослойных библиотеках. Мы все еще выясняем приоритеты для выпуска 1.21, так что отзывы о том, как быстро вы хотите, было бы очень полезно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...