Why does it need constant memory

Hello everyone. I have a question, I am writing CUDA and I have used share memory, I’m confused that if I want to continue improving performance, do i need to use constant memory for my parameter, because I found constant memory is as same as global memory, they are off-chip.Why does CUDA need constant memory!?? Thanks for any responses.

Constant memory is best for cases when a large number of threads need to access single or few memory cells. It uses broadcasting - value of the memory cell is read once and spread amongst half-warp of threads (as far as I remember, please correct me if I’m wrong).

What do mean by parameter?

MK

Hi, because I have some constant, but I use global memory pointer for my function.

[b]I have another problem, I try to use constant memory and I wrote following code

    __constant__ int M;

    void main(void)
    {
    int M_Host = 5;
    cudaMemcpyToSymbol(&M,&M_Host , sizeof(M));
    Kernel()<<<>>>…

    }

In my kernel, I found M didn’ get any value from “cudaMemcpyToSymbol”, what happened with them?? My compilation is successful.[/b]

Shouldn’t be like this

// after the headers
___constant__ int M; 

....
// inside the code
cudamemcpytosymbol(M,&M_Host,sizeof(int));

?
When a variable is declared in this manner it is global and it can be access directly from all kernels without needing to use it as an argument.