Пример #1
0
static void THTensor_(resize_raw)(THTensor *self, int nDimension, long *size)
{
  int isSame = 0;
  int d;

  {
    int nDimension_ = 0;
    for(d = 0; d < nDimension; d++)
    {
      if(size[d] > 0)
        nDimension_++;
      else
        break;
    }
    nDimension = nDimension_;
  }

  if(nDimension == self->nDimension)
  {
    isSame = 1;
    for(d = 0; d < self->nDimension; d++)
    {
      if(self->size[d] != size[d])
      {
        isSame = 0;
        break;
      }
    }
  }

  if(!isSame)
  {
    long stride = 1;
    self->size   = THRealloc(self->size,   sizeof(long)*nDimension);
    self->stride = THRealloc(self->stride, sizeof(long)*nDimension);
    self->nDimension = nDimension;
    for(d = nDimension-1; d >= 0; d--)
    {
      self->size[d] = size[d];
      self->stride[d] = stride;
      stride *= size[d];
    }

    stride += self->storageOffset;
    if(stride > THStorage_(size)(self->storage))
      THStorage_(resize)(self->storage, stride);
  }
}
Пример #2
0
THCSTensor* THCSTensor_(rawResize)(THCState *state, THCSTensor *self, int nDimI, int nDimV, int64_t *size) {
  // Only resize valid sizes into tensor.
  int64_t dims = nDimI + nDimV == 0 ? 1 : nDimI + nDimV; // FIXME: nDimI + nDimV should not be 0.
  self->size = (int64_t *)THRealloc(self->size, sizeof(int64_t)*(dims));

  for (int64_t d = 0; d < dims; d++) {
    self->size[d] = size[d];
  }
  self->nDimensionI = nDimI;
  self->nDimensionV = nDimV;
  return self;
}
Пример #3
0
static void THCudaTensor_rawResize(THCState *state, THCudaTensor *self, int nDimension, long *size, long *stride)
{
  int d;
  int nDimension_;
  long totalSize;
  int hascorrectsize = 1;

  nDimension_ = 0;
  for(d = 0; d < nDimension; d++)
  {
    if(size[d] > 0)
    {
      nDimension_++;
      if((self->nDimension > d) && (size[d] != self->size[d]))
        hascorrectsize = 0;

      if((self->nDimension > d) && stride && (stride[d] >= 0) && (stride[d] != self->stride[d]))
        hascorrectsize = 0;
    }
    else
      break;
  }
  nDimension = nDimension_;

  if(nDimension != self->nDimension)
    hascorrectsize = 0;

  if(hascorrectsize)
    return;

  if(nDimension > 0)
  {
    if(nDimension != self->nDimension)
    {
      self->size = (long*)THRealloc(self->size, sizeof(long)*nDimension);
      self->stride = (long*)THRealloc(self->stride, sizeof(long)*nDimension);
      self->nDimension = nDimension;
    }

    totalSize = 1;
    for(d = self->nDimension-1; d >= 0; d--)
    {
      self->size[d] = size[d];
      if(stride && (stride[d] >= 0) )
        self->stride[d] = stride[d];
      else
      {
        if(d == self->nDimension-1)
          self->stride[d] = 1;
        else
          self->stride[d] = self->size[d+1]*self->stride[d+1];
      }
      totalSize += (self->size[d]-1)*self->stride[d];
    }

    if(totalSize+self->storageOffset > 0)
    {
      if(!self->storage)
        self->storage = THCudaStorage_new(state);
      if(totalSize+self->storageOffset > self->storage->size)
        THCudaStorage_resize(state, self->storage, totalSize+self->storageOffset);
    }
  }
  else
    self->nDimension = 0;
}
Пример #4
0
static void *THDefaultAllocator_realloc(void* ctx, void* ptr, ptrdiff_t size) {
  return THRealloc(ptr, size);
}