c++ - 如何在 C++ 中将一个 tensorflow 线程固定到一个特定的 CPU?
问题描述
我在 C++ 中有一个张量流推理任务,例如 TaskA 类,其中 inter_op_parallelism_threads=1 和 intra_op_parallelism_threads=1 使用单线程。
实际使用TaskA时,我会创建2个线程{t1, t2}来使用两个模型。我希望将所有 tensorflow 计算固定到某个 CPU,例如 CPU:0 上的 t1 和 CPU:3 上的 t2。
我尝试将某些线程固定到下面的 TaskA:
void UseTaskA() {
task = TaskA();
task.Run(); // similiar to session.Run()
}
int main() {
std::vector<int> cpu_index = {0, 3};
int num_threads = 2;
for (int i = 0; i < num_threads; ++i) {
std::thread t(UseTaskA);
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(cpu_index[i], &cpuset);
pthread_setaffinity_np(t.native_handle(), sizeof(cpu_set_t), &cpuset);
}
}
但这只能将 UseTaskA() 函数固定到某个 CPU,tensorflow 将创建自己的线程并可能使用其他 CPU。
有没有办法将 tensorflow 的会话运行固定到某个 cpu?
注意:我的问题与“如何在 CPU 上运行 tensorflow”不同。它实际上是在创建多个会话时如何将每个 tensorflow 会话绑定到某个 CPU。
解决方案
推荐阅读
- deep-learning - 在 PyTorch 中使用 transforms.FiveCrop()/TenCrop() 时遇到问题
- python - 没有 CSS 的 Pandas Dataframe HTML 对齐?
- vba - 将 Vb 脚本“mattachmentsaver”更改为不获取电子邮件正文图片而仅获取附件
- r - 我可以编辑某种类型的 R Studio 配置文件,而不是通过 GUI 更改所有选项吗?
- javascript - 通过 chrome 扩展更改当前页面的 javascript
- python - 从另一个模块 Python 调用函数
- oracle - 在 oracle 中为逗号分隔值创建 catsearch 索引
- javascript - 为什么 javascript Event.target 不起作用
- scala - Spark检查数据框数组中的任何单词是否包含在另一个列表中?
- c++ - std::vector 不接受我的结构作为模板