SharedArray
만 Vararg
의 Tuple
가 아닌 ...하지만 여기에 평면 배열에 튜플을 인코딩 @ halirutan의 생각의 초안의 비트 유형을 포함 할 수 있습니다 : 그래서
immutable SharedThing{T}
data::SharedArray{T}
strides::Vector{Int}
end
function SharedThing{T}(tuples::Tuple{Vararg{T}}...)
strides = collect(map(length, tuples))
data = SharedArray(T, sum(strides))
i = 1
for (s, t) in zip(strides, tuples)
data[i:i+s-1] = collect(t)
i += s
end
SharedThing{T}(data, strides)
end
function Base.getindex{T}(xs::SharedThing{T}, i)
before = sum(xs.strides[1:i-1])
tuple(xs.data[before+1:before + xs.strides[i]]...)
end
:
를
julia> xs = SharedThing((1, 2,3), (22, 33))
SharedThing{Int64}([1,2,3,22,33],[3,2])
julia> xs[1]
(1,2,3)
julia> xs[2]
(22,33)
물론 이것은 최적화 할 수 있으며 병렬 처리에 좋은 공유 구조를 얻는 데주의를 기울이지 않으며 유형 처리가 차선책이라고 우려합니다. 여전히 희망 사항으로 활용할 수 있습니다.
출처
2017-05-09 10:12:02
phg
조금 읽은 후에'SharedArray (Vuparg {Vararg {Int64}}, 10)'줄에있는 뭔가가 효과가 있을지 모르지만 그렇지 않다고 생각했습니다. 오류 메시지 * ArgumentError : SharedArray 요소의 형식은 비트 형식이어야합니다. Tuple {Vararg {Int64, N}} *은 이것이 가능하지 않을 가능성이 있음을 나타냅니다. 그러나 이것은 단지 추측 일뿐입니다. 해결책은 ints의 보통'SharedArray'를 만들고 원하는 것을 * 인 코드 할 수 있습니다. 그래서 레이아웃은'[b [1], v11, b [2], v21 ,, v22, b [3], v31, b [4], v41, v42, v43, v44] 그것은 단지 해킹 일뿐입니다. – halirutan