多分これがPyOpneCLで計算する一番最小構成
デバイス(GPU等)上に要素1の配列でA,B,Cを確保。
C=A+B
をやってホストに結果を戻して表示
# -*- coding: utf-8 -*- import numpy as np import pyopencl as cl ctx = cl.create_some_context() queue = cl.CommandQueue(ctx) cl_mem_a=cl.Buffer(ctx,cl.mem_flags.READ_WRITE,4) cl_mem_b=cl.Buffer(ctx,cl.mem_flags.READ_WRITE,4) cl_mem_c=cl.Buffer(ctx,cl.mem_flags.READ_WRITE,4) a = np.array([1]) b = np.array([1]) c = np.empty(1, dtype = np.int32) cl.enqueue_write_buffer(queue,mem=cl_mem_a,hostbuf=a) cl.enqueue_write_buffer(queue,mem=cl_mem_b,hostbuf=b) global_work_size=(1,1) local_work_size=(1,1) prg_string=""" __kernel void Onlyadd(__global int* A,__global int* B,__global int* C) { C[0] = A[0] + B[0] ; } """ program=cl.Program(ctx,prg_string).build() kernel_Onlyadd=cl.Kernel(program,"Onlyadd") kernel_Onlyadd.set_arg(0,cl_mem_a) kernel_Onlyadd.set_arg(1,cl_mem_b) kernel_Onlyadd.set_arg(2,cl_mem_c) cl.enqueue_nd_range_kernel(queue,kernel_Onlyadd,global_work_size,local_work_size) cl.enqueue_read_buffer(queue,mem=cl_mem_c,hostbuf=c) print(c)
デバイス(GPU等)上に要素1の配列でA,B,Cを確保。
C=A+B
をやってホストに結果を戻して表示