{Python}GPGPUで行列積を求める

GPGPUで行列積を求めて行きたいと思います。PyOpenCLについてはあまり理解していないところが多いので、正確ではないと思います。 ただ、私はこう理解していて、こうすると動きます、という、メモです……、。 numpyで求める 行列積はnumpyのdotで求めることができます。 a=行列A b=行列B product = numpy.dot(a,b) GPGPUで行列積を求める GPGPUで演算を行うには、 Context Queue Buffer Kernel を記述することが必要になります。 Context どのGPUを使用するかを指定します。 引数にinteractive=Falseで自動選択。 pyopencl.create_some_context(interactive=False) Queue Contextのなかに新しいqueueを作成します。 pyopencl.CommandQueue(context) Buffer ホスト(CPU)とデバイス(GPU)間のデータ受け渡し用のBufferを作成します。 カーネルに引数として渡す行列と、結果を受ける行列を作成 ここでは、-9~9までのランダムの整数からなる4*4の行列を作成 アウトプット行列は行列aと同じ大きさのから行列を作成 size = 4 a = numpy.random.randint(-9, 9, (size,size)).astype(numpy.int32) b = numpy.random.randint(-9, 9, (size,size)).astype(numpy.int32) dest = np.empty(a.shape, dtype=np.int32) bufferの作成 用途によって、READ_ONLY, WRITE_ONLY, READ_WRITEを指定する。 ここではインプットがREAD_ONLY,アウトプットbufferがWRITE_ONLYになっているが、 行列のすべての要素になんらかの演算をする場合など、インプットデータを加工したものを戻り値として得たい場合はREAD_WRITEにする。 hostbufを指定することでホスト->デバイスの転送が自動で行われる。 a_buf = pyopencl.Buffer(context,… Continue Reading {Python}GPGPUで行列積を求める