Первое, что нужно отметить, - это то, что тензорный поток будет использовать все ядра для обработки по умолчанию.У вас есть некоторый ограниченный способ контроля над этим через внутренний и внутренний параллелизм, обсуждаемый в этом авторитетном ответе:
Tensorflow: выполнение операций с определенным ядром ЦП
Второй момент, на который следует обратить внимание, это то, что сеанс является потокобезопасным.Вы можете позвонить позвонить из нескольких потоков.Каждый вызов будет видеть непротиворечивый моментальный моментальный снимок переменных, какими они были в момент начала вызова. Это вопрос, который я задал однажды:
Как переменные распределяются между одновременными `session.run (...) `вызывает в tenorflow?
Мораль:
Если вы выполняете много небольших последовательных операций, вы можете запуститьони одновременно работают с одним сеансом и могут выкашлять некоторую улучшенную производительность, если вы ограничите использование параллелизма в tenorflow.Если вы выполняете большие операции (например, большое матричное умножение), которые больше выигрывают от распределенной многоядерной обработки, вам не нужно заниматься параллелизмом самостоятельно, по умолчанию тензорный поток уже распределяется по всем ядрам ЦП.
Также, если ваши зависимости графа поддаются любой степени параллелизации, тензорный поток также справляется с этим.Вы можете настроить профилирование, чтобы увидеть это в действии.
https://towardsdatascience.com/howto-profile-tensorflow-1a49fb18073d