I understand the concept of passing a symbol, but was wondering what exactly is going on behind the scenes. If it's not the address of the variable, then what is it?
1
There are 1 best solutions below
Related Questions in CUDA
- How can I tell which part of the code hasn't terminated?
- How can I add a dependency on Siddhi CEP to my pom.xml file?
- how can i use wso2 siddhiQL Cache data?
- siddhi count() returns a value per event, not for a group(or window)
- Can esper/siddhi generate new stream according to the group by?
- How to describe this complex scene by cep?
- How do i separate my siddhimanager based on context?
- New string within Siddhi query expression
- wso2: cep: siddhi: how to make time windows persistent
- Select events with a maximum in a sliding window
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
I believe the details are that for each
__device__variable,cudafecreates a normal global variable as in C and also a CUDA-specific PTX variable. The global C variable is used so that the host program can refer to the variable by its address, and the PTX variable is used for the actual storage of the variable. The presence of the host variable also allows the host compiler to successfully parse the program. When the device program executes, it operates on the PTX variable when it manipulates the variable by name.If you wrote a program to print the address of a
__device__variable, the address would differ depending on whether you printed it out from the host or device:Since neither processor agrees on the address of the variable, that makes copying to it problematic, and indeed
__host__functions are not allowed to access__device__variables directly:cudaMemcpyFromSymbolallows copying data back from a__device__variable, provided the programmer happens to know the (mangled) name of the variable in the source program.cudafefacilitates this by creating a mapping from mangled names to the device addresses of variables at program initialization time. The program discovers the device address of each variable by querying the CUDA driver for a driver token given its mangled name.So the implementation of
cudaMemcpyFromSymbolwould look something like this in pseudocode:If you look at the output of
nvcc --keep, you can see for yourself the way that the program interacts with special CUDART APIs that are not normally available to create the mapping:If you inspect the output, you can see that
cudafehas inserted a call to__cudaRegisterVariableto create the mapping fordevice_variable. Users should not attempt to use this API themselves.