平成26年春期午後問3
曖昧さん
(No.1)
https://www.fe-siken.com/kakomon/26_haru/pm03.html
設問2のb、cについて質問です。
bの答えが「ア:更新した値が次の繰返しで参照されるので」とありますが、解説では「[スレッド1]のa[3] の更新処理よりも先に、[スレッド2]で a[3] の参照がされる可能性があるので処理の結果が同じになる保証がありません。」となっています。解説の通りなら 参照→更新 の順なので「ウ:参照した値が次の繰返しで更新されるので」が答えとして適切だと思うのですが、そうではないのは何故ですか?
cについても同様の理由で「ア:更新した値が次の繰返しで参照されるので」の方が適切ではないですか?
設問2のb、cについて質問です。
bの答えが「ア:更新した値が次の繰返しで参照されるので」とありますが、解説では「[スレッド1]のa[3] の更新処理よりも先に、[スレッド2]で a[3] の参照がされる可能性があるので処理の結果が同じになる保証がありません。」となっています。解説の通りなら 参照→更新 の順なので「ウ:参照した値が次の繰返しで更新されるので」が答えとして適切だと思うのですが、そうではないのは何故ですか?
cについても同様の理由で「ア:更新した値が次の繰返しで参照されるので」の方が適切ではないですか?
2022.09.16 14:19
jjon-comさん
★FE ゴールドマイスター
(No.2)
【元々の姿のスレッド分割しない】プログラム1は,
ループの中で[(ある繰返しで)更新した値が次の繰返しで参照される(という処理の流れな)ので],並列実行できない。
というのが問題文の意味です。
【スレッド分割したと仮定した場合の】プログラム1は,
ループの中で【あるスレッドが先に参照した値が,別のスレッドにより後から更新される可能性が生じる】ので,並列実行できない。
という文ではありません。
ループの中で[(ある繰返しで)更新した値が次の繰返しで参照される(という処理の流れな)ので],並列実行できない。
というのが問題文の意味です。
【スレッド分割したと仮定した場合の】プログラム1は,
ループの中で【あるスレッドが先に参照した値が,別のスレッドにより後から更新される可能性が生じる】ので,並列実行できない。
という文ではありません。
2022.09.16 17:04
曖昧さん
(No.3)
jjon-comさんの解説は理解できました。この問題では「分割前のプログラムにおける更新と参照の順番の問題点」を解答すべきということですね。
ただ、空欄b、cの直前の問題文に「図4に示すプログラム1~3を,iのループに関して複数のループに分割し,分割したそれぞれのループの処理を並列に実行する場合の並列実行可能性について考える。」と記述されているので、やはり分割後のプログラムで考えるのが自然な気がします。
ただ、空欄b、cの直前の問題文に「図4に示すプログラム1~3を,iのループに関して複数のループに分割し,分割したそれぞれのループの処理を並列に実行する場合の並列実行可能性について考える。」と記述されているので、やはり分割後のプログラムで考えるのが自然な気がします。
2022.09.17 11:15
jjon-comさん
★FE ゴールドマイスター
(No.4)
分割後のプログラムで考えても,設問2の問題文には合わないです。
--------
プログラム1において
「ア 更新した値が次の繰返しで参照されるので」の具体例は次が挙げられます。
・a[10]←a[9] +b[10] …まず先にa[10]が更新されて
・a[11]←a[10]+b[11] …その後でa[10]が参照される
プログラム1において
「ウ 参照した値が次の???で更新されるので」という状況が起こるのは次の例ですが,
・a[11]←a[10]+b[11] …まず先にa[10]が参照されて ※a
-----
・a[10]←a[9] +b[10] …その後でa[10]が更新される ※b
プログラム1は昇順の繰返し処理 i=2,3,4, ... ,n ですから,
※a からみて ※b は「次の繰返し」ではないです。
※a と ※b のスレッドが異なる場合にのみ,この状況が発生する可能性が生じます。
--------
強調箇所を★で示して,再度,回答No.2を掲載してみます。
【元々の姿のスレッド分割しない】プログラム1は,
ループの中で[(ある繰返しで)更新した値が ★次の繰返しで★ 参照される(という処理の流れな)ので],並列実行できない。
【スレッド分割したと仮定した場合の】プログラム1は,
ループの中で【あるスレッドが先に参照した値が,★別のスレッドにより★ 後から更新される可能性が生じる】ので,並列実行できない。
選択肢ウが「参照した値が ★別スレッドで★ 更新されるので」
であるなら適切ですが,★次の繰返しで★ であるなら不適切です。
--------
プログラム1において
「ア 更新した値が次の繰返しで参照されるので」の具体例は次が挙げられます。
・a[10]←a[9] +b[10] …まず先にa[10]が更新されて
・a[11]←a[10]+b[11] …その後でa[10]が参照される
プログラム1において
「ウ 参照した値が次の???で更新されるので」という状況が起こるのは次の例ですが,
・a[11]←a[10]+b[11] …まず先にa[10]が参照されて ※a
-----
・a[10]←a[9] +b[10] …その後でa[10]が更新される ※b
プログラム1は昇順の繰返し処理 i=2,3,4, ... ,n ですから,
※a からみて ※b は「次の繰返し」ではないです。
※a と ※b のスレッドが異なる場合にのみ,この状況が発生する可能性が生じます。
--------
強調箇所を★で示して,再度,回答No.2を掲載してみます。
【元々の姿のスレッド分割しない】プログラム1は,
ループの中で[(ある繰返しで)更新した値が ★次の繰返しで★ 参照される(という処理の流れな)ので],並列実行できない。
【スレッド分割したと仮定した場合の】プログラム1は,
ループの中で【あるスレッドが先に参照した値が,★別のスレッドにより★ 後から更新される可能性が生じる】ので,並列実行できない。
選択肢ウが「参照した値が ★別スレッドで★ 更新されるので」
であるなら適切ですが,★次の繰返しで★ であるなら不適切です。
2022.09.17 23:10
jjon-comさん
★FE ゴールドマイスター
(No.5)
この問題を解くのは初めてではないのですが,私は質問者から寄せられたような疑問を持っていませんでした。
質問者の疑問を目にして,改めてこの問題を検討してみて,これまで深く考える機会がなかった解答に至るまでのプロセスを言葉にしてみました。
感心するのは,情報処理技術者試験・午後問題の日本語表現です。
何人もの問題作成者と検証者がいて,何回ものチェックをクリアしないと本番の試験問題として選ばれない,という話は聞いたことがあるのですが,基本情報にしろ,応用情報の記述解答にしろ,正答と認められる範囲を問題文の日本語表現によってうまく限定している例に何度か出会ったことがあります。
質問者の疑問を目にして,改めてこの問題を検討してみて,これまで深く考える機会がなかった解答に至るまでのプロセスを言葉にしてみました。
感心するのは,情報処理技術者試験・午後問題の日本語表現です。
何人もの問題作成者と検証者がいて,何回ものチェックをクリアしないと本番の試験問題として選ばれない,という話は聞いたことがあるのですが,基本情報にしろ,応用情報の記述解答にしろ,正答と認められる範囲を問題文の日本語表現によってうまく限定している例に何度か出会ったことがあります。
2022.09.18 00:25
曖昧さん
(No.6)
問題文だけでなく解答の選択肢からも意味を類推する必要があるんですね。
本番で実践できるかはわかりませんが、選択肢にも気を配るのが大切だと事前に知れて良かったです。
二度にわたって細かな解説をしていただきありがとうございました。
本番で実践できるかはわかりませんが、選択肢にも気を配るのが大切だと事前に知れて良かったです。
二度にわたって細かな解説をしていただきありがとうございました。
2022.09.18 10:35
広告
返信投稿用フォーム
スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。
広告