分配的内存增加时,多GPU性能会下降

时间:2013-06-13 04:07:18

标签: cuda multi-gpu

我在Windows 7 x64,Visual C ++ 10中使用4GB RAM的GTX 690 GPU上测试了以下内容:

我写了一个接收2个向量并添加到第3个向量的函数。该任务在2个GPU设备上完成。我逐渐增加了矢量大小以基准GPU性能。所需时间相对于矢量大小线性增加到某一点,然后它突然跳起。当我禁用每个GPU核心时,所需的时间保持线性到可用内存的末尾。我附上了一个显示所需时间与分配内存的图表。

您可以在此处查看速度图:Speed Comparison Diagram!

你能告诉我出了什么问题吗?

贝斯茨, 拉敏

这是我的代码:

unsigned    BenchMark( unsigned VectorSize )
{
    unsigned *      D[ 2 ][ 3 ] ;

    for ( int i = 0 ; i < 2 ; i++ )
    {
        cudaSetDevice( i ) ;

        for ( int j = 0 ; j < 3 ; j++ )
            cudaMalloc( & D[ i ][ j ] , VectorSize * sizeof( unsigned ) ) ;
    }

    unsigned    uStartTime = clock() ;

    // TEST
    for ( int i = 0 ; i < 2 ; i++ )
    {
        cudaSetDevice( i ) ;

        AddKernel<<<VectorSize/256,256>>>(
            D[ i ][ 0 ] ,
            D[ i ][ 1 ] ,
            D[ i ][ 2 ] ,
                VectorSize ) ;
    }

    cudaDeviceSynchronize() ;
    cudaSetDevice( 0 ) ;
    cudaDeviceSynchronize() ;

    unsigned    uEndTime = clock() ;

    for ( int i = 0 ; i < 2 ; i++ )
    {
        cudaSetDevice( i ) ;

        for ( int j = 0 ; j < 3 ; j++ )
            cudaFree( D[ i ][ j ] ) ;
    }

    return uEndTime - uStartTime ;
}

__global__ void AddKernel(
                    const   Npp32u *    __restrict__    pSource1 ,
                    const   Npp32u *    __restrict__    pSource2 ,
                        Npp32u *    __restrict__    pDestination ,
                        unsigned            uLength )
{
    unsigned    x = blockIdx.x * blockDim.x + threadIdx.x ;

    if ( x < uLength )
        pDestination[ x ] = pSource1[ x ] + pSource2[ x ] ; 
}

1 个答案:

答案 0 :(得分:1)

我找到了答案。问题发生在SLI处于活动状态时,我禁用了它,现在它正在顺利运行。