我想在单个C ++程序中创建多个Caffe实例,这样我就可以使用多个GPU,但Caffe似乎是一个单例实例。我可以运行使用Caffe的单独程序,并为每个程序分配一个独特的GPU。多程序方法不像我从一个程序中运行它们那样容易管理。
答案 0 :(得分:3)
#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);
我希望这会对你有所帮助。根据需要修改结构并创建多个实例。 参考:感谢tutorialspoint