As we all know, some codes can not run on GPU. But there will be some alternative way to solve it.
For example, sqrt
can not run on GPU due to a _fpow
error. But CUDA.sqrt
is an alternative solution. In this condition, 2 methods will be written like the following code.
my_sqrt(x) = sqrt(x)
my_sqrt_cuda(x) = CUDA.sqrt(x)
When some upper code call this method, it have to duplicated to adapt the duplicated my_sqrt
.
In C++, #if
could be used to treat this problem. In julia, a @static
macro also could be used to solve operating system difference.
Can I detect an expression to distinguish the device (CPU or GPU) the code is running on? If so, the code should be like:
my_sqrt(x) = @static magic_expression ? CUDA.sqrt(x) : sqrt(x)
And this method could be call on either CPU or GPU condition.
Update: I found that sqrt
has been fixed in CUDA.jl. So maybe power or something else is a better sample.