2012-02-22 120 views
1

我对所有这些(本周开始)都很陌生,因此请友好:) 我需要了解我的内存如何分配到我的GPU卡上。我正在运行带有6个内核的Intel Xeon CPU和一块Tesla C2050 GPU卡。我如何找出全局,共享,本地,常量和纹理内存的大小? 我试过使用deviceQuery代码,一些已经上传,但在这一点上,我无法编译任何cuda代码。GPU内存分配

由于事先

+1

忘掉任何与卡本身有关的事情 - 如果你不能编译CUDA代码,那需要你的第一步1.你正在运行Linux还是Windows? – pg1989 2012-02-22 03:57:30

回答

2
#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取出(并稍微修改)。这个对我有用。当你尝试编译时会得到什么错误信息?

+0

我编译并运行了提供的代码。一旦执行它说,我有7798885 CUDA设备可用于收获。我只有6个内核和2个GPU(Telsga C2050 - 448内核,Quadro 600 - 96内核)。说实话,我真的不相信这个代码提供的任何值。 ---对于设备0 --- 名称一般资料:一 计算能力:1993949441.0 时钟率:0 设备复制重叠:残疾人 内核执行超时:启用 ---用于设备0内存信息--- Total global mem:0 Total constant Mem:33751040 – 2012-03-07 05:50:22

+0

如上所述,这对我有效,并给了我正确的信息。但我也在另一台设备上测试过它,并得到了一个“不真实”的值,我有负面的记忆:/在任何情况下,检查[cuda lib文档](http://developer.download.nvidia.com/compute/ DevZone/docs/html/C/doc/html/index.html)将会是一个很好的开始寻找可以让你查询设备的函数的地方。顺便说一下,你是否在设备管理。可能是您没有查询设备的权利的情况?不知道如果这是正确的,只是写一个想法。尝试sudo运行可执行文件! – tropicana 2012-03-24 22:04:56