9
votes

What is the difference between

 cudaMemcpy and cudaMemset??

How can I copy an int value from host to device? This is the code I am using

int addXdir = 1;
int devAddXdir;
cudaMalloc((void**)&devAddXdir, sizeof(int));
cudaMemcpy(devAddXdir, addXdir, sizeof(int), cudaMemcpyHostToDevice);

it gives the following errors error: argument of type "int" is incompatible with parameter of type "void *" error: argument of type "int" is incompatible with parameter of type "const void *"

1
The difference between cudaMemcpy and cudaMemset is that one takes a value as the source, the other a pointer. This difference is made perfectly clear in the API documentation of the two functions. - talonmies

1 Answers

13
votes

devAddXdir must be a pointer for that code to work. Also, you must pass addXdir by reference to cudaMemcpy, not by value. Like this:

int addXdir = 1;
int * devAddXdir;
cudaMalloc((void**)&devAddXdir, sizeof(int));
cudaMemcpy(devAddXdir, &addXdir, sizeof(int), cudaMemcpyHostToDevice);