我必须使用最大似然法分析一些数据,但 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, var"#funzione_likelihood#174"{var"#funzione_likelirobin#173"}, Tuple{CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}}}\n\xe2\x94\x82 Base.materialize(%2)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Core.Const(:(return %3))\nERROR: LoadError: GPU broadcast resulted in non-concrete element type Any.\nThis probably means that the function you are broadcasting contains an error or type instability.\nStacktrace:\n [1] error(s::String)\n @ Base .\\error.jl:33\n [2] copy\n @ ~\\.julia\\packages\\GPUArrays\\gkF6S\\src\\host\\broadcast.jl:44 [inlined]\n [3] materialize\n @ .\\broadcast.jl:883 [inlined]\n [4] trova_max_likelihood(\xce\xb8_1::Float64, \xce\xb8_2p::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, \xce\xb8_2c::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, \xcf\xb5_p::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, \xcf\x83_p::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, \xcf\xb5_c::CuArray{Float64, 1, C, \xcf\x83_c::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer})\n @ Main ~\\Documents\\GitHub\\lab2\\Lab2\\Esercizio 5\\esercizio5.jl:82\n [5] top-level scope\n @ ~\\Documents\\GitHub\\lab2\\Lab2\\Esercizio 5\\esercizio5.jl:99\n [6] eval\n @ .\\boot.jl:360 [inlined]\n [7] include_string(mapexpr::typeof(identity), mod::Module, code::String, filename::String)\n @ Base .\\loading.jl:1094\nin expression starting at C:\\Users\\marce\\Documents\\GitHub\\lab2\\Lab2\\Esercizio 5\\esercizio5.jl:99\nRun Code Online (Sandbox Code Playgroud)\n编辑2:我尝试切换到常规数组,上面的代码不起作用。我必须删除一行并定义:
\nfunction funzione_likelirobin(a_c::Float64, a_p::Float64)\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)\nend\nRun Code Online (Sandbox Code Playgroud)\n所以我用 s 对代码进行了相同的更改CuArray。我现在得到的输出是:
Variables\n #self#::var"##dotfunction#260#56"{var"#funzione_likelihood#55"{var"#funzione_likelirobin#54"{Float64, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}}}}\n x1::CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}\n\nBody::CuArray{_A, 1, CUDA.Mem.DeviceBuffer} where _A\n1 \xe2\x94\x80 %1 = Core.getfield(#self#, :funzione_likelihood)::var"#funzione_likelihood#55"{var"#funzione_likelirobin#54"{Float64, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}}}\n\xe2\x94\x82 %2 = Base.broadcasted(%1, x1)::Base.Broadcast.Broadcasted{CUDA.CuArrayStyle{1}, Nothing, var"#funzione_likelihood#55"{var"#funzione_likelirobin#54"{Float64, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}}}, Tuple{CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}}}\n\xe2\x94\x82 %3 = Base.materialize(%2)::CuArray{_A, 1, CUDA.Mem.DeviceBuffer} where _A\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 return %3\nERROR: LoadError: InvalidIRError: compiling kernel broadcast_kernel(CUDA.CuKernelContext, CuDeviceVector{Float64, 1}, Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}}, var"#funzione_likelihood#55"{var"#funzione_likelirobin#54"{Float64, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}}}, Tuple{Base.Broadcast.Extruded{CuDeviceVector{Tuple{Float64, Float64}, 1}, Tuple{Bool}, Tuple{Int64}}}}, Int64) resulted in invalid LLVM IR\nReason: unsupported dynamic function invocation (call to ln_likelihood)\nStacktrace:\n [1] funzione_likelirobin\n @ ~\\Documents\\GitHub\\lab2\\Lab2\\Esercizio 5\\esercizio5.jl:76\n [2] funzione_likelihood\n @ ~\\Documents\\GitHub\\lab2\\Lab2\\Esercizio 5\\esercizio5.jl:79\n [3] _broadcast_getindex_evalf\n @ .\\broadcast.jl:648\n [4] _broadcast_getindex\n @ .\\broadcast.jl:621\n [5] getindex\n @ .\\broadcast.jl:575\n [6] broadcast_kernel\n @ ~\\.julia\\packages\\GPUArrays\\gkF6S\\src\\host\\broadcast.jl:59\nStacktrace:\n [1] check_ir(job::GPUCompiler.CompilerJob{GPUCompiler.PTXCompilerTarget, CUDA.CUDACompilerParams, GPUCompiler.FunctionSpec{GPUArrays.var"#broadcast_kernel#17", Tuple{CUDA.CuKernelContext, CuDeviceVector{Float64, 1}, Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}}, var"#funzione_likelihood#55"{var"#funzione_likelirobin#54"{Float64, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}}}, Tuple{Base.Broadcast.Extruded{CuDeviceVector{Tuple{Float64, Float64}, 1}, Tuple{Bool}, Tuple{Int64}}}}, Int64}}}, args::LLVM.Module)\n @ GPUCompiler ~\\.julia\\packages\\GPUCompiler\\HeCT6\\src\\validation.jl:111\n [2] macro expansion\n @ ~\\.julia\\packages\\GPUCompiler\\HeCT6\\src\\driver.jl:326 [inlined]\n [3] macro expansion\n @ ~\\.julia\\packages\\TimerOutputs\\YJq3h\\src\\TimerOutput.jl:252 [inlined]\n [4] macro expansion\n @ ~\\.julia\\packages\\GPUCompiler\\HeCT6\\src\\driver.jl:324 [inlined]\n [5] emit_asm(job::GPUCompiler.CompilerJob, ir::LLVM.Module; strip::Bool, validate::Bool, format::LLVM.API.LLVMCodeGenFileType)\n @ GPUCompiler ~\\.julia\\packages\\GPUCompiler\\HeCT6\\src\\utils.jl:64\n [6] cufunction_compile(job::GPUCompiler.CompilerJob)\n @ CUDA ~\\.julia\\packages\\CUDA\\sCev8\\src\\compiler\\execution.jl:326\n [7] cached_compilation(cache::Dict{UInt64, Any}, job::GPUCompiler.CompilerJob, compiler::typeof(CUDA.cufunction_compile), linker::typeof(CUDA.cufunction_link))\n @ GPUCompiler ~\\.julia\\packages\\GPUCompiler\\HeCT6\\src\\cache.jl:90\n [8] cufunction(f::GPUArrays.var"#broadcast_kernel#17", tt::Type{Tuple{CUDA.CuKernelContext, CuDeviceVector{Float64, 1}, Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}}, var"#funzione_likelihood#55"{var"#funzione_likelirobin#54"{Float64, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}}}, Tuple{Base.Broadcast.Extruded{CuDeviceVector{Tuple{Float64, Float64}, 1}, Tuple{Bool}, Tuple{Int64}}}}, Int64}}; name::Nothing, kwargs::Base.Iterators.Pairs{Union{}, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})\n @ CUDA ~\\.julia\\packages\\CUDA\\sCev8\\src\\compiler\\execution.jl:297\n [9] cufunction(f::GPUArrays.var"#broadcast_kernel#17", tt::Type{Tuple{CUDA.CuKernelContext, CuDeviceVector{Float64, 1}, Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}}, var"#funzione_likelihood#55"{var"#funzione_likelirobin#54"{Float64, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}, CuDeviceVector{Float64, 1}}}, Tuple{Base.Broadcast.Extruded{CuDeviceVector{Tuple{Float64, Float64}, 1}, Tuple{Bool}, Tuple{Int64}}}}, Int64}})\n @ CUDA ~\\.julia\\packages\\CUDA\\sCev8\\src\\compiler\\execution.jl:291\n [10] macro expansion\n @ ~\\.julia\\packages\\CUDA\\sCev8\\src\\compiler\\execution.jl:102 [inlined]\n [11] launch_heuristic(::CUDA.CuArrayBackend, ::GPUArrays.var"#broadcast_kernel#17", ::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, ::Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}}, var"#funzione_likelihood#55"{var"#funzione_likelirobin#54"{Float64, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}}}, Tuple{Base.Broadcast.Extruded{CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}, Tuple{Bool}, Tuple{Int64}}}}, ::Int64; elements::Int64, elements_per_thread::Int64)\n @ CUDA ~\\.julia\\packages\\CUDA\\sCev8\\src\\gpuarrays.jl:17\n [12] copyto!(dest::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, bc::Base.Broadcast.Broadcasted{Nothing, Tuple{Base.OneTo{Int64}}, var"#funzione_likelihood#55"{var"#funzione_likelirobin#54"{Float64, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}}}, Tuple{CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}}})\n @ GPUArrays ~\\.julia\\packages\\GPUArrays\\gkF6S\\src\\host\\broadcast.jl:65\nin expression starting at C:\\Users\\marce\\Documents\\GitHub\\lab2\\Lab2\\Esercizio 5\\esercizio5.jl:100\nRun Code Online (Sandbox Code Playgroud)\n
您提供的代码似乎有点缺乏 MWE。然而,填充一些指定类型的随机数据,我们有:
\nusing CUDA\na_c, a_p, \xce\xb8_1 = rand(3)\nN = 1000\n\xce\xb8_2p, \xce\xb8_2c, \xcf\xb5_p, \xcf\x83_p, \xcf\xb5_c, \xcf\x83_c = ntuple(x->CUDA.randn(Float64, N), 6)\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 a_c + a_p + \xce\xb8_1 + sum(\xce\xb8_2p) + sum(\xce\xb8_2c) + sum(\xcf\xb5_p) + sum(\xcf\x83_p) + sum(\xcf\xb5_c) + sum(\xcf\x83_c)\nend\n\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 # Better make a range if we want to broadcast over it\n range = CUDA.fill((1., 2.), 10)\n\n @code_warntype funzione_likelihood.(range)\n #Where range::CuArray{Tuple{Float64,Float64}}\nend\nRun Code Online (Sandbox Code Playgroud)\n它为我运行没有任何错误,并在输出中给出蓝色的、稳定推断的类型@code_warntype:
julia> trova_max_likelihood(\xce\xb8_1, \xce\xb8_2p, \xce\xb8_2c, \xcf\xb5_p, \xcf\x83_p, \xcf\xb5_c, \xcf\x83_c)\nMethodInstance for (::var"##dotfunction#413#25"{var"#funzione_likelihood#24"{var"#funzione_likelirobin#23"}})(::CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer})\n from (::var"##dotfunction#413#25")(x1) in Main\nArguments\n #self#::Core.Const(var"##dotfunction#413#25"{var"#funzione_likelihood#24"{var"#funzione_likelirobin#23"}}(var"#funzione_likelihood#24"{var"#funzione_likelirobin#23"}(var"#funzione_likelirobin#23"())))\n x1::CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}\nBody::Union{}\n1 \xe2\x94\x80 %1 = Core.getfield(#self#, :funzione_likelihood)::Core.Const(var"#funzione_likelihood#24"{var"#funzione_likelirobin#23"}(var"#funzione_likelirobin#23"()))\n\xe2\x94\x82 %2 = Base.broadcasted(%1, x1)::Base.Broadcast.Broadcasted{CUDA.CuArrayStyle{1}, Nothing, var"#funzione_likelihood#24"{var"#funzione_likelirobin#23"}, Tuple{CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}}}\n\xe2\x94\x82 Base.materialize(%2)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Core.Const(:(return %3))\nRun Code Online (Sandbox Code Playgroud)\n因此,不稳定似乎可能来自您已删除的代码中的某个地方...。
也就是说,我强烈建议避免全局变量;要么只是在函数签名中显式指定变量,要么如果必须的话,在闭包中捕获局部变量,这比使用全局变量更好——这可能是类型不稳定的主要根源。
\n使用闭包代替全局变量,如下所示
\nusing CUDA\na_c, a_p, \xce\xb8_1 = rand(3)\nN = 1000\n\xce\xb8_2p, \xce\xb8_2c, \xcf\xb5_p, \xcf\x83_p, \xcf\xb5_c, \xcf\x83_c = ntuple(x->CUDA.randn(Float64, N), 6)\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 a_c + a_p + \xce\xb8_1 + sum(\xce\xb8_2p) + sum(\xce\xb8_2c) + sum(\xcf\xb5_p) + sum(\xcf\x83_p) + sum(\xcf\xb5_c) + sum(\xcf\x83_c)\nend\n\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 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 # Better make a range if we want to broadcast over it\n range = CUDA.fill((1., 2.), 10)\n\n @code_warntype funzione_likelihood.(range)\n #Where range::CuArray{Tuple{Float64,Float64}}\nend\nRun Code Online (Sandbox Code Playgroud)\n产生略有不同的@code_warntype输出,但仍然具有蓝色、稳定推断的类型并且没有错误
julia> trova_max_likelihood(\xce\xb8_1, \xce\xb8_2p, \xce\xb8_2c, \xcf\xb5_p, \xcf\x83_p, \xcf\xb5_c, \xcf\x83_c)\nMethodInstance for (::var"##dotfunction#414#30"{var"#funzione_likelihood#29"{var"#funzione_likelirobin#28"{Float64, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}}}})(::CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer})\n from (::var"##dotfunction#414#30")(x1) in Main\nArguments\n #self#::var"##dotfunction#414#30"{var"#funzione_likelihood#29"{var"#funzione_likelirobin#28"{Float64, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}}}}\n x1::CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}\nBody::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}\n1 \xe2\x94\x80 %1 = Core.getfield(#self#, :funzione_likelihood)::var"#funzione_likelihood#29"{var"#funzione_likelirobin#28"{Float64, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}}}\n\xe2\x94\x82 %2 = Base.broadcasted(%1, x1)::Base.Broadcast.Broadcasted{CUDA.CuArrayStyle{1}, Nothing, var"#funzione_likelihood#29"{var"#funzione_likelirobin#28"{Float64, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}, CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}}}, Tuple{CuArray{Tuple{Float64, Float64}, 1, CUDA.Mem.DeviceBuffer}}}\n\xe2\x94\x82 %3 = Base.materialize(%2)::CuArray{Float64, 1, CUDA.Mem.DeviceBuffer}\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 return %3\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
723 次 |
| 最近记录: |