创建多个 Caffe 实例 - C++

Create multiple Instances of Caffe - C++

本文关键字:C++ 实例 Caffe 创建      更新时间:2023-10-16

我想在单个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); 

我希望这对你有帮助。根据需要修改结构并创建多个实例。参考: 感谢教程点