Что такое “искра” в Haskell

Если вы хотите добавить compile definition for target, вы можете использовать эту функцию target_compile_definitions, которая более удобна, например, добавить несколько compile definitions один раз, например:

add_executable (trie_io_test demo12.cpp)
target_compile_definitions(trie_io_test PRIVATE UNIT_TESTING=1 IO_TEST=1)

Вы можете увидеть этот вопрос как установить несколько определений компиляции для целевого исполняемого файла , чтобы получить дополнительную информацию также из этого https://cmake.org/cmake/help/v3.0/command/target_compile_definitions.html .

. ]

47
задан Paul Bellora 6 November 2014 в 20:09
поделиться

4 ответа

См. Нежное введение в Glasgow Parallel Haskell.

Параллелизм вводится в GPH комбинатором par , который принимает два аргумента, которые должны быть вычислены в параллели. Выражение p `par` e (здесь мы используем нотацию инфиксных операторов Haskell) имеет то же значение, что и e , и не является строгим по своему первому аргументу, то есть bottom` par` e имеет значение e . ( bottom обозначает непрерывное или неудачное вычисление.) Его динамическое поведение должно указывать на то, что p может быть оценено новым параллельным потоком, при этом родительский поток продолжает оценку ] e . Мы говорим, что p было искровым , и впоследствии может быть создан поток для его оценки, если процессор становится неактивным. Поскольку поток не обязательно создается, p похож на ленивое будущее .

[Курсив в оригинале]

32
ответ дан 26 November 2019 в 19:21
поделиться

Искры - это не потоки. forkIO вводит потоки Haskell (которые отображаются на меньшее количество реальных потоков ОС). Искры создают записи в рабочих очередях для каждого потока, из которых они берут задачи для выполнения, если поток становится неактивным.

В результате искры очень дешевы (у вас могут быть миллиарды их в программе, в то время как вы, вероятно, не будет иметь более миллиона потоков Haskell и менее дюжины потоков ОС на полдюжине ядер).

Подумайте об этом так:

spark model

92
ответ дан 26 November 2019 в 19:21
поделиться

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

3
ответ дан 26 November 2019 в 19:21
поделиться

Похоже, это похоже на «задачу» в Intel Threading Building Blocks.

0
ответ дан 26 November 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: