我必须使用最大似然法分析一些数据,但 CUDA 不喜欢我处理类型不稳定性的方式。关于如何解决这个问题的任何想法? \n我尽力通过声明每个函数参数的类型来强制具体的返回类型,但它似乎不起作用。
\n编辑:我将一些函数声明移回到它们所属的位置。\n这里是程序有问题的部分的摘录:
\nfunction 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\nRun Code Online (Sandbox Code Playgroud)\n我得到的输出:
\nVariables\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 ×1