【问题标题】:GPU memory distributionGPU 内存分布
【发布时间】:2012-03-12 10:21:21
【问题描述】:

我对这一切都很陌生(从本周开始),所以请善待 :) 我需要找出我的内存是如何在我的 GPU 卡上分布的。我正在运行具有 6 个内核的 Intel Xeon CPU 和 Tesla C2050 GPU 卡。如何找出全局、共享、本地、常量和纹理内存的大小? 我尝试使用一些上传的 deviceQuery 代码,但此时我无法编译任何 cuda 代码。

提前致谢

【问题讨论】:

  • 忘记与卡本身有关的任何事情 - 如果您无法编译 CUDA 代码,那需要您的第一步。您运行的是 Linux 还是 Windows?

标签: memory gpu


【解决方案1】:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>


int main( void ) {
cudaDeviceProp  prop;

int count;

cudaGetDeviceCount( &count );
printf("This machine has %d CUDA devices availiable for harvesting \n\n", count);
for (int i=0; i< count; i++) {

    cudaGetDeviceProperties( &prop, i );
    printf( "   --- General Information for device %d ---\n", i );
    printf( "Name:  %s\n", prop.name );
    printf( "Compute capability:  %d.%d\n", prop.major, prop.minor );
    printf( "Clock rate:  %d\n", prop.clockRate );
    printf( "Device copy overlap:  " );
    if (prop.deviceOverlap)
        printf( "Enabled\n" );
    else
        printf( "Disabled\n");
    printf( "Kernel execution timeout :  " );
    if (prop.kernelExecTimeoutEnabled)
        printf( "Enabled\n" );
    else
        printf( "Disabled\n" );

    printf( "   --- Memory Information for device %d ---\n", i );
    printf( "Total global mem:  %ld\n", prop.totalGlobalMem );
    printf( "Total constant Mem:  %ld\n", prop.totalConstMem );
    printf( "Max mem pitch:  %ld\n", prop.memPitch );
    printf( "Texture Alignment:  %ld\n", prop.textureAlignment );

    printf( "   --- MP Information for device %d ---\n", i );
    printf( "Multiprocessor count:  %d\n",
        prop.multiProcessorCount );
    printf( "Shared mem per mp:  %ld\n", prop.sharedMemPerBlock );
    printf( "Registers per mp:  %d\n", prop.regsPerBlock );
    printf( "Threads in warp:  %d\n", prop.warpSize );
    printf( "Max threads per block:  %d\n",
        prop.maxThreadsPerBlock );
    printf( "Max thread dimensions:  (%d, %d, %d)\n",
        prop.maxThreadsDim[0], prop.maxThreadsDim[1],
        prop.maxThreadsDim[2] );
    printf( "Max grid dimensions:  (%d, %d, %d)\n",
        prop.maxGridSize[0], prop.maxGridSize[1],
        prop.maxGridSize[2] );
    printf( "\n" );
   }
}

代码取自Cuda by Example(并稍作修改)。这个对我有用。当您尝试编译时会收到哪些错误消息?

【讨论】:

  • 我编译并运行了提供的代码。执行后它说我有 7798885 个 CUDA 设备可用于收割。我只有 6 个核心和 2 个 GPU(Telsga C2050 - 448 个核心,Quadro 600 - 96 个核心)。老实说,我真的不相信这段代码提供的任何值。 --- 设备 0 的一般信息 --- 名称:a 计算能力:1993949441.0 时钟频率:0 设备复制重叠:禁用 内核执行超时:启用 --- 设备 0 的内存信息 --- 总全局内存:0 总常量邮箱:33751040
  • 如前所述,这对我有用并给了我正确的信息。但我也在另一台设备上对其进行了测试,只得到了一个“不真实”的值,我有负记忆:/ 无论如何,检查cuda lib documentation 将是开始寻找可以让您查询设备的功能的好地方.顺便说一句,您是设备中的管理员吗?可以是您没有权限查询设备的情况吗?不知道这是否正确,只是写一个想法。尝试 sudo 运行可执行文件!
猜你喜欢
  • 1970-01-01
  • 2017-11-13
  • 2019-03-05
  • 2011-06-24
  • 2012-07-03
  • 2011-07-12
  • 1970-01-01
  • 2018-11-25
  • 2012-10-23
相关资源
最近更新 更多