小编Mar*_*nda的帖子

Julia CUDA:LoadError:GPU 广播导致非具体元素类型 Any

我必须使用最大似然法分析一些数据,但 CUDA 不喜欢我处理类型不稳定性的方式。关于如何解决这个问题的任何想法? \n我尽力通过声明每个函数参数的类型来强制具体的返回类型,但它似乎不起作用。

\n

编辑:我将一些函数声明移回到它们所属的位置。\n这里是程序有问题的部分的摘录:

\n
function ln_likelihood( a_c::Float64,\n                        a_p::Float64,\n                        \xce\xb8_1::Float64,\n                        \xce\xb8_2p::CuArray{Float64},\n                        \xce\xb8_2c::CuArray{Float64},\n                        \xcf\xb5_p::CuArray{Float64},\n                        \xcf\x83_p::CuArray{Float64},\n                        \xcf\xb5_c::CuArray{Float64},\n                        \xcf\x83_c::CuArray{Float64})\n    ...\n    #return Float64\nend\n\nfunction trova_max_likelihood(  \xce\xb8_1::Float64,\n                                \xce\xb8_2p::CuArray{Float64},\n                                \xce\xb8_2c::CuArray{Float64},\n                                \xcf\xb5_p::CuArray{Float64},\n                                \xcf\x83_p::CuArray{Float64},\n                                \xcf\xb5_c::CuArray{Float64},\n                                \xcf\x83_c::CuArray{Float64})\n\n    ...\n\n    function funzione_likelirobin(a_c::Float64, a_p::Float64)\n        global \xce\xb8_1,\xce\xb8_2p,\xce\xb8_2c, \xcf\xb5_p, \xcf\x83_p, \xcf\xb5_c, \xcf\x83_c \n        ln_likelihood(a_c,a_p,\xce\xb8_1,\xce\xb8_2p,\xce\xb8_2c, \xcf\xb5_p, \xcf\x83_p, \xcf\xb5_c, \xcf\x83_c)\n    end\n\n    funzione_likelihood(x::Tuple{Float64, Float64}) = funzione_likelirobin(x[1],x[2])\n\n    @code_warntype funzione_likelihood.(range)\n    #Where range::CuArray{Tuple{Float64,Float64}}\n    ...\nend\n\n\ntrova_max_likelihood(g\xce\xb8_1, g\xce\xb8_2p, g\xce\xb8_2c, g\xcf\xb5_p, g\xcf\x83_p, g\xcf\xb5_c, g\xcf\x83_c)\n\n
Run Code Online (Sandbox Code Playgroud)\n

我得到的输出:

\n
Variables\n  #self#::Core.Const(var"##dotfunction#274#175"{var"#funzione_likelihood#174"{var"#funzione_likelirobin#173"}}(var"#funzione_likelihood#174"{var"#funzione_likelirobin#173"}(var"#funzione_likelirobin#173"())))\n  x1::CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}\n\nBody::Union{}\n1 \xe2\x94\x80 %1 = Core.getfield(#self#, :funzione_likelihood)::Core.Const(var"#funzione_likelihood#174"{var"#funzione_likelirobin#173"}(var"#funzione_likelirobin#173"()))\n\xe2\x94\x82   %2 = Base.broadcasted(%1, x1)::Base.Broadcast.Broadcasted{CUDA.CuArrayStyle{1}, Nothing, …
Run Code Online (Sandbox Code Playgroud)

julia

6
推荐指数
1
解决办法
723
查看次数

标签 统计

julia ×1