-
Notifications
You must be signed in to change notification settings - Fork 91
Open
Labels
bugUse this label when reporting bugs!Use this label when reporting bugs!runtimeRelated to the OCCA runtime APIRelated to the OCCA runtime API
Milestone
Description
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
Labels
bugUse this label when reporting bugs!Use this label when reporting bugs!runtimeRelated to the OCCA runtime APIRelated to the OCCA runtime API