kernelLauncher or cuLaunchKernel



I use jcuda for complex computations look like this

memoryAllocation and copyFromHostToDevice
		launch function 1 with parameter set 1;
		launch function 2 with parameter set 2;
		launch function 1 with parameter set 3;
		launch function 2 with parameter set 4;

I always use kernelLauncher.setup(…).call(…) for function launch and it works good.

I see in you use ‘cuLaunchKernel(kernelParameters)’ where ‘…);’

When I use cuLaunchKernel I can compile the code but the program throws ‘EXCEPTION_ACCESS_VIOLATION’ after first ‘for’ cycle.

I consider that the ‘cuLaunchKernel(kernelParameters)’ method is not suitable for my case.
Am I right?

P.S. In ‘cuLaunchKernel(kernelParameters)’ case you don’t use (as I see in tutorial) ‘memoryAllocation’ and ‘memoryCopy‘. Does it mean that ‘…);’ was used in this case instead of ‘memoryAllocation’ and ‘memoryCopy‘?

Thank you again!



The question is not entirely clear. But a general remark: The [inline]KernelLauncher[/inline] class is only a utility class. Loading modules and launching kernels may be difficult. (And it was even more difficult with older CUDA versions). So I created this class to make it a little bit easier (or at least, more convenient). Especially when someone only wants to quickly write+test a kernel: Then the KernelLauncher may reduce the amount of “boilerplate code” that is required on the host side.

BUT: Everything that you do with the KernelLauncher is also possible without the KernelLauncher. So what you are doing with [inline]kernelLauncher.setup(…).call(…)[/inline] can also be done with [inline]cuLaunchKernel[/inline]. When you receive an [inline]EXCEPTION_ACCESS_VIOLATION[/inline], then there is something wrong. But I can’t say what is wrong without more code…

Also note that the Tutorial only shows the basic invocation of a kernel. It refers to the JCudaVectorAdd example, which is a complete example that shows how a kernel is loaded and executed, and which could serve as a starting point for first own programs.