2015-09-11 22 views
7

Tôi đang tìm một hàm đếm số lõi của thiết bị cuda của tôi. Tôi biết mỗi bộ vi xử lý có lõi cụ thể, và thiết bị cuda của tôi có 2 bộ vi xử lý.Tôi có thể lấy số Lõi trong thiết bị cuda như thế nào?

Tôi đã tìm kiếm rất nhiều để tìm một hàm thuộc tính đếm số lõi trên mỗi bộ vi xử lý nhưng tôi không thể. Tôi sử dụng mã dưới đây nhưng tôi vẫn cần số lõi?

  • CUDA 7.0
  • chương trình ngôn ngữ C
  • visual studio 2013

Code:

void printDevProp(cudaDeviceProp devProp) 
{ printf("%s\n", devProp.name); 
printf("Major revision number:   %d\n", devProp.major); 
printf("Minor revision number:   %d\n", devProp.minor); 
printf("Total global memory:   %u", devProp.totalGlobalMem); 
printf(" bytes\n"); 
printf("Number of multiprocessors:  %d\n", devProp.multiProcessorCount); 
printf("Total amount of shared memory per block: %u\n",devProp.sharedMemPerBlock); 
printf("Total registers per block:  %d\n", devProp.regsPerBlock); 
printf("Warp size:      %d\n", devProp.warpSize); 
printf("Maximum memory pitch:   %u\n", devProp.memPitch); 
printf("Total amount of constant memory:   %u\n", devProp.totalConstMem); 
return; 
} 
+0

Tôi đã tìm thấy một liên kết cho cuda 5.0 + visual studio 2012 với các dự án mẫu [cuda example] (http://code.msdn.microsoft.com/windowsdesktop/CUDA-50-and-Visual-Studio-20e71aa1) và một liên kết cho cuda 7.0 + visual studio [cuda 7.0 bắt đầu] (http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-microsoft-windows/#axzz3lScBd2Bm). – rcgldr

Trả lời

11

Các lõi mỗi đa là chỉ "mất tích" mảnh dữ liệu. Dữ liệu đó không được cung cấp trực tiếp trong cấu trúc cudaDeviceProp nhưng có thể được suy ra dựa trên published datamore published data từ các mục nhập devProp.majordevProp.minor, cùng nhau tạo thành khả năng tính toán CUDA của thiết bị.

Something như thế này nên làm việc:

int getSPcores(cudaDeviceProp devProp) 
{ 
    int cores = 0; 
    int mp = devProp.multiProcessorCount; 
    switch (devProp.major){ 
    case 2: // Fermi 
     if (devProp.minor == 1) cores = mp * 48; 
     else cores = mp * 32; 
     break; 
    case 3: // Kepler 
     cores = mp * 192; 
     break; 
    case 5: // Maxwell 
     cores = mp * 128; 
     break; 
    case 6: // Pascal 
     if (devProp.minor == 1) cores = mp * 128; 
     else if (devProp.minor == 0) cores = mp * 64; 
     else printf("Unknown device type\n"); 
     break; 
    case 7: // Volta 
     if (devProp.minor == 0) cores = mp * 64; 
     else printf("Unknown device type\n"); 
     break; 
    default: 
     printf("Unknown device type\n"); 
     break; 
     } 
    return cores; 
} 

(mã trong trình duyệt)

"lõi" là một chút của một thuật ngữ tiếp thị. Ý nghĩa phổ biến nhất trong quan điểm của tôi là để cân bằng nó với các đơn vị SP trong SM. Đó là ý nghĩa tôi đã chứng minh ở đây. Tôi cũng đã bỏ qua các thiết bị cc 1.x từ thiết bị này vì các loại thiết bị đó không còn được hỗ trợ trong CUDA 7.0 và CUDA 7.5

+0

thiết bị của tôi là GeForce GT 740M và có 384 lõi CUDA nhưng chức năng truy vấn phù hợp để in lõi cuda với các thuộc tính khác ở trên là gì? – Alsphere

+0

Không có thuộc tính lõi CUDA. Bạn phải sử dụng phương pháp tôi mô tả để tính toán nó. –

+0

ok, rất cám ơn – Alsphere

0

Có thể điều này có thể giúp ích nhiều hơn một chút.

https://devtalk.nvidia.com/default/topic/470848/cuda-programming-and-performance/what-39-s-the-proper-way-to-detect-sp-cuda-cores-count-per-sm-/post/4414371/#4414371

"có một thư viện helper_cuda.h trong đó có một thói quen _ConvertSMVer2Cores (int lớn, int nhỏ) trong đó có mức độ khả năng tính toán của GPU và trả về số lõi (bộ xử lý dòng) trong mỗi SM hoặc SMX " -từ bài đăng.

Các vấn đề liên quan