extern

Hi,

I have seen in many CUDA programs using shared memory “extern” is used even when the kernel and the main is in the same .cu file. Like:

extern shared float temp;// allocated on invocation

when “extern” is not written I get error. Why is it so ?
Also is it necessary to specify the amount of shared memory in kernel call in main?

Can anyone please clarify my doubts here?

Thanks

When the size of a kernel’s shared memory is dynamically allocated upon launch, it’s necessary to declare the shared array as extern [1].

Statically allocated shared variables should not be declared with extern. For example:

[codebox]

global void foo(…)

{

// no need for extern here

shared int shared_array[10];

}

int main(void)

{

// no need to specify the size of shared memory here

foo<<<1,1>>>(…);

}

[/codebox]

[1] http://developer.download.nvidia.com/compu…g_Guide_2.3.pdf section B.2.3