💡 Инструкция: Выберите один ответ из пяти. На работу отведено 85 минут. После завершения откроются правильные ответы, объяснения и результаты по темам.
Вопрос 2 из 30
Какой эксперимент отличит настоящий механизм `@everywhere function local_energy(x)` от случайного результата одного запуска?
Julia Julia · Рабочие процессы Копировать
using Distributed
addprocs(2)
@everywhere function local_energy(x)
return sum(abs2, x)
end
@show workers() fetch(@spawnat workers()[1] local_energy(1:100))
Проверить на отдельном примере, что большинство рабочий процессs разделяют глобальные переменные главного процесса по ссылке, поэтому повторная загрузка модулей не нужна.
Проверить на отдельном примере, что аргументы и результаты обычно сериализуются и передаются между процессами; крупные данные лучше размещать осознанно, а не посылать заново для каждой мелкой операции.
Проверить на отдельном примере, что `remotecall_fetch` возвращает результат удалённого вызова, а `@spawnat` создаёт future; выбор определяет, где и когда ждать и как обрабатывать ошибку.
Проверить на отдельном примере, что контроль производительности разделяет вычисление, сериализацию, сеть и простой; больше процессов может замедлить задачу при маленьких блоках или общей файловой системе.
Проверить на отдельном примере, что рабочий процесс — отдельный процесс со своим глобальным состоянием и окружением; определение функции на главном процессе не всегда автоматически доступно удалённо.
Вопрос 4 из 30
После обновления Julia или пакета поведение участка с `@everywhere function local_energy(x)` изменилось. Какой критерий приёмки остаётся корректным?
W=\{w_1,\ldots,w_p\}
Приёмка должна подтвердить, что аргументы и результаты обычно сериализуются и передаются между процессами; крупные данные лучше размещать осознанно, а не посылать заново для каждой мелкой операции.
Приёмка должна подтвердить, что рабочий процесс — отдельный процесс со своим глобальным состоянием и окружением; определение функции на главном процессе не всегда автоматически доступно удалённо.
Приёмка должна подтвердить, что контроль производительности разделяет вычисление, сериализацию, сеть и простой; больше процессов может замедлить задачу при маленьких блоках или общей файловой системе.
Приёмка должна подтвердить, что `remotecall_fetch` возвращает результат удалённого вызова, а `@spawnat` создаёт future; выбор определяет, где и когда ждать и как обрабатывать ошибку.
Приёмка должна подтвердить, что большинство рабочий процессs разделяют глобальные переменные главного процесса по ссылке, поэтому повторная загрузка модулей не нужна.
Вопрос 7 из 30
Какую проверку стоит добавить для участка с `future = remotecall(w, 1:10) do xs`?
Julia Julia · Удалённые вызовы Копировать
using Distributed
addprocs(2)
w = first(workers())
future = remotecall(w, 1:10) do xs
sum(xs)
end
@show isready(future) fetch(future)
Проверить на отдельном примере, что `@spawnat` сразу возвращает удалённое значение, а `remotecall_fetch` нужен только для потоковой передачи больших массивов.
Проверить на отдельном примере, что удалённый код имеет права процесса и видит переданные данные; кластер не является границей безопасности для недоверенного выражения.
Проверить на отдельном примере, что аргументы и результаты обычно сериализуются и передаются между процессами; крупные данные лучше размещать осознанно, а не посылать заново для каждой мелкой операции.
Проверить на отдельном примере, что рабочий процесс — отдельный процесс со своим глобальным состоянием и окружением; определение функции на главном процессе не всегда автоматически доступно удалённо.
Проверить на отдельном примере, что `remotecall_fetch` возвращает результат удалённого вызова, а `@spawnat` создаёт future; выбор определяет, где и когда ждать и как обрабатывать ошибку.
Вопрос 9 из 30
Две реализации участка с `future = remotecall(w, 1:10) do xs` совпадают на обычных данных. Что необходимо проверить перед выпуском?
y=\operatorname{fetch}(\operatorname{remotecall}(f,w,x))
Приёмка должна подтвердить, что рабочий процесс — отдельный процесс со своим глобальным состоянием и окружением; определение функции на главном процессе не всегда автоматически доступно удалённо.
Приёмка должна подтвердить, что удалённый код имеет права процесса и видит переданные данные; кластер не является границей безопасности для недоверенного выражения.
Приёмка должна подтвердить, что `@spawnat` сразу возвращает удалённое значение, а `remotecall_fetch` нужен только для потоковой передачи больших массивов.
Приёмка должна подтвердить, что аргументы и результаты обычно сериализуются и передаются между процессами; крупные данные лучше размещать осознанно, а не посылать заново для каждой мелкой операции.
Приёмка должна подтвердить, что `remotecall_fetch` возвращает результат удалённого вызова, а `@spawnat` создаёт future; выбор определяет, где и когда ждать и как обрабатывать ошибку.
Вопрос 12 из 30
Какой контрольный тест лучше всего проверит правило, связанное с `A = SharedArray{Float64}(10_000)`?
Julia Julia · Передача данных Копировать
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)
Проверить на отдельном примере, что контроль производительности разделяет вычисление, сериализацию, сеть и простой; больше процессов может замедлить задачу при маленьких блоках или общей файловой системе.
Проверить на отдельном примере, что аргументы и результаты обычно сериализуются и передаются между процессами; крупные данные лучше размещать осознанно, а не посылать заново для каждой мелкой операции.
Проверить на отдельном примере, что сериализация аргумента сохраняет общую изменяемую память между процессами, поэтому изменения рабочий процесс видны главному процессу.
Проверить на отдельном примере, что рабочий процесс — отдельный процесс со своим глобальным состоянием и окружением; определение функции на главном процессе не всегда автоматически доступно удалённо.
Проверить на отдельном примере, что отказ рабочий процесс требует повторного назначения независимой работы или завершения всего расчёта с понятной ошибкой; потерянное изменяемое состояние нельзя восстановить предположением.
Вопрос 16 из 30
Какое утверждение точнее всего объясняет участок с `push!(results, @spawnat w f(chunk))`?
w_i\downarrow\Rightarrow retry\lor fail
Julia Julia · Отказ процесса Копировать
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))` от случайного результата одного запуска?
Julia Julia · Отказ процесса Копировать
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))`?
Julia Julia · Отказ процесса Копировать
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])
Сохранить в реализации правило: После отказа рабочий процесс обычно хватает повторить удалённый вызов с теми же аргументами; частичные побочные эффекты и идемпотентность операции учитывать не требуется.
Сохранить в реализации правило: Контроль производительности разделяет вычисление, сериализацию, сеть и простой; больше процессов может замедлить задачу при маленьких блоках или общей файловой системе.
Сохранить в реализации правило: Отказ рабочий процесс требует повторного назначения независимой работы или завершения всего расчёта с понятной ошибкой; потерянное изменяемое состояние нельзя восстановить предположением.
Сохранить в реализации правило: Рабочий процесс — отдельный процесс со своим глобальным состоянием и окружением; определение функции на главном процессе не всегда автоматически доступно удалённо.
Сохранить в реализации правило: Аргументы и результаты обычно сериализуются и передаются между процессами; крупные данные лучше размещать осознанно, а не посылать заново для каждой мелкой операции.
Вопрос 26 из 30
Какой механизм Julia определяет поведение строки `remote_trial = @belapsed begin`?
S_p=T_1/T_p
Julia Julia · Контроль производительности Копировать
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`?
Julia Julia · Контроль производительности Копировать
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` важнее удобной детали текущей реализации?
Julia Julia · Контроль производительности Копировать
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
Сохранить в реализации правило: Аргументы и результаты обычно сериализуются и передаются между процессами; крупные данные лучше размещать осознанно, а не посылать заново для каждой мелкой операции.
Сохранить в реализации правило: Рабочий процесс — отдельный процесс со своим глобальным состоянием и окружением; определение функции на главном процессе не всегда автоматически доступно удалённо.
Сохранить в реализации правило: Разделение работы между процессами сокращает время задачи, пока число процессов не превышает число доступных ядер.
Сохранить в реализации правило: Контроль производительности разделяет вычисление, сериализацию, сеть и простой; больше процессов может замедлить задачу при маленьких блоках или общей файловой системе.
Сохранить в реализации правило: Отказ рабочий процесс требует повторного назначения независимой работы или завершения всего расчёта с понятной ошибкой; потерянное изменяемое состояние нельзя восстановить предположением.