おそらくスレッドまたはスレッドプールを使用する実装ではなく、明示的なスレッドオブジェクトなしで同時実行性をどのように表現できるかについて疑問に思っていますが、言語設計に関連する問題です。
Q1: スレッド オブジェクトがなければ何が失われるのだろうか、そのような言語では何ができなかったのでしょうか?
Q2: また、これをどのように表現するのか、スレッドの代替または補完としてどのような方法が提案または実装されたのだろうか?
おそらくスレッドまたはスレッドプールを使用する実装ではなく、明示的なスレッドオブジェクトなしで同時実行性をどのように表現できるかについて疑問に思っていますが、言語設計に関連する問題です。
Q1: スレッド オブジェクトがなければ何が失われるのだろうか、そのような言語では何ができなかったのでしょうか?
Q2: また、これをどのように表現するのか、スレッドの代替または補完としてどのような方法が提案または実装されたのだろうか?
1つの可能性はMPI-programm-model(GPUも)です
次のコードがあるとしましょう
for(int i=0; i < 100; i++) {
work(i);
}
「通常の」スレッドベースの方法は、反復範囲を複数のサブセットに分離することです。だから、このようなもの
スレッド-1:
for(int i=0; i < 50; i++) {
work(i);
}
スレッド-2:
for(int i=50; i < 100; i++) {
work(i);
}
ただし、MPI/GPU では別のことを行います。アイデアは、すべてのコアが同じ(GPU)または少なくとも同様の(MPI)プログラムを実行することです。違いは、各コアが異なる ID を使用するため、コードの動作が変わることです。
mpi-style: (厳密には MPI 構文ではありません)
int rank = get_core_id();
int size = get_num_core();
int subset = 100 / size;
for (int i = rank * subset;i < (rand+1)*subset; i+) {
//each core will use a different range for i
work(i);
}
次に重要なのはコミュニケーションです。通常、すべての同期化を手動で使用する必要があります。MPI はメッセージベースです。つまり、従来の共有メモリ モデル (すべてのコアが同じメモリにアクセスできる) には完全には適していませんが、クラスター システム (ネットワークと組み合わされた多くのコア) では優れた機能を発揮します。これはスーパーコンピューター (基本的に mpi スタイルのもののみを使用) に限ったことではありませんが、近年、新しいタイプのコア アーキテクチャ (メニーコア) が開発されました。ネットワーク オン チップと呼ばれるローカルを備えているため、各コアは同期に問題なくメッセージを送受信できます。
MPI には単純なメッセージだけでなく、すべてのコアにデータを自動的に分散して収集するためのより高度な構造が含まれています。例: (これも MPI 構文ではありません)
int rank = get_core_id();
int size = get_num_core();
int data[100];
int result;
int results[size];
if (rank == 0) { //master-core only
fill_with_stuff(data);
}
scatter(0, data); //core-0 will send the data-content to all other cores
result = work(rank, data); // every core works on the same data
gather(0,result,results); //get all local results and store them in
//the results-array of core-0
他の解決策は、ここで並列ブロックを宣言するopenMPライブラリです。スレッド部分全体はライブラリ自体によって行われます
例:
//this will split the for-loop automatically in 4 threads
#pragma omp parallel for num_threads(4)
for(int i=0; i < 100; i++) {
work(i);
}
大きな利点は、書き込みが速いことです。自分でスレッドを作成するとパフォーマンスが向上する可能性がありますが、同期に関する知識と時間がさらに必要になります。