从源代码构建 TensorFlow 2.x(用于 CPU)时,我应该进行哪些更改以强制 TensorFlow不使用超过 1 个线程?如果这是不可能的,我应该更改哪些特定的 c++ 语句(以及在哪些 cpp 文件中)以抑制多线程的生成?
无论 CPU/内核的数量是多少,我总共需要 1 个来自 TensorFlow 2.x 的线程。
用于top -H -b -n1 | grep program_name | wc -l
计算线程总数。
从源代码构建 TensorFlow 2.x(用于 CPU)时,我应该进行哪些更改以强制 TensorFlow不使用超过 1 个线程?如果这是不可能的,我应该更改哪些特定的 c++ 语句(以及在哪些 cpp 文件中)以抑制多线程的生成?
无论 CPU/内核的数量是多少,我总共需要 1 个来自 TensorFlow 2.x 的线程。
用于top -H -b -n1 | grep program_name | wc -l
计算线程总数。
解决方案是在 C++ 中您可以为会话提供的选项:
// set the number of worker threads
tensorflow::SessionOptions options;
tensorflow::ConfigProto & configuration = options.config;
configuration.set_inter_op_parallelism_threads(1);
configuration.set_intra_op_parallelism_threads(1);
configuration.set_use_per_session_threads(false);
mySession->reset(tensorflow::NewSession(options));
这样,您将只有一个工作线程。
但这不能确保top -H -b -n1 | grep program_name | wc -l
命令仅返回 1 个线程。事实上,在上面的例子中,我们谈到了一个工作线程,但可以肯定的是,至少有一个主线程来管理工作线程的生成和返回。