I was trying to make such somtehing (actually I need to write some integration tasks) in Sida < / P>
I tried to do this But he did not work - this is the only reason.
Error: Function Pointer and Function Template parameters are not supported in sm_1x.
float F1 (float x) {return x; } __ Global D minus tablet (float low, float top, float Pi_fnkshn (float), float * Results) to {(Low, Lower, Left, Lower, Lower ++) {* result = Result * + Pi_fnkshn (Bottom) ; }} Int main () {float res; Float * dev_res; CudaMalloc ((void **) & dev_res, sizeof (float)); Tablet & lt; & Lt; & Lt; 1,1 & gt; & Gt; & Gt; (0.0, 5.0, F1, dev_res); CudaMemcpy (& amp; res, dev_res, sizeof (float), cudaMemcpyDeviceToHost); Printf ("% f \ n", ridge); / *************************************************************************************************** ** ********** return 0; }
To get rid of your compilation error, you should see
-Janod arch = compute_20, code = sm_20 are compiled when your code as a compiler argument but then you will have some runtime problems:
Siudia went from the programming Guide
__ global __ function pointer is supported in the host code, but not in the device code. Function Points for the
__ device __ function are only supported in compute device code for compute capability 2.x and higher devices.
It is not allowed to detect
__ device __ function in host code.
If you can do something like that ( "customize Fnkshnpointrs" samples):
// Your function pointer type - unsigned char returns, Type takes the unsigned four types of parameters and float type is notified four (* pointFunction_t) (unsigned char, float); // Some devices function unsigned char thresholds (in unsigned char, float correction) {to be pointed __device__ ...} // pComputeThreshold __device__ pointFunction_t pComputeThreshold = Threshold side function pointer as a tool to work your __device__ Is, // your __device__ function point at the host-side function pointer function_t h_pointFunction; // host code: cudaMemcpyFromSymbol your host equivalent (& amp; h_pointFunction, pComputeThreshold, sizeof (pointFunction_t)) to function pointers Copy
you
h_pointFunction __ device __ to have a parameter for your kernel, which can use it.
// Your parameter is calling __global__ as zero kernel to call your __device__ function indicator (PointFunction_t pPointOperation) {unsigned char tmp; ... tmp = (* pPointOperation) (TMP, 150.0) ...} Calling the kernel in the host code, your host-party __device__ function pointer returns to the kernel & lt; & Lt; & Lt; ... & gt; & Gt; & Gt; ; (H_pointFunction);
Hopefully something made in everyone, it changes your f1 function to be a
__ device __ function and to follow a similar process (Typedefs are not necessary, but they do the code well) To get your kernel looks like it is to get a functional function on the host-side as a function pointer, I function the Pineers CUDA sample
No comments:
Post a Comment