JL Julia  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Распределённые вычисления

Профессиональные сценарии по теме «Распределённые вычисления» проверяют диагностику, производительность, безопасность и способность защитить архитектурное решение. Вопросы требуют читать код, находить границу применимости, выбирать проверяемую правку и отличать свойства Julia от поведения конкретного пакета. В тесте 30 вопросов: 18 заданий с кодом и 12 заданий с математической записью. Все формулировки рассчитаны на Julia 1.12.6; для сторонних библиотек используется явно названный API.

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 1 из 30
Какой механизм Julia определяет поведение строки `@everywhere function local_energy(x)`?
W=\{w_1,\ldots,w_p\}
JuliaJulia · Рабочие процессы
using Distributed
addprocs(2)
@everywhere function local_energy(x)
    return sum(abs2, x)
end
@show workers() fetch(@spawnat workers()[1] local_energy(1:100))
Вопрос 2 из 30
Какой эксперимент отличит настоящий механизм `@everywhere function local_energy(x)` от случайного результата одного запуска?
JuliaJulia · Рабочие процессы
using Distributed
addprocs(2)
@everywhere function local_energy(x)
    return sum(abs2, x)
end
@show workers() fetch(@spawnat workers()[1] local_energy(1:100))
Вопрос 3 из 30
Какую гарантию должна сохранить правка участка с `@everywhere function local_energy(x)`?
JuliaJulia · Рабочие процессы
using Distributed
addprocs(2)
@everywhere function local_energy(x)
    return sum(abs2, x)
end
@show workers() fetch(@spawnat workers()[1] local_energy(1:100))
Вопрос 4 из 30
После обновления Julia или пакета поведение участка с `@everywhere function local_energy(x)` изменилось. Какой критерий приёмки остаётся корректным?
W=\{w_1,\ldots,w_p\}
Вопрос 5 из 30
Что следует сообщить пользователю библиотеки о поведении `@everywhere function local_energy(x)`?
Вопрос 6 из 30
Какое объяснение для `future = remotecall(w, 1:10) do xs` выдержит проверку на другом допустимом входе?
y=\operatorname{fetch}(\operatorname{remotecall}(f,w,x))
JuliaJulia · Удалённые вызовы
using Distributed
addprocs(2)
w = first(workers())
future = remotecall(w, 1:10) do xs
    sum(xs)
end
@show isready(future) fetch(future)
Вопрос 7 из 30
Какую проверку стоит добавить для участка с `future = remotecall(w, 1:10) do xs`?
JuliaJulia · Удалённые вызовы
using Distributed
addprocs(2)
w = first(workers())
future = remotecall(w, 1:10) do xs
    sum(xs)
end
@show isready(future) fetch(future)
Вопрос 8 из 30
Какое решение устраняет риск вокруг `future = remotecall(w, 1:10) do xs`, не меняя поведение на допустимых данных?
JuliaJulia · Удалённые вызовы
using Distributed
addprocs(2)
w = first(workers())
future = remotecall(w, 1:10) do xs
    sum(xs)
end
@show isready(future) fetch(future)
Вопрос 9 из 30
Две реализации участка с `future = remotecall(w, 1:10) do xs` совпадают на обычных данных. Что необходимо проверить перед выпуском?
y=\operatorname{fetch}(\operatorname{remotecall}(f,w,x))
Вопрос 10 из 30
Что следует сообщить пользователю библиотеки о поведении `future = remotecall(w, 1:10) do xs`?
Вопрос 11 из 30
Какое утверждение точнее всего объясняет участок с `A = SharedArray{Float64}(10_000)`?
T=T_{ser}+T_{net}+T_{compute}
JuliaJulia · Передача данных
using Distributed, SharedArrays
addprocs(2)
A = SharedArray{Float64}(10_000)
@sync @distributed for i in eachindex(A)
    A[i] = sin(i)
end
@show sum(A)
Вопрос 12 из 30
Какой контрольный тест лучше всего проверит правило, связанное с `A = SharedArray{Float64}(10_000)`?
JuliaJulia · Передача данных
using Distributed, SharedArrays
addprocs(2)
A = SharedArray{Float64}(10_000)
@sync @distributed for i in eachindex(A)
    A[i] = sin(i)
end
@show sum(A)
Вопрос 13 из 30
Какое требование к `A = SharedArray{Float64}(10_000)` важнее удобной детали текущей реализации?
JuliaJulia · Передача данных
using Distributed, SharedArrays
addprocs(2)
A = SharedArray{Float64}(10_000)
@sync @distributed for i in eachindex(A)
    A[i] = sin(i)
end
@show sum(A)
Вопрос 14 из 30
После обновления Julia или пакета поведение участка с `A = SharedArray{Float64}(10_000)` изменилось. Какой критерий приёмки остаётся корректным?
T=T_{ser}+T_{net}+T_{compute}
Вопрос 15 из 30
Какое утверждение о `A = SharedArray{Float64}(10_000)` является переносимым правилом, а не особенностью одного запуска?
Вопрос 16 из 30
Какое утверждение точнее всего объясняет участок с `push!(results, @spawnat w f(chunk))`?
w_i\downarrow\Rightarrow retry\lor fail
JuliaJulia · Отказ процесса
using Distributed
addprocs(2)
function resilient_map(f, chunks)
    results = Future[]
    for (w, chunk) in zip(Iterators.cycle(workers()), chunks)
        push!(results, @spawnat w f(chunk))
    end
    return fetch.(results)
end
@show resilient_map(sum, [1:10, 11:20])
Вопрос 17 из 30
Какой эксперимент отличит настоящий механизм `push!(results, @spawnat w f(chunk))` от случайного результата одного запуска?
JuliaJulia · Отказ процесса
using Distributed
addprocs(2)
function resilient_map(f, chunks)
    results = Future[]
    for (w, chunk) in zip(Iterators.cycle(workers()), chunks)
        push!(results, @spawnat w f(chunk))
    end
    return fetch.(results)
end
@show resilient_map(sum, [1:10, 11:20])
Вопрос 18 из 30
Какую гарантию должна сохранить правка участка с `push!(results, @spawnat w f(chunk))`?
JuliaJulia · Отказ процесса
using Distributed
addprocs(2)
function resilient_map(f, chunks)
    results = Future[]
    for (w, chunk) in zip(Iterators.cycle(workers()), chunks)
        push!(results, @spawnat w f(chunk))
    end
    return fetch.(results)
end
@show resilient_map(sum, [1:10, 11:20])
Вопрос 19 из 30
При переносе кода с `push!(results, @spawnat w f(chunk))` в библиотеку какой критерий нельзя заменять впечатлением «пример работает»?
w_i\downarrow\Rightarrow retry\lor fail
Вопрос 20 из 30
Что следует сообщить пользователю библиотеки о поведении `push!(results, @spawnat w f(chunk))`?
Вопрос 21 из 30
Как нужно интерпретировать `expr_from_user = :(run(`, не добавляя к коду лишних гарантий?
trust(worker)=trust(process)
JuliaJulia · Риски безопасности
using Distributed
addprocs(1)
expr_from_user = :(run(`sh -c 'echo unsafe'`))
# Никогда не передавайте недоверенное выражение в Core.eval на worker.
@show workers() expr_from_user.head
Вопрос 22 из 30
Какой тест точнее всего зафиксирует границу поведения `expr_from_user = :(run(`?
JuliaJulia · Риски безопасности
using Distributed
addprocs(1)
expr_from_user = :(run(`sh -c 'echo unsafe'`))
# Никогда не передавайте недоверенное выражение в Core.eval на worker.
@show workers() expr_from_user.head
Вопрос 23 из 30
Что должно остаться истинным после рефакторинга участка с `expr_from_user = :(run(`?
JuliaJulia · Риски безопасности
using Distributed
addprocs(1)
expr_from_user = :(run(`sh -c 'echo unsafe'`))
# Никогда не передавайте недоверенное выражение в Core.eval на worker.
@show workers() expr_from_user.head
Вопрос 24 из 30
Как проверить, что новая реализация `expr_from_user = :(run(` не изменила обещанное пользователю поведение?
trust(worker)=trust(process)
Вопрос 25 из 30
Что следует сообщить пользователю библиотеки о поведении `expr_from_user = :(run(`?
Вопрос 26 из 30
Какой механизм Julia определяет поведение строки `remote_trial = @belapsed begin`?
S_p=T_1/T_p
JuliaJulia · Контроль производительности
using Distributed, BenchmarkTools
addprocs(2)
data = rand(1_000_000)
chunks = [data[1:500_000], data[500_001:end]]
remote_trial = @belapsed begin
    fs = [remotecall(sum, w, c) for (w,c) in zip(workers(), $chunks)]
    sum(fetch, fs)
end
local_trial = @belapsed sum($data)
@show local_trial remote_trial
Вопрос 27 из 30
Какой тест точнее всего зафиксирует границу поведения `remote_trial = @belapsed begin`?
JuliaJulia · Контроль производительности
using Distributed, BenchmarkTools
addprocs(2)
data = rand(1_000_000)
chunks = [data[1:500_000], data[500_001:end]]
remote_trial = @belapsed begin
    fs = [remotecall(sum, w, c) for (w,c) in zip(workers(), $chunks)]
    sum(fetch, fs)
end
local_trial = @belapsed sum($data)
@show local_trial remote_trial
Вопрос 28 из 30
Какое требование к `remote_trial = @belapsed begin` важнее удобной детали текущей реализации?
JuliaJulia · Контроль производительности
using Distributed, BenchmarkTools
addprocs(2)
data = rand(1_000_000)
chunks = [data[1:500_000], data[500_001:end]]
remote_trial = @belapsed begin
    fs = [remotecall(sum, w, c) for (w,c) in zip(workers(), $chunks)]
    sum(fetch, fs)
end
local_trial = @belapsed sum($data)
@show local_trial remote_trial
Вопрос 29 из 30
После обновления Julia или пакета поведение участка с `remote_trial = @belapsed begin` изменилось. Какой критерий приёмки остаётся корректным?
S_p=T_1/T_p
Вопрос 30 из 30
Какое ограничение стоит прямо указать в документации к участку с `remote_trial = @belapsed begin`?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу