MPI、ソケット、および TCP/IP に関して混乱がありました。これら 3 つの通信プロトコルはすべて、Infiniband、イーサネットなどのさまざまな相互接続を利用できるものですか、それとも別のものですか? 素朴な質問で申し訳ありませんが、これらの 3 つの用語で本当に混乱してしまいます。
2 に答える
TCP/IP は、ネットワーク プロトコルのファミリです。IP は、インターネット上でデータのパケットをある場所から別の場所に取得する役割を担う下位レベルのプロトコルです。TCP は IP の上に位置し、仮想回線/接続セマンティクスを追加します。IP だけでは、ストリームまたは接続に編成されていないデータの独立したパケットのみを送受信できます。ほぼすべての物理トランスポート メカニズムを使用して、IP パケットを移動できます。ローカル ネットワークの場合、通常はイーサネットですが、何でも使用できます。伝書鳩によって IP パケットを送信する方法を指定する RFC さえあります。
ソケットは、オペレーティング システムのネットワーク機能にアクセスするための準標準 API です。プログラムは、socket、bind、listen、connect などのさまざまな関数を呼び出して、データの送受信、他のコンピューターへの接続、および他のコンピューターからの接続のリッスンを行うことができます。理論的には、ソケット API を介してネットワーク プロトコルの任意のファミリを使用できます (プロトコル ファミリは、渡すパラメータです)。しかし、最近では、ほぼ常に TCP/IP を指定します。(一般的に使用される他のオプションは、ローカル Unix ソケットです。)
MPI は、サーバーのクラスターで実行されているプロセス間でメッセージを渡すための API です。MPI は、TCP/IP とソケットの両方よりも高いレベルです。理論的には、ネットワーク プロトコルの任意のファミリを使用できます。ソケット API でサポートされている TCP/IP またはその他のファミリを使用している場合は、おそらくソケット API を使用してオペレーティング システムと通信します。