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環境でコンパイルする必要があります.
    	#include <iostream>
      	#include <thread>
    
      	void hello()
      	{
      	     std::cout<<"hello world"<<std::endl;
      	}
     
     	int main()
     	{
     	    std::thread t(hello);
     	    t.join();
     	    return 0;
     	}