다음과 같은 코드는 작동하지 않습니다. 이유를 이해하고 싶습니다. 내가 가진파이 쿠다 코드가 작동하지 않습니다. 함수 호출에서 "블록"줄이 작동하지 않습니다.
오류가 있습니다 : "형식 오류 : 매개 변수 # 3에 유효하지 않은 유형 (0 기반)"
그리고 오류가 함수 내 전화의 블록 라인에서 발생합니다. 코드에서 따라서 끝까지 두 줄로block = (MATRIX_SIZE,MATRIX_SIZE,1)
줄입니다.
여기에 실수가 무엇인지 아는 사람이 있습니까? 나는 많은 것을 시도했지만 알아 내지 못합니다.
쿠다 코드는 C++에서 일하고, 난 그냥 지금 PyCuda에서 번역하려고하고 오류의 원인의
import numpy as np
from pycuda import driver, compiler, gpuarray, tools
# -- initialize the device
import pycuda.autoinit
kernel_code_template = """
__global__ void MatMult(float* C, float* A, float*B, int dimAx, int dimBx, int dimCx, int dimCy)
{
int row = blockDim.y*blockIdx.y+threadIdx.y;
int col = blockDim.x*blockIdx.x+threadIdx.x;
double Result = 0;
if (row<=dimCy-1 && col<=dimCx-1)
{
for (int k = 0; k < dimAx; k++)
{
Result += A[k + dimAx*row] * B[col + dimBx*k];
}
C[col + row*dimCx] = Result;
}
}
"""
MATRIX_SIZE=3
# I create my variables :
a_cpu=np.asarray([[0,1,2],[10,11,12],[20,21,22]])
b_cpu=np.asarray([[0,0,0],[1,2,3],[4,8,12]])
a_gpu = gpuarray.to_gpu(a_cpu)
b_gpu = gpuarray.to_gpu(b_cpu)
size_Ax=a_cpu.shape[1]
size_Bx=b_cpu.shape[1]
size_Ay=a_cpu.shape[0]
size_Cx=size_Bx # Cx=Bx because of matrix product
size_Cy=size_Ay # Cy=Ay
# create empty gpu array for the result (C = A * B)
c_gpu = gpuarray.empty((size_Cy, size_Cx), np.float32)
# get the kernel code from the template
kernel_code=kernel_code_template
# compile the kernel code
mod = compiler.SourceModule(kernel_code)
# get the kernel function from the compiled module
matrixmul = mod.get_function("MatMult")
# call the kernel on the card
matrixmul(
# outputs
c_gpu,
# inputs
a_gpu, b_gpu,
size_Ax,size_Bx,size_Cx,size_Cy,
# (only one) block of MATRIX_SIZE x MATRIX_SIZE threads
block = (MATRIX_SIZE,MATRIX_SIZE,1),
)
어떤 줄에서 오류가 발생합니까? –
@ TomášPospíšek 그것은 블록 라인에 있으며, 마지막 두 줄 앞에 있습니다 : "block = (MATRIX_SIZE, MATRIX_SIZE, 1)" – StarBucK