💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. Верный вариант в каждом вопросе один; после завершения доступны общий результат, профиль по 6 темам и объяснения.
Вопрос 2 из 30
В расчёте по теме «Массивы на графическом процессоре» обнаружено содержательное расхождение. Какую замену следует принять после проверки?
MATLAB Фрагмент для рецензии Копировать
Xg = gpu(X); y=collect(sum(sin(Xg).^2));
Заменить исходный блок этой реализацией. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Xg = gpuArray(X); y=sum(sin(gather(Xg)).^2,"all");
Использовать показанный вариант вместо дефектного фрагмента. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Допуск и критерий принятия зафиксировать до просмотра результата. Xg = gather(X); y=sum(sin(Xg).^2,"all");
Переписать вычислительный шаг следующим образом. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Xg = gpuArray(X);
y = sum(sin(Xg).^2,"all");
y = gather(y);
Внести показанную замену без изменения входного контракта. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Xg = gpu(X); y=collect(sum(sin(Xg).^2));
Принять эту редакцию как полную замену текущего блока. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Массивы на графическом процессоре» также сверить класс данных и сохранение ожидаемой структуры выхода. y = gpuArray(sum(sin(X).^2,"all"));
Вопрос 7 из 30
Ниже приведена неудачная реализация из темы «Поддерживаемые операции». Какая редакция возвращает требуемый результат и оставляет независимый контроль?
MATLAB Фрагмент для рецензии Копировать
gpuDevice; customTransform(X);
Заменить исходный блок этой реализацией. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Поддерживаемые операции» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(isa(customTransform(X),"gpuArray"));
Переписать вычислительный шаг следующим образом. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Поддерживаемые операции» также сверить класс данных и сохранение ожидаемой структуры выхода. Yg = arrayfun(@customTransform,gpuArray(X));
Использовать показанный вариант вместо дефектного фрагмента. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Поддерживаемые операции» также сверить класс данных и сохранение ожидаемой структуры выхода. gpuDevice; customTransform(X);
Принять эту редакцию как полную замену текущего блока. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Поддерживаемые операции» также сверить класс данных и сохранение ожидаемой структуры выхода. Yg = customTransform(gpuArray(X));
Внести показанную замену без изменения входного контракта. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Допуск и критерий принятия зафиксировать до просмотра результата. Xg = gpuArray(single(rand(32)));
try
Yg = customTransform(Xg);
wait(gpuDevice);
catch ME
error("GPU path unsupported: %s",ME.message);
end
Вопрос 11 из 30
На рецензию вынесена операция: избежать повторной передачи одной матрицы коэффициентов A на GPU внутри цикла. Какой вариант выполняет его без подмены операции?
Ag=gpuArray(A);
for k=1:K, X(:,k)=gather(Ag) \ B(:,k); end
Ag = gpuArray(A);
Bg = gpuArray(B);
Xg = zeros(size(B),"like",Ag);
for k=1:K
Xg(:,k) = Ag \ Bg(:,k);
end
X = gather(Xg);
for k=1:K
X(:,k)=gather(gpuArray(A) \ gpuArray(B(:,k)));
end
for k=1:K
X(:,k)=A \ gather(gpuArray(B(:,k)));
end
for k=1:K, Xg(:,k)=gpuArray(A\B(:,k)); end
Вопрос 12 из 30
В тесте «Вычисления на GPU» показанный фрагмент нарушает правило из темы «Передача памяти». Какая редакция исправляет причину, а не только её проявление?
MATLAB Фрагмент для рецензии Копировать
for k=1:K, Xg(:,k)=gpuArray(A\B(:,k)); end
Принять эту редакцию как полную замену текущего блока. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Передача памяти» также сверить класс данных и сохранение ожидаемой структуры выхода. for k=1:K, Xg(:,k)=gpuArray(A\B(:,k)); end
Использовать показанный вариант вместо дефектного фрагмента. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Передача памяти» также сверить класс данных и сохранение ожидаемой структуры выхода. for k=1:K
X(:,k)=A \ gather(gpuArray(B(:,k)));
end
Переписать вычислительный шаг следующим образом. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Передача памяти» также сверить класс данных и сохранение ожидаемой структуры выхода. Ag=gpuArray(A);
for k=1:K, X(:,k)=gather(Ag) \ B(:,k); end
Внести показанную замену без изменения входного контракта. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Контрольный пример должен воспроизводиться на чистом запуске проекта. Ag = gpuArray(A);
Bg = gpuArray(B);
Xg = zeros(size(B),"like",Ag);
for k=1:K
Xg(:,k) = Ag \ Bg(:,k);
end
X = gather(Xg);
Заменить исходный блок этой реализацией. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Передача памяти» также сверить класс данных и сохранение ожидаемой структуры выхода. for k=1:K
X(:,k)=gather(gpuArray(A) \ gpuArray(B(:,k)));
end
Вопрос 22 из 30
Показанный код из темы «Совместимость и переносимость» не соответствует постановке. Какая редакция восстанавливает вычислительный договор?
MATLAB Фрагмент для рецензии Копировать
if isa(input,"gpuArray"), Z=gpuArray.zeros(size(input)); else, Z=zeros(size(input)); end
Использовать показанный вариант вместо дефектного фрагмента. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Z=zeros(size(input)); Z=coreAlgorithm(input,Z);
Переписать вычислительный шаг следующим образом. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. input=gather(input); Z=coreAlgorithm(input,zeros(size(input)));
Принять эту редакцию как полную замену текущего блока. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Допуск и критерий принятия зафиксировать до просмотра результата. input=gpuArray(input); Z=coreAlgorithm(input,gpuArray.zeros(size(input)));
Заменить исходный блок этой реализацией. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Контрольный пример должен воспроизводиться на чистом запуске проекта. prototype = input;
Z = zeros(size(input),"like",prototype);
Z = coreAlgorithm(input,Z);
Внести показанную замену без изменения входного контракта. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. if isa(input,"gpuArray"), Z=gpuArray.zeros(size(input)); else, Z=zeros(size(input)); end
Вопрос 27 из 30
Рецензент разбирает фрагмент по теме «Стратегия тестирования» в тесте «Вычисления на GPU». Какой вариант исправляет саму операцию?
MATLAB Фрагмент для рецензии Копировать
assert(norm(Ycpu)==norm(Ygpu));
Внести показанную замену без изменения входного контракта. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Ycpu = core(single(X));
Ygpu = gather(core(gpuArray(single(X))));
rel = norm(double(Ycpu-Ygpu),"fro")/max(1,norm(double(Ycpu),"fro"));
assert(rel < 1e-5);
Использовать показанный вариант вместо дефектного фрагмента. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Стратегия тестирования» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(isequal(Ycpu,Ygpu));
Принять эту редакцию как полную замену текущего блока. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Стратегия тестирования» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(norm(Ycpu)==norm(Ygpu));
Переписать вычислительный шаг следующим образом. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Стратегия тестирования» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(max(Ycpu-Ygpu)<eps);
Заменить исходный блок этой реализацией. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Стратегия тестирования» также сверить класс данных и сохранение ожидаемой структуры выхода. assert(all(size(Ycpu)==size(Ygpu)));