【问题标题】:How do I create a CuArray populated with strings in Julia?如何在 Julia 中创建一个填充有字符串的 CuArray?
【发布时间】:2019-11-18 18:45:38
【问题描述】:

我有很多字符串操作要执行,我想在 Julia 1.2.0 中使用 GPU 处理来实现代码。我马上就遇到了定义 CuArray 的问题,下面是一个示例。我本质上希望能够将一维字符串数组传递到 GPU 内核中。

using CUDAnative 

using CuArrays

CuArray(["1","2","3"])

​

Type String does not have a definite size.

Stacktrace:
 [1] sizeof at .\essentials.jl:452 [inlined]
 [2] CuArray{String,1,P} where P(::UndefInitializer, ::Tuple{Int64}) at C:\Users\julul\.julia\packages\CuArrays\7z7MV\src\array.jl:90
 [3] Type at C:\Users\julul\.julia\packages\CuArrays\7z7MV\src\array.jl:174 [inlined]
 [4] CuArray(::Array{String,1}) at C:\Users\julul\.julia\packages\CuArrays\7z7MV\src\array.jl:188
 [5] top-level scope at In[24]:3

【问题讨论】:

    标签: string parallel-processing julia gpu


    【解决方案1】:

    也许有人会有更好的主意,但这是我会尝试做的:

    using CUDAnative 
    using CuArrays
    using InternedStrings
    vals = pointer.(intern.(["1","2","33"]))
    c = CuArray(vals) 
    

    请注意,如果不将Strings 内部化,相同String 的不同副本将指向不同的内存地址,并且无法进行您可能想要进行的文本挖掘。为了更清楚,请参见下面的示例:

    julia> CuArray(pointer.(intern.(["1","2","3"*"3"]))) == CuArray(pointer.(intern.(["1","2","33"])))
    true
    
    julia> CuArray(pointer.(["1","2","3"*"3"])) == CuArray(pointer.(["1","2","33"]))
    false
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-29
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多