Skip to content

occa::memory::setDtype Modifies other references #747

@noelchalmers

Description

@noelchalmers

Following the recent change to occa::memory::size() the following program:

#include <occa.hpp>

int main(const int argc, const char **argv) {

  occa::device device({{"mode", "Serial"}});

  size_t Nentries = 10;
  occa::memory a = device.malloc<double>(Nentries);

  printf("Size of a = %ld \n", a.size());

  occa::memory b = a;
  b.setDtype(occa::dtype::char_);

  printf("Size of a = %ld \n", a.size());

  return 0;
}

will print

Size of a = 10
Size of a = 80

I.e., calling occa::memory::setDtype on b modifies the 'size' of a and all other memory handles that wrap the same modeMemory. This is because dtype is held in the modeMemory class, not the memory wrapper.

While this is a bit corner case-y, I think the behavior should be that memory wrappers hold the dtype, not the modeMemory so that the return values of size when performing such type-punning is more intuitive.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugUse this label when reporting bugs!runtimeRelated to the OCCA runtime API

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions