Malloc and trasnfers with CUDA should use (size_t) casts

This commit is contained in:
sfilippone
2025-01-02 11:49:08 +01:00
parent 20958f654a
commit 2af0d56938
12 changed files with 398 additions and 231 deletions
+164 -86
View File
@@ -71,6 +71,8 @@ int allocHllDevice(void ** remoteMatrix, HllDeviceParams* params)
{
HllDevice *tmp = (HllDevice *)malloc(sizeof(HllDevice));
int ret=SPGPU_SUCCESS;
size_t tt;
int ti;
*remoteMatrix = (void *)tmp;
tmp->hackSize = params->hackSize;
@@ -87,41 +89,54 @@ int allocHllDevice(void ** remoteMatrix, HllDeviceParams* params)
//printf("hackOffsLength %d\n",tmp->hackOffsLength);
if (ret == SPGPU_SUCCESS)
ret=allocRemoteBuffer((void **)&(tmp->rP), tmp->allocsize*sizeof(int));
ret=allocRemoteBuffer((void **)&(tmp->rP),
((size_t) tmp->allocsize)*sizeof(int));
if (ret == SPGPU_SUCCESS)
ret=allocRemoteBuffer((void **)&(tmp->rS), tmp->rows*sizeof(int));
ret=allocRemoteBuffer((void **)&(tmp->rS),
((size_t) tmp->rows)*sizeof(int));
if (ret == SPGPU_SUCCESS)
ret=allocRemoteBuffer((void **)&(tmp->diag), tmp->rows*sizeof(int));
ret=allocRemoteBuffer((void **)&(tmp->diag),
((size_t) tmp->rows)*sizeof(int));
if (ret == SPGPU_SUCCESS)
ret=allocRemoteBuffer((void **)&(tmp->hackOffs), ((tmp->hackOffsLength+1)*sizeof(int)));
ret=allocRemoteBuffer((void **)&(tmp->hackOffs),
(((size_t) tmp->hackOffsLength+1)*sizeof(int)));
if (params->elementType == SPGPU_TYPE_INT)
{
if (ret == SPGPU_SUCCESS)
ret=allocRemoteBuffer((void **)&(tmp->cM), tmp->allocsize*sizeof(int));
ret=allocRemoteBuffer((void **)&(tmp->cM),
((size_t) tmp->allocsize)*sizeof(int));
}
else if (params->elementType == SPGPU_TYPE_FLOAT)
{
if (ret == SPGPU_SUCCESS)
ret=allocRemoteBuffer((void **)&(tmp->cM), tmp->allocsize*sizeof(float));
ret=allocRemoteBuffer((void **)&(tmp->cM),
((size_t) tmp->allocsize)*sizeof(float));
}
else if (params->elementType == SPGPU_TYPE_DOUBLE)
{
if (ret == SPGPU_SUCCESS)
ret=allocRemoteBuffer((void **)&(tmp->cM), tmp->allocsize*sizeof(double));
if (ret == SPGPU_SUCCESS) {
/* tt = ((size_t) tmp->allocsize)*sizeof(double);
ti = ((size_t) tmp->allocsize)*sizeof(double);
fprintf(stderr,"%ld %d %d\n",tt, ti, tmp->allocsize);*/
ret=allocRemoteBuffer((void **)&(tmp->cM),
((size_t) tmp->allocsize)*sizeof(double));
}
}
else if (params->elementType == SPGPU_TYPE_COMPLEX_FLOAT)
{
if (ret == SPGPU_SUCCESS)
ret=allocRemoteBuffer((void **)&(tmp->cM), tmp->allocsize*sizeof(cuFloatComplex));
ret=allocRemoteBuffer((void **)&(tmp->cM),
((size_t) tmp->allocsize)*sizeof(cuFloatComplex));
}
else if (params->elementType == SPGPU_TYPE_COMPLEX_DOUBLE)
{
if (ret == SPGPU_SUCCESS)
ret=allocRemoteBuffer((void **)&(tmp->cM), tmp->allocsize*sizeof(cuDoubleComplex));
ret=allocRemoteBuffer((void **)&(tmp->cM),
((size_t) tmp->allocsize)*sizeof(cuDoubleComplex));
}
else
return SPGPU_UNSUPPORTED; // Unsupported params
@@ -151,7 +166,7 @@ int FallocHllDevice(void** deviceMat,unsigned int hksize, unsigned int rows, un
p = bldHllDeviceParams(hksize, rows, nzeros, allocsize, elementType, firstIndex);
i = allocHllDevice(deviceMat, &p);
if (i != 0) {
fprintf(stderr,"From routine : %s : %d \n","FallocEllDevice",i);
fprintf(stderr,"From routine : %s : %d \n","FallocHllDevice",i);
}
return(i);
}
@@ -259,11 +274,16 @@ int writeHllDeviceFloat(void* deviceMat, float* val, int* ja, int *hkoffs, int*
{ int i;
HllDevice *devMat = (HllDevice *) deviceMat;
// Ex updateFromHost function
i = writeRemoteBuffer((void*) val, (void *)devMat->cM, devMat->allocsize*sizeof(float));
i = writeRemoteBuffer((void*) ja, (void *)devMat->rP, devMat->allocsize*sizeof(int));
i = writeRemoteBuffer((void*) irn, (void *)devMat->rS, devMat->rows*sizeof(int));
i = writeRemoteBuffer((void*) idiag, (void *)devMat->diag, devMat->rows*sizeof(int));
i = writeRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
i = writeRemoteBuffer((void*) val, (void *)devMat->cM,
((size_t) devMat->allocsize)*sizeof(float));
i = writeRemoteBuffer((void*) ja, (void *)devMat->rP,
((size_t) devMat->allocsize)*sizeof(int));
i = writeRemoteBuffer((void*) irn, (void *)devMat->rS,
((size_t) devMat->rows)*sizeof(int));
i = writeRemoteBuffer((void*) idiag, (void *)devMat->diag,
((size_t) devMat->rows)*sizeof(int));
i = writeRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
//i = writeEllDevice(deviceMat, (void *) val, ja, irn);
/*if (i != 0) {
fprintf(stderr,"From routine : %s : %d \n","writeEllDeviceFloat",i);
@@ -275,11 +295,16 @@ int writeHllDeviceDouble(void* deviceMat, double* val, int* ja, int *hkoffs, int
{ int i;
HllDevice *devMat = (HllDevice *) deviceMat;
// Ex updateFromHost function
i = writeRemoteBuffer((void*) val, (void *)devMat->cM, devMat->allocsize*sizeof(double));
i = writeRemoteBuffer((void*) ja, (void *)devMat->rP, devMat->allocsize*sizeof(int));
i = writeRemoteBuffer((void*) irn, (void *)devMat->rS, devMat->rows*sizeof(int));
i = writeRemoteBuffer((void*) idiag, (void *)devMat->diag, devMat->rows*sizeof(int));
i = writeRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
i = writeRemoteBuffer((void*) val, (void *)devMat->cM,
((size_t) devMat->allocsize)*sizeof(double));
i = writeRemoteBuffer((void*) ja, (void *)devMat->rP,
((size_t) devMat->allocsize)*sizeof(int));
i = writeRemoteBuffer((void*) irn, (void *)devMat->rS,
((size_t) devMat->rows)*sizeof(int));
i = writeRemoteBuffer((void*) idiag, (void *)devMat->diag,
((size_t) devMat->rows)*sizeof(int));
i = writeRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
/*i = writeEllDevice(deviceMat, (void *) val, ja, irn);
if (i != 0) {
fprintf(stderr,"From routine : %s : %d \n","writeEllDeviceDouble",i);
@@ -291,11 +316,16 @@ int writeHllDeviceFloatComplex(void* deviceMat, float complex* val, int* ja, int
{ int i;
HllDevice *devMat = (HllDevice *) deviceMat;
// Ex updateFromHost function
i = writeRemoteBuffer((void*) val, (void *)devMat->cM, devMat->allocsize*sizeof(cuFloatComplex));
i = writeRemoteBuffer((void*) ja, (void *)devMat->rP, devMat->allocsize*sizeof(int));
i = writeRemoteBuffer((void*) irn, (void *)devMat->rS, devMat->rows*sizeof(int));
i = writeRemoteBuffer((void*) idiag, (void *)devMat->diag, devMat->rows*sizeof(int));
i = writeRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
i = writeRemoteBuffer((void*) val, (void *)devMat->cM,
((size_t) devMat->allocsize)*sizeof(cuFloatComplex));
i = writeRemoteBuffer((void*) ja, (void *)devMat->rP,
((size_t) devMat->allocsize)*sizeof(int));
i = writeRemoteBuffer((void*) irn, (void *)devMat->rS,
((size_t) devMat->rows)*sizeof(int));
i = writeRemoteBuffer((void*) idiag, (void *)devMat->diag,
((size_t) devMat->rows)*sizeof(int));
i = writeRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
/*i = writeEllDevice(deviceMat, (void *) val, ja, irn);
if (i != 0) {
fprintf(stderr,"From routine : %s : %d \n","writeEllDeviceDouble",i);
@@ -307,11 +337,16 @@ int writeHllDeviceDoubleComplex(void* deviceMat, double complex* val, int* ja, i
{ int i;
HllDevice *devMat = (HllDevice *) deviceMat;
// Ex updateFromHost function
i = writeRemoteBuffer((void*) val, (void *)devMat->cM, devMat->allocsize*sizeof(cuDoubleComplex));
i = writeRemoteBuffer((void*) ja, (void *)devMat->rP, devMat->allocsize*sizeof(int));
i = writeRemoteBuffer((void*) irn, (void *)devMat->rS, devMat->rows*sizeof(int));
i = writeRemoteBuffer((void*) idiag, (void *)devMat->diag, devMat->rows*sizeof(int));
i = writeRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
i = writeRemoteBuffer((void*) val, (void *)devMat->cM,
((size_t) devMat->allocsize)*sizeof(cuDoubleComplex));
i = writeRemoteBuffer((void*) ja, (void *)devMat->rP,
((size_t) devMat->allocsize)*sizeof(int));
i = writeRemoteBuffer((void*) irn, (void *)devMat->rS,
((size_t) devMat->rows)*sizeof(int));
i = writeRemoteBuffer((void*) idiag, (void *)devMat->diag,
((size_t) devMat->rows)*sizeof(int));
i = writeRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
/*i = writeEllDevice(deviceMat, (void *) val, ja, irn);
if (i != 0) {
fprintf(stderr,"From routine : %s : %d \n","writeEllDeviceDouble",i);
@@ -322,11 +357,16 @@ int writeHllDeviceDoubleComplex(void* deviceMat, double complex* val, int* ja, i
int readHllDeviceFloat(void* deviceMat, float* val, int* ja, int *hkoffs, int* irn, int *idiag)
{ int i;
HllDevice *devMat = (HllDevice *) deviceMat;
i = readRemoteBuffer((void *) val, (void *)devMat->cM, devMat->allocsize*sizeof(float));
i = readRemoteBuffer((void *) ja, (void *)devMat->rP, devMat->allocsize*sizeof(int));
i = readRemoteBuffer((void *) irn, (void *)devMat->rS, devMat->rows*sizeof(int));
i = readRemoteBuffer((void *) idiag, (void *)devMat->diag, devMat->rows*sizeof(int));
i = readRemoteBuffer((void *) hkoffs, (void *)devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
i = readRemoteBuffer((void *) val, (void *)devMat->cM,
((size_t) devMat->allocsize)*sizeof(float));
i = readRemoteBuffer((void *) ja, (void *)devMat->rP,
((size_t) devMat->allocsize)*sizeof(int));
i = readRemoteBuffer((void *) irn, (void *)devMat->rS,
((size_t) devMat->rows)*sizeof(int));
i = readRemoteBuffer((void *) idiag, (void *)devMat->diag,
((size_t) devMat->rows)*sizeof(int));
i = readRemoteBuffer((void *) hkoffs, (void *)devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
/*i = readEllDevice(deviceMat, (void *) val, ja, irn);
if (i != 0) {
fprintf(stderr,"From routine : %s : %d \n","readEllDeviceFloat",i);
@@ -337,11 +377,16 @@ int readHllDeviceFloat(void* deviceMat, float* val, int* ja, int *hkoffs, int* i
int readHllDeviceDouble(void* deviceMat, double* val, int* ja, int *hkoffs, int* irn, int *idiag)
{ int i;
HllDevice *devMat = (HllDevice *) deviceMat;
i = readRemoteBuffer((void *) val, (void *)devMat->cM, devMat->allocsize*sizeof(double));
i = readRemoteBuffer((void *) ja, (void *)devMat->rP, devMat->allocsize*sizeof(int));
i = readRemoteBuffer((void *) irn, (void *)devMat->rS, devMat->rows*sizeof(int));
i = readRemoteBuffer((void *) idiag, (void *)devMat->diag, devMat->rows*sizeof(int));
i = readRemoteBuffer((void *) hkoffs, (void *)devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
i = readRemoteBuffer((void *) val, (void *)devMat->cM,
((size_t) devMat->allocsize)*sizeof(double));
i = readRemoteBuffer((void *) ja, (void *)devMat->rP,
((size_t) devMat->allocsize)*sizeof(int));
i = readRemoteBuffer((void *) irn, (void *)devMat->rS,
((size_t) devMat->rows)*sizeof(int));
i = readRemoteBuffer((void *) idiag, (void *)devMat->diag,
((size_t) devMat->rows)*sizeof(int));
i = readRemoteBuffer((void *) hkoffs, (void *)devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
/*if (i != 0) {
fprintf(stderr,"From routine : %s : %d \n","readEllDeviceDouble",i);
}*/
@@ -351,11 +396,16 @@ int readHllDeviceDouble(void* deviceMat, double* val, int* ja, int *hkoffs, int*
int readHllDeviceFloatComplex(void* deviceMat, float complex* val, int* ja, int *hkoffs, int* irn, int *idiag)
{ int i;
HllDevice *devMat = (HllDevice *) deviceMat;
i = readRemoteBuffer((void *) val, (void *)devMat->cM, devMat->allocsize*sizeof(cuFloatComplex));
i = readRemoteBuffer((void *) ja, (void *)devMat->rP, devMat->allocsize*sizeof(int));
i = readRemoteBuffer((void *) irn, (void *)devMat->rS, devMat->rows*sizeof(int));
i = readRemoteBuffer((void*) idiag, (void *)devMat->diag, devMat->rows*sizeof(int));
i = readRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
i = readRemoteBuffer((void *) val, (void *)devMat->cM,
((size_t) devMat->allocsize)*sizeof(cuFloatComplex));
i = readRemoteBuffer((void *) ja, (void *)devMat->rP,
((size_t) devMat->allocsize)*sizeof(int));
i = readRemoteBuffer((void *) irn, (void *)devMat->rS,
((size_t) devMat->rows)*sizeof(int));
i = readRemoteBuffer((void*) idiag, (void *)devMat->diag,
((size_t) devMat->rows)*sizeof(int));
i = readRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
/*if (i != 0) {
fprintf(stderr,"From routine : %s : %d \n","readEllDeviceDouble",i);
}*/
@@ -365,11 +415,16 @@ int readHllDeviceFloatComplex(void* deviceMat, float complex* val, int* ja, int
int readHllDeviceDoubleComplex(void* deviceMat, double complex* val, int* ja, int *hkoffs, int* irn, int *idiag)
{ int i;
HllDevice *devMat = (HllDevice *) deviceMat;
i = readRemoteBuffer((void *) val, (void *)devMat->cM, devMat->allocsize*sizeof(cuDoubleComplex));
i = readRemoteBuffer((void *) ja, (void *)devMat->rP, devMat->allocsize*sizeof(int));
i = readRemoteBuffer((void *) irn, (void *)devMat->rS, devMat->rows*sizeof(int));
i = readRemoteBuffer((void*) idiag, (void *)devMat->diag, devMat->rows*sizeof(int));
i = readRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
i = readRemoteBuffer((void *) val, (void *)devMat->cM,
((size_t) devMat->allocsize)*sizeof(cuDoubleComplex));
i = readRemoteBuffer((void *) ja, (void *)devMat->rP,
((size_t) devMat->allocsize)*sizeof(int));
i = readRemoteBuffer((void *) irn, (void *)devMat->rS,
((size_t) devMat->rows)*sizeof(int));
i = readRemoteBuffer((void*) idiag, (void *)devMat->diag,
((size_t) devMat->rows)*sizeof(int));
i = readRemoteBuffer((void*) hkoffs, (void *)devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
/*if (i != 0) {
fprintf(stderr,"From routine : %s : %d \n","readEllDeviceDouble",i);
}*/
@@ -388,16 +443,21 @@ int psiCopyCooToHlgFloat(int nr, int nc, int nza, int hacksz, int noffs, int isz
int *devIdisp, *devJa;
int *tja;
//fprintf(stderr,"devMat: %p\n",devMat);
allocRemoteBuffer((void **)&(devIdisp), (nr+1)*sizeof(int));
allocRemoteBuffer((void **)&(devJa), (nza)*sizeof(int));
allocRemoteBuffer((void **)&(devVal), (nza)*sizeof(float));
allocRemoteBuffer((void **)&(devIdisp), ((size_t) nr+1)*sizeof(int));
allocRemoteBuffer((void **)&(devJa), ((size_t) nza)*sizeof(int));
allocRemoteBuffer((void **)&(devVal), ((size_t) nza)*sizeof(float));
// fprintf(stderr,"Writing: %d %d %d %d %d %d %d\n",nr,devMat->rows,nza,isz, hoffs[noffs], noffs, devMat->hackOffsLength);
i = writeRemoteBuffer((void*) val, (void *)devVal, nza*sizeof(float));
if (i==0) i = writeRemoteBuffer((void*) ja, (void *) devJa, nza*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) irn, (void *) devMat->rS, devMat->rows*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) hoffs, (void *) devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) idisp, (void *) devIdisp, (devMat->rows+1)*sizeof(int));
i = writeRemoteBuffer((void*) val, (void *)devVal,
((size_t) nza)*sizeof(float));
if (i==0) i = writeRemoteBuffer((void*) ja, (void *) devJa,
((size_t) nza)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) irn, (void *) devMat->rS,
((size_t) devMat->rows)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) hoffs, (void *) devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) idisp, (void *) devIdisp,
((size_t) devMat->rows+1)*sizeof(int));
//cudaSync();
handle = psb_cudaGetHandle();
@@ -427,20 +487,25 @@ int psiCopyCooToHlgDouble(int nr, int nc, int nza, int hacksz, int noffs, int is
int *devIdisp, *devJa;
int *tja;
//fprintf(stderr,"devMat: %p\n",devMat);
allocRemoteBuffer((void **)&(devIdisp), (nr+1)*sizeof(int));
allocRemoteBuffer((void **)&(devJa), (nza)*sizeof(int));
allocRemoteBuffer((void **)&(devVal), (nza)*sizeof(double));
allocRemoteBuffer((void **)&(devIdisp), ((size_t) nr+1)*sizeof(int));
allocRemoteBuffer((void **)&(devJa), ((size_t) nza)*sizeof(int));
allocRemoteBuffer((void **)&(devVal), ((size_t) nza)*sizeof(double));
// fprintf(stderr,"Writing: %d %d %d %d %d %d %d\n",nr,devMat->rows,nza,isz, hoffs[noffs], noffs, devMat->hackOffsLength);
i = writeRemoteBuffer((void*) val, (void *)devVal, nza*sizeof(double));
i = writeRemoteBuffer((void*) val, (void *)devVal,
((size_t) nza)*sizeof(double));
//fprintf(stderr,"WriteRemoteBuffer val %d\n",i);
if (i==0) i = writeRemoteBuffer((void*) ja, (void *) devJa, nza*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) ja, (void *) devJa,
((size_t) nza)*sizeof(int));
//fprintf(stderr,"WriteRemoteBuffer ja %d\n",i);
if (i==0) i = writeRemoteBuffer((void*) irn, (void *) devMat->rS, devMat->rows*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) irn, (void *) devMat->rS,
((size_t) devMat->rows)*sizeof(int));
//fprintf(stderr,"WriteRemoteBuffer irn %d\n",i);
if (i==0) i = writeRemoteBuffer((void*) hoffs, (void *) devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) hoffs, (void *) devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
//fprintf(stderr,"WriteRemoteBuffer hoffs %d\n",i);
if (i==0) i = writeRemoteBuffer((void*) idisp, (void *) devIdisp, (devMat->rows+1)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) idisp, (void *) devIdisp,
((size_t) devMat->rows+1)*sizeof(int));
//fprintf(stderr,"WriteRemoteBuffer idisp %d\n",i);
//cudaSync();
//fprintf(stderr," hacksz: %d \n",hacksz);
@@ -448,7 +513,8 @@ int psiCopyCooToHlgDouble(int nr, int nc, int nza, int hacksz, int noffs, int is
psi_cuda_d_CopyCooToHlg(handle, nr,nc,nza,devMat->baseIndex,hacksz,noffs,isz,
(int *) devMat->rS, (int *) devMat->hackOffs,
devIdisp,devJa,devVal,
(int *) devMat->diag, (int *) devMat->rP, (double *)devMat->cM);
(int *) devMat->diag, (int *) devMat->rP,
(double *)devMat->cM);
freeRemoteBuffer(devIdisp);
freeRemoteBuffer(devJa);
@@ -471,23 +537,29 @@ int psiCopyCooToHlgFloatComplex(int nr, int nc, int nza, int hacksz, int noffs,
int *devIdisp, *devJa;
int *tja;
//fprintf(stderr,"devMat: %p\n",devMat);
allocRemoteBuffer((void **)&(devIdisp), (nr+1)*sizeof(int));
allocRemoteBuffer((void **)&(devJa), (nza)*sizeof(int));
allocRemoteBuffer((void **)&(devVal), (nza)*sizeof(cuFloatComplex));
allocRemoteBuffer((void **)&(devIdisp), ((size_t) nr+1)*sizeof(int));
allocRemoteBuffer((void **)&(devJa), ((size_t) nza)*sizeof(int));
allocRemoteBuffer((void **)&(devVal), ((size_t) nza)*sizeof(cuFloatComplex));
// fprintf(stderr,"Writing: %d %d %d %d %d %d %d\n",nr,devMat->rows,nza,isz, hoffs[noffs], noffs, devMat->hackOffsLength);
i = writeRemoteBuffer((void*) val, (void *)devVal, nza*sizeof(cuFloatComplex));
if (i==0) i = writeRemoteBuffer((void*) ja, (void *) devJa, nza*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) irn, (void *) devMat->rS, devMat->rows*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) hoffs, (void *) devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) idisp, (void *) devIdisp, (devMat->rows+1)*sizeof(int));
i = writeRemoteBuffer((void*) val, (void *)devVal,
((size_t) nza)*sizeof(cuFloatComplex));
if (i==0) i = writeRemoteBuffer((void*) ja, (void *) devJa,
((size_t) nza)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) irn, (void *) devMat->rS,
((size_t) devMat->rows)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) hoffs, (void *) devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) idisp, (void *) devIdisp,
((size_t) devMat->rows+1)*sizeof(int));
//cudaSync();
handle = psb_cudaGetHandle();
psi_cuda_c_CopyCooToHlg(handle, nr,nc,nza,devMat->baseIndex,hacksz,noffs,isz,
(int *) devMat->rS, (int *) devMat->hackOffs,
devIdisp,devJa,devVal,
(int *) devMat->diag,(int *) devMat->rP, (float complex *)devMat->cM);
(int *) devMat->diag,(int *) devMat->rP,
(float complex *)devMat->cM);
freeRemoteBuffer(devIdisp);
freeRemoteBuffer(devJa);
@@ -510,23 +582,29 @@ int psiCopyCooToHlgDoubleComplex(int nr, int nc, int nza, int hacksz, int noffs,
int *devIdisp, *devJa;
int *tja;
//fprintf(stderr,"devMat: %p\n",devMat);
allocRemoteBuffer((void **)&(devIdisp), (nr+1)*sizeof(int));
allocRemoteBuffer((void **)&(devJa), (nza)*sizeof(int));
allocRemoteBuffer((void **)&(devVal), (nza)*sizeof(cuDoubleComplex));
allocRemoteBuffer((void **)&(devIdisp), ((size_t) nr+1)*sizeof(int));
allocRemoteBuffer((void **)&(devJa), ((size_t) nza)*sizeof(int));
allocRemoteBuffer((void **)&(devVal), ((size_t) nza)*sizeof(cuDoubleComplex));
// fprintf(stderr,"Writing: %d %d %d %d %d %d %d\n",nr,devMat->rows,nza,isz, hoffs[noffs], noffs, devMat->hackOffsLength);
i = writeRemoteBuffer((void*) val, (void *)devVal, nza*sizeof(cuDoubleComplex));
if (i==0) i = writeRemoteBuffer((void*) ja, (void *) devJa, nza*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) irn, (void *) devMat->rS, devMat->rows*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) hoffs, (void *) devMat->hackOffs, (devMat->hackOffsLength+1)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) idisp, (void *) devIdisp, (devMat->rows+1)*sizeof(int));
i = writeRemoteBuffer((void*) val, (void *)devVal,
((size_t) nza)*sizeof(cuDoubleComplex));
if (i==0) i = writeRemoteBuffer((void*) ja, (void *) devJa,
((size_t) nza)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) irn, (void *) devMat->rS,
((size_t) devMat->rows)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) hoffs, (void *) devMat->hackOffs,
((size_t) devMat->hackOffsLength+1)*sizeof(int));
if (i==0) i = writeRemoteBuffer((void*) idisp, (void *) devIdisp,
((size_t) devMat->rows+1)*sizeof(int));
//cudaSync();
handle = psb_cudaGetHandle();
psi_cuda_z_CopyCooToHlg(handle, nr,nc,nza,devMat->baseIndex,hacksz,noffs,isz,
(int *) devMat->rS, (int *) devMat->hackOffs,
devIdisp,devJa,devVal,
(int *) devMat->diag,(int *) devMat->rP, (double complex *)devMat->cM);
(int *) devMat->diag,(int *) devMat->rP,
(double complex *)devMat->cM);
freeRemoteBuffer(devIdisp);
freeRemoteBuffer(devJa);