C++パラレルプログラミング1
1205 ワード
what is concurrency
私たちはテレビを見ながら歌を歌うことができます.人が並行しているのは分かりやすいですが、コンピュータは?ワードドキュメントを編集しながら歌を聴いていると、コンピュータが並列しているのではないでしょうか.必ずしもヨーロッパではありません.もしあなたのコンピュータが単核であれば、並列ではなく、あなたのタスクをあなたが感じていないタスクに分けて、並列に実行しているように見えますが、実はシリアルで実行しています.デュアルコアであれば、必ずしもそうではありません.1つの核で2つの任務を同時に実行する可能性もあります.並列欧州でも、異なる核で異なる任務を実行する可能性もあります.
パラレル実行には2つの実装方法があります.マルチプロセス:起動が複雑で遅いため、オペレーティングシステムはプロセスを管理するために追加のリソースが必要ですが、スレッドよりも安全なコードを書きやすいです.
マルチスレッド:スレッド間の通信が容易で、起動と通信もプロセスのオーバーヘッドより小さい.
why use concurrency分割タスク 性能を合理的に利用する 通常、3つの方法があります.
task parallelism
1つのタスクを異なる部分に分割して並列に実行する
data parallelism
データを異なる部分に分割し,スレッドは異なるデータ上で同じ操作を実行する.
embarrassingly parallel
アルゴリズムがパラレル実行アルゴリズムに変わります
why not use concurrencyタスクの実行は容易に完了しますが、スレッドの起動には のオーバーヘッドが必要です.起動スレッドが多すぎて、メモリとアドレス空間(特に32ビットマシン)を消費しやすく、システムリソースを消費しやすくなります.例えば、リンクごとにスレッドを作成したり、切り替えオーバーヘッドを発生したりします.
hello world
C++11環境でコンパイルする必要があります.
私たちはテレビを見ながら歌を歌うことができます.人が並行しているのは分かりやすいですが、コンピュータは?ワードドキュメントを編集しながら歌を聴いていると、コンピュータが並列しているのではないでしょうか.必ずしもヨーロッパではありません.もしあなたのコンピュータが単核であれば、並列ではなく、あなたのタスクをあなたが感じていないタスクに分けて、並列に実行しているように見えますが、実はシリアルで実行しています.デュアルコアであれば、必ずしもそうではありません.1つの核で2つの任務を同時に実行する可能性もあります.並列欧州でも、異なる核で異なる任務を実行する可能性もあります.
パラレル実行には2つの実装方法があります.マルチプロセス:起動が複雑で遅いため、オペレーティングシステムはプロセスを管理するために追加のリソースが必要ですが、スレッドよりも安全なコードを書きやすいです.
マルチスレッド:スレッド間の通信が容易で、起動と通信もプロセスのオーバーヘッドより小さい.
why use concurrency
task parallelism
1つのタスクを異なる部分に分割して並列に実行する
data parallelism
データを異なる部分に分割し,スレッドは異なるデータ上で同じ操作を実行する.
embarrassingly parallel
アルゴリズムがパラレル実行アルゴリズムに変わります
why not use concurrency
hello world
C++11環境でコンパイルする必要があります.
#include <iostream>
#include <thread>
void hello()
{
std::cout<<"hello world"<<std::endl;
}
int main()
{
std::thread t(hello);
t.join();
return 0;
}