为什么多GPU和单GPU运行时间相同?

主要结构如下
main()
{
cudaSetDevice(0)
cudaMalloc()
cudaSetDevice(1)
cudaMalloc()

while (i<100000)
{
some cpu code;//只占不超过5%的时间

start_Si2 = clock();
cudaSetDevice(0)
cudaMemcpyAsyncHtoD()

cudaSetDevice(1)
cudaMemcpyAsyncHtoD()

cudaSetDevice(0)
kernel1<<<N,M>>>
kernel2<<<N,M>>>
kernel3<<<N,M>>>
cudaMemcpyAsyncDtoH()

cudaSetDevice(1)
kernel1<<<N,M>>>
kernel2<<<N,M>>>
kernel3<<<N,M>>>
cudaMemcpyAsyncDtoH()
end_Si2=clock()
CPU_Si2=CPU_Si2+(end_Si2-start_Si2);

start_Si1 = clock();
cudaDeviceSynchronize()
end_Si1=clock()
CPU_Si1=CPU_Si1+(end_Si1-start_Si1);
}
}

最后结果是时间百分比
Si1:50-60%
Si2:20-30%

win7 vc2010express+cuda4.0
cudaSetDevice全部设置为cudaSetDevice(0)的运行时间和上述代码时间相同??为什么???
求解!!

再次求解啊!感激不尽!

是用函数统计的时间吗?若是,贴出来

代码看起来没问题。最简单的解释是GPU的计算时间不占程序的大部分。最好第一步你先分别测一下程序里几部分的时间(程序总时间,cpu计算时间,GPU计算时间等)。然后把理论的多GPU期待值与实测值比较。

一、是否有多个GPU,且可用
二、不同的gpu是不是真的同时工作了,还是只是看起来如此,实际上是串行的

人工置顶一下
多GPU确实是可用,程序中都有活动,不过我不知道怎么看是否真正并行
求解:)

人工置顶一下

受益匪浅学习了

受益匪浅,赚钱了

你的 多GPU 运行了吗?

请看http://cudabbs.it168.com/thread-4089-1-1.html

我又试了一下,提高计算量以后2GPU比单GPU稍快,
使用双GPU时,
CPU_Si1:66%
CPU_Si2:13%

使用单GPU时,
CPU_Si1:0.1%
CPU_Si2:0.1%

请问可能是什么原因?

试试改一下这样做循环体内的同步:

cudaSetDevice(0);

cudaDeviceSynchronize();

cudaSetDevice(1);

cudaDeviceSynchronize();