2012-02-22 135 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