• OSI7層の各層の1)名称 2)機能の簡単な説明 3)各階層に関連のあ る機器、規格などを5つ以上書いて下さい。 • 導線、光ファイバ、無線上を bit 信号はどのように伝搬するか説明し て下さい。 • CSMA/CD と CSMA/CA の機能、相違点を説明して下さい。 • イーサネット、IP、TCP/IP で使用される識別子を示し、送信者は相手 の識別子をどのようにして得ることができるか説明して下さい。 • TCP と UDP プログラムで、イーサネットフレームよりも大きなパケット を扱う時に注意すべき点を記して下さい。 • 現在使用されているスーパーコンピュータが全て 分散メモリ型となっている理由を説明して下さい。 • 秘密鍵と公開鍵を用いて、通信内容が途中で不 正に書き換えられていないことを保証する手順を 説明して下さい。 • 分散メモリ型並列計算機で用いられるインターコ ネクトトポロジを 2つ以上あげて、それぞれの特 徴を説明して下さい。 • MPI(Message Passing Interface)の集団通信につ いて説明するとともに、集団通信の利用にあたっ て注意すべき点を記して下さい。 • 例を参考にして、MPI関数を使ってプロセス 0が持 つデータを、 他の全プロセスにコピーする集団通 信の関数 my_bcastを作成して下さい。 プロセスの整数ベクトルの総和を計算する my_reduce関数の例) int my_reduce(int *a, int *b, int c) { int i, p, myid, procs; int *t; MPI_Status st; MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &procs); if (myid == 0){ t = (int *)malloc(c*sizeof(int)); if (t == NULL) return -1; MPI_Recv(t, c, MPI_INT, 1, 0, MPI_COMM_WORLD, &st); for (i = 0; i < N; i++) b[i] = a[i] + t[i]; for (p = 2; p < procs; p++){ MPI_Recv(t, c, MPI_INT, p, 0, MPI_COMM_WORLD, &st); for (i = 0; i < N; i++) b[i] += t[i]; } } else{ MPI_Send(a, c, MPI_INT, 0, 0, MPI_COMM_WORLD); } return 0; • my_bcast関数の定義は以下の通りとします。 • int my_bcast(char *buf, int size); • ただし、bufは、プロセス0ではコピー元のデータを格納 している場所へのポインタ、れ以外のプロセスではコ ピーするデータを格納する場所へのポインタとし、size は転送するバイト数とします。また、返り値は、成功し た場合 0、失敗した場合 -1とします。 なお、アルゴリズ ムが正しければ、細かい文法的な間違いは減点の対 象としません。 } 各 MPI関数の定義: int MPI_Comm_rank(MPI_Comm comm, int *rank); comm: コミュニケータ rank: 呼び出したプロセスのランクを格納する変数へのポインタ int MPI_Comm_size(MPI_Comm comm, int *size); comm: コミュニケータ size: コミュニケータ中のプロセス数を格納する変数へのポインタ int MPI_Send(void *b, int c, MPI_Datatype d, int dest, int t, MPI_Comm comm); b: 送信データの開始アドレス c: 送信データの要素数 d: 送信データのデータ型 (MPI_INT: 整数、MPI_CHAR: 文字列) dest: 送信先プロセスのランク t: タグ comm: コミュニケータ int MPI_Recv(void *b, int c, MPI_Datatype d, int src, int t, MPI_Comm comm, MPI_Status *st); b: 受信データを格納する場所の開始アドレス c: 受信データの要素数 d: 受信データのデータ型 (MPI_INT: 整数、MPI_CHAR: 文字列) dest: 受信元プロセスのランク t: タグ comm: コミュニケータ st: 受信したメッセージの情報を格納する配列
© Copyright 2024 ExpyDoc