找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 600|回复: 2

用两个CPU线程在同一个GPU上初始化两个caffe,可以并行吗?

[复制链接]
发表于 2018-5-15 16:42:55 | 显示全部楼层 |阅读模式
ESC4000G3
    我现在开了两个线程,每个线程初始化一个caffe,前向运算的时候耗时非常大,
   线程里头就初始化一下,并没有其他操作
DWORD WINAPI ThreadProc1(__in  LPVOID lpParameter)
{
caffe::Caffe::set_mode(caffe::Caffe::GPU);
caffe::Caffe::SetDevice(0);
std::unique_ptr<caffe::Net<float>> upCaffeNet;        upCaffeNet.reset(new caffe::Net<float>{ modelpath, caffe::TEST });
for (int i = 0; i < 50; i++)
{
clock_t start = clock();
upCaffeNet->ForwardFrom(0);
clock_t finish = clock();
printf("used time 111 = %d\n", finish - start);
}
        return 0;
}


int main()
{
    HANDLE hThread[2] = { 0 };
        int first = 1, second = 2;
        hThread[0] = CreateThread(NULL, 0, ThreadProc1, (LPVOID)first, 0, NULL);
        hThread[1] = CreateThread(NULL, 0, ThreadProc2, (LPVOID)second, 0, NULL);
        WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
        CloseHandle(hThread[0]);
        CloseHandle(hThread[1]);
}
结果就是开两个线程比开一个线程打印出来的时间是加倍的,是因为caffe里面没有并行吗?
还有一种方案是,我在main函数里头初始化caffe,线程里面只运行upCaffeNet->ForwardFrom(0);相当于两个线程共用一个caffe,打印出来的时间依然是加倍的。
回复

使用道具 举报

发表于 2018-5-17 14:38:37 | 显示全部楼层
Jetson TX2
什么显卡?用跑的什么任务?
“开两个线程比开一个线程打印出来的时间是加倍的”我理解的意思是,单个线程的时间是T,开两个线程,每个线程的时间都是2T,对么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-17 16:18:26 | 显示全部楼层
Tesla P100
谢谢您的回复,就是这个意思,显卡是GeForce GTX 1080
后面是要做图像处理的,但是其他都还没开始做,仅仅只是初始化了caffe,跑了一句ForwardFrom(0),打印的就是这句代码的时间,开一个线程,这句花费40ms,跑两个线程花费80ms,所以,我想请问是否一块GPU上同一时刻只能跑一个caffe?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回顶部 返回列表