Если вы хотите добавить 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 .
. ]
См. Нежное введение в Glasgow Parallel Haskell.
Параллелизм вводится в GPH комбинатором
par
, который принимает два аргумента, которые должны быть вычислены в параллели. Выражениеp `par` e
(здесь мы используем нотацию инфиксных операторов Haskell) имеет то же значение, что иe
, и не является строгим по своему первому аргументу, то естьbottom` par` e
имеет значениеe
. (bottom
обозначает непрерывное или неудачное вычисление.) Его динамическое поведение должно указывать на то, чтоp
может быть оценено новым параллельным потоком, при этом родительский поток продолжает оценку] e
. Мы говорим, чтоp
было искровым , и впоследствии может быть создан поток для его оценки, если процессор становится неактивным. Поскольку поток не обязательно создается,p
похож на ленивое будущее .
[Курсив в оригинале]
Искры - это не потоки. forkIO
вводит потоки Haskell (которые отображаются на меньшее количество реальных потоков ОС). Искры создают записи в рабочих очередях для каждого потока, из которых они берут задачи для выполнения, если поток становится неактивным.
В результате искры очень дешевы (у вас могут быть миллиарды их в программе, в то время как вы, вероятно, не будет иметь более миллиона потоков Haskell и менее дюжины потоков ОС на полдюжине ядер).
Подумайте об этом так:
Если я правильно понимаю, искра - это запись в очередь работ, требующих работы. Пул потоков берет записи из этой очереди и запускает их. Обычно на каждый физический процессор приходится один поток, поэтому эта схема максимизирует пропускную способность и минимизирует переключение контекста потока.
Похоже, это похоже на «задачу» в Intel Threading Building Blocks.