2011-04-20 2 views
6

PyCUDA의 설명서에 Driver Interface 호출에 대한 언급이 있지만 약간 생각하고 코드에서 'SHARED_SIZE_BYTES'과 같은 정보를 얻는 방법을 볼 수 없습니다.PyCUDA : 장치 상태 쿼리 (구체적으로 메모리)

누구든지이 방법으로 장치를 쿼리하는 예제를 알려줄 수 있습니까?

일부 컴퓨터 동적 작업을 구현하기 위해 장치 상태 (예 : malloc/memcpy와 커널 시작)를 검사 할 수 있습니까/가능합니까? (I는 '친절한'방식으로 여러 개의 커널을 지원하는 장치를 처리 할 수 ​​있어야합니다.

+0

pycuda.driver.function_attribute에 주어진 속성 필드에 대해 질문합니까? 그것들은 장치 속성이 아니며, 컴파일 된 함수마다 있습니다. – talonmies

답변

14

을 그냥 다른 사람이 가로 질러 오는 CUDA API 하나 손으로 반 시간을 보내고, 또 다른의 PyCUDA documentation가 수행을 위해 불가사의. 그것의 나의 초기 실험이 표시된 것보다 훨씬 간단합니다.

런타임 커널 정보

수신 게으른 게으른 코드

... 
kernel=mod.get_function("foo") 
meminfo(kernel) 
... 
def meminfo(kernel): 
    shared=kernel.shared_size_bytes 
    regs=kernel.num_regs 
    local=kernel.local_size_bytes 
    const=kernel.const_size_bytes 
    mbpt=kernel.max_threads_per_block 
    print("""=MEM=\nLocal:%d,\nShared:%d,\nRegisters:%d,\nConst:%d,\nMax Threads/B:%d"""%(local,shared,regs,const,mbpt)) 
,363,210

예제 출력

=MEM= 
Local:24, 
Shared:64, 
Registers:18, 
Const:0, 
Max Threads/B:512  

정적 장치 정보

수신 지연 지연 코드

import pycuda.autoinit 
import pycuda.driver as cuda 

(free,total)=cuda.mem_get_info() 
print("Global memory occupancy:%f%% free"%(free*100/total)) 

for devicenum in range(cuda.Device.count()): 
    device=cuda.Device(devicenum) 
    attrs=device.get_attributes() 

    #Beyond this point is just pretty printing 
    print("\n===Attributes for device %d"%devicenum) 
    for (key,value) in attrs.iteritems(): 
     print("%s:%s"%(str(key),str(value))) 

예제 출력

01,235,
Global memory occupancy:70.000000% free 

===Attributes for device 0 
MAX_THREADS_PER_BLOCK:512 
MAX_BLOCK_DIM_X:512 
MAX_BLOCK_DIM_Y:512 
MAX_BLOCK_DIM_Z:64 
MAX_GRID_DIM_X:65535 
MAX_GRID_DIM_Y:65535 
MAX_GRID_DIM_Z:1 
MAX_SHARED_MEMORY_PER_BLOCK:16384 
TOTAL_CONSTANT_MEMORY:65536 
WARP_SIZE:32 
MAX_PITCH:2147483647 
MAX_REGISTERS_PER_BLOCK:8192 
CLOCK_RATE:1500000 
TEXTURE_ALIGNMENT:256 
GPU_OVERLAP:1 
MULTIPROCESSOR_COUNT:14 
KERNEL_EXEC_TIMEOUT:1 
INTEGRATED:0 
CAN_MAP_HOST_MEMORY:1 
COMPUTE_MODE:DEFAULT 
MAXIMUM_TEXTURE1D_WIDTH:8192 
MAXIMUM_TEXTURE2D_WIDTH:65536 
MAXIMUM_TEXTURE2D_HEIGHT:32768 
MAXIMUM_TEXTURE3D_WIDTH:2048 
MAXIMUM_TEXTURE3D_HEIGHT:2048 
MAXIMUM_TEXTURE3D_DEPTH:2048 
MAXIMUM_TEXTURE2D_ARRAY_WIDTH:8192 
MAXIMUM_TEXTURE2D_ARRAY_HEIGHT:8192 
MAXIMUM_TEXTURE2D_ARRAY_NUMSLICES:512 
SURFACE_ALIGNMENT:256 
CONCURRENT_KERNELS:0 
ECC_ENABLED:0 
PCI_BUS_ID:1 
PCI_DEVICE_ID:0 
TCC_DRIVER:0 
+0

이것은 장치 쿼리 출력이지만 원래 질문에서는 코드 속성에 대해 묻고있었습니다. 당신은 실제로 어떤 것에 관심이 있습니까? – talonmies

관련 문제