
Вызов CUDA из произвольного
Вызов CUDA из произвольного
хост-кода (пример)
void
fflayerCUDA::backpropagate()
{
/*
U16 i;
for(i=0;i<ns;i++)
for(U16 k=0;k<outSize[0]/ns;k++)
ld[i]+=Output[0][i+k];
(…)
memset(Input[0],0,inSize[0]*memSize[0]*sizeof(FLT64));
for (i=0;i<ns;i++)
for(U16 k=0;k<inSize[0];k++)
Input[0][k]+=ld[i]*wm[i+k*ns]; */
if
(LocLayerID==1)
(
y
)
{
for
(
U32
ii=0;ii<ns;ii++) ldF32[ii]=(
FLT32
)((
FLT64**
)Output)[0][ii];
if
(cudaMemcpy(ldCU,ldF32,ns*sizeof(FLT32),cudaMemcpyHostToDevice)!=cudaSuccess)
throw
Unsupported(
this
->Name,"CUDA failed to upload LD.");
throw
Unsupported(
this
Name, CUDA failed to upload LD. );
}
CUDAbackpropagate(ldCU,loCU,wmCU,wmdCU,bvdCU,inCU,indCU,inSize[0],ns,wm_pitch/sizeof(
float
));
}