Hello everybody - I recently resuscitated CUDA::Minimal, a module that provides basic memory allocation and memory transfer functionality for CUDA (i.e. video card) parallel programming. Note, you must write your own CUDA kernels separately; I recommend writing them in XS wrapper code, using ExtUtils::nvcc and can answer questions if you're interested.
When using ExtUtils::nvcc, your code gets compiled through a C++ compiler. I seem to have struck a problem with how XS handles its dVAR and dXSARGS declarations in the Boot section and in other sections. The applicable error can be found here: https://github.com/run4flat/perl-CUDA-Minimal/issues/7. The actual C code that leads to this error (generated from the XS code on my machine) is given in this gist: https://gist.github.com/run4flat/4974702. The problem is a linkage conflict in the declaration for Perl__notused on lines 163 <https://gist.github.com/run4flat/4974702#file-minimal-c-L163>and 329 <https://gist.github.com/run4flat/4974702#file-minimal-c-L374>, which I presume is embedded in dVAR or dXSARGS. However, I'm left scratching my head as to why the linkage would differ between these two. Based on my understanding of how extern "C" works<http://stackoverflow.com/questions/10458545/what-is-extern-linkage-and-with-c-language-linkage>, there is no difference that I can see. That is, there is no difference in the linkage specification for the two, because the extern "C" on line 369 does not have curly braces and therefore only effects the declaration of the function definition. It should not impact the declarations of any variables. Anybody have any idea what's causing this linkage specification problem, and how I might fix it? Thanks! David -- "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." -- Brian Kernighan