get_info関数はプログラムオブジェクトについての情報を取得します。
詳しくは「表:clGetProgramInfo」(Table B.73, “表:clGetProgramInfo”)と「表:cl_program_info」(Table B.74, “表:cl_program_info”)を参照ください。
get_info(param)
paramにはpyopencl.program_infoのビットフィールドの値を指定します。
import pyopencl as cl import numpy as np data = np.arange(16).astype(np.int32) devices = [cl.get_platforms()[0].get_devices(cl.device_type.GPU)[0]] ctx = cl.Context(devices) queue = cl.CommandQueue(ctx) mf = cl.mem_flags data_mem = cl.Buffer(ctx, mf.USE_HOST_PTR, hostbuf=data) program = cl.Program(ctx, """ __kernel void square(__global int* data) { size_t gid = get_global_id(0); data[gid] *= data[gid]; printf("%d\\n", data[gid]); } """).build() num_devices = program.get_info(cl.program_info.NUM_DEVICES) print(num_devices)
出力は以下のようになります。
1
GPUデバイスは一つなので正しい値の出力が確認できました。
さらに他の情報も取得できるか確認をしてみます。
binary_sizes = program.get_info(cl.program_info.BINARY_SIZES) print(binary_sizes) kernel_names = program.get_info(cl.program_info.KERNEL_NAMES) print(kernel_names) reference_count = program.get_info(cl.program_info.REFERENCE_COUNT) print(reference_count)
上記のプログラムの出力は以下のようになります。
[2494] square 1
プログラムのサイズが2494バイト、カーネル名がsquare、プログラムのインスタンスが一つなので合っています。
get_infoの引数となるビットフィールドとして指定します。
詳しくは「表:clGetProgramInfo」(Table B.73, “表:clGetProgramInfo”)と「表:cl_program_info」(Table B.74, “表:cl_program_info”)を参照ください。
class pyopencl.program_info
program_infoのビットフィールドは以下の表にある値があります。
Table 16.3. pyopencl.program_info
BINARIES |
BINARY_SIZES |
CONTEXT |
DEVICES |
KERNEL_NAMES |
NUM_DEVICES |
NUM_KERNELS |
REFERENCE_COUNT |
SOURCE |
get_build_info関数はプログラムオブジェクト内の各デバイスについてのビルド情報を取得します。
詳しくは「表:cl_program_build_info」(Table B.76, “表:cl_program_build_info”)と「表:clGetProgramBuildInfo」(Table B.75, “表:clGetProgramBuildInfo”)を参照ください。
get_build_info( device, #(1) param) #(2)
ビルド情報を取得するOpenCLデバイスを指定。programと関連付けられた有効なデバイスとなる必要がある。 | |
pyopencl.program_build_infoのビットフィールドを指定。 |
ビルド時のオプションを指定してからビルド情報を取得してみたいと思います。以下がpythonのソースコードです。
import pyopencl as cl import numpy as np data = np.arange(16).astype(np.int32) devices = [cl.get_platforms()[0].get_devices(cl.device_type.GPU)[0]] ctx = cl.Context(devices) queue = cl.CommandQueue(ctx) mf = cl.mem_flags data_mem = cl.Buffer(ctx, mf.USE_HOST_PTR, hostbuf=data) program = cl.Program(ctx, """ __kernel void square(__global int* data) { size_t gid = get_global_id(0); data[gid] *= data[gid]; printf("%d\\n", data[gid]); } """).build(options=["-Dsize=256"], cache_dir="cache") options = program.get_build_info(devices[0], cl.program_build_info.OPTIONS) print(options)
プログラムの出力は以下のようになります。
-Dsize=256 -I /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pyopencl-2016.2-py3.5-macosx-10.6-intel.egg/pyopencl/cl
指定したプログラムのオプションと、インクルードディレクトリが表示されました。
program_build_infoクラスはget_build_infoで指定する取得情報を表すビットフィールドの値を持ちます。
詳しくは「表:cl_program_build_info」(Table B.76, “表:cl_program_build_info”)と「表:clGetProgramBuildInfo」(Table B.75, “表:clGetProgramBuildInfo”)を参照ください。
class pyopencl.program_build_info
program_build_infoのビットフィールドの値は下表の通りです。
Copyright 2018-2019, by Masaki Komatsu