创建多个 Caffe 实例 - C++
Create multiple Instances of Caffe - C++
我想在单个C++程序中创建多个Caffe实例,以便我可以使用多个GPU,但Caffe似乎是一个单例实例。我可以运行使用 Caffe 的单独程序,并为每个程序分配一个唯一的 GPU。多程序方法不像我从单个程序运行它们那样容易管理。
@Apexdev,我遇到了类似的问题。我想在同一数据集上测试多个模型。以前我曾经使用与您不同的脚本进行测试,现在我可以使用相同的脚本调用所有脚本。这是对我有用的解决方案...头文件:
#include <pthread.h>
第 1 步:定义一个我们将传递给线程参数的结构
Ex. struct thread_Arguments {
int GPU_id;
std::string Model;
std::vector<std::string> list;
};
步骤 2:创建一个将执行所需任何操作的函数
void *MultiscriptInvoke(void *threadarg) {
struct thread_Arguments *Newthread;
Newthread = (struct thread_Arguments *) threadarg;
std::string modelFile = Newthread->Model;
int GPU_ID = Newthread->GPU_ID;
// Terminate thread using
pthread_exit(NULL);
}
步骤 3:定义线程创建
pthread_t threads[NUM_THREADS];
pthread_attr_t attr;
void *status;
步骤 4:初始化线程
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
struct thread_Arguments td[NUM_THREADS];
步骤 5:创建线程
for (i = 0; i < NUM_THREADS; i++) {
td[i].GPU_ID = GPU1[i];
td[i].Model = ModelName[i];
rc = pthread_create(&threads[i], NULL, MultiscriptInvoke, (void *)i );
if (rc) {
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
步骤 6:等待线程完成
pthread_attr_destroy(&attr);
for( i = 0; i < NUM_THREADS; i++ ) {
rc = pthread_join(threads[i], &status);
if (rc) {
cout << "Error:unable to join," << rc << endl;
exit(-1);
}
}
pthread_exit(NULL);
我希望这对你有帮助。根据需要修改结构并创建多个实例。参考: 感谢教程点
相关文章:
- 从C++实例化QML
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- 建议在运行时将带有类实例的列表从c++导入qml
- 约束和显式模板实例化
- 通过实例理解std::move及其目的
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 正在生成未知类实例
- 从DLL中删除类的实例
- 在std::vector上存储带有模板的类实例
- 为什么创建友元类的实例会导致"undefined reference to"错误?