タグ

parallelとC++に関するrydotのブックマーク (7)

  • スレッドプールの実装方法について

    スレッドプール(thread pool)を実装するには、暇なときはthreadを寝かせておいて必要なときに起こす、というイベント通知の仕組みが必要になる。 UnixでC/C++で実装するときはpthreadの条件変数を使うのが普通だと思われるが、適当なファイルディスクリプタをopenしておいてread等でブロックさせる方法でも実装できそう。 どのようなやり方が一般的なのか、いくつか有名どころのOSSの実装を調べてみた。 libuvの場合 https://github.com/joyent/libuv 単純にpthread_cond_waitをつかっている 1 static void worker(void* arg) { struct uv__work* w; QUEUE* q; (void) arg; for (;;) { uv_mutex_lock(&mutex); while (QU

  • 新しい並列for構文のご提案

    2014年6月に開催されたSSII2014(http://www.ssii.jp/)のチュートリアル講演用資料です. 使用したコード等はこちら. https://github.com/norishigefukushima/SSII2014 アブストラクト 「CPUのクロック数が年月とともに増加する時代は終わり、プログラムの高速化をCPUの性能向上に任せることのできるフリーランチの時代は終わりを迎えています。しかしムーアの法則はいまだに続いており、CPUはマルチコア化、SIMD化という形で高性能化が続いています。チュートリアルでは、計算コストの高い画像処理を高速化するために、CPUの能力をあますことなく引き出す、マルチコアプログラミング、SIMDプログラミングを解説します。」

    新しい並列for構文のご提案
  • OpenMPとC++例外の危険な関係 - yohhoyの日記

    OpenMP並列化領域内からC++例外を送出する場合、例外を送出したスレッドと同一スレッド上で例外catchを行う必要がある。すなわちOpenMPスレッドをまたぐC++例外伝搬は行われず、またOpenMP並列化領域の中から外へC++例外が送出されてはならない。このルールに反する場合、実行時クラッシュなどを引き起こす可能性がある。 #pragma omp parallel for for (int i = 0; i < 100; i++) { //... throw i; // NG: parallel領域を超えてC++例外が送出される } #include <memory> #include <new> #pragma omp parallel thread_num(2) { try { //... auto = std::make_shared<T>(/*...*/); // ::new

    OpenMPとC++例外の危険な関係 - yohhoyの日記
  • OpenMPでのbreak - 本当は怖いHPC

    2ch「OpenMPプログラミング」スレ304より引用。 OpenMPループ内でのbreakは許可されていないが、自分でループ範囲を決めてフラグを立てることで同じことが可能。 // from http://hibari.2ch.net/test/read.cgi/tech/1102483474/304 #include <stdio.h> #include <omp.h> #define FIN 100 #define TARGET 70 int main(){ int i, found=0, cnt=0; #pragma omp parallel reduction(+:cnt) { int t, n, is, ie; t = omp_get_num_threads(); n = (FIN + t - 1) / t; is = n * omp_get_thread_num(); ie =

    OpenMPでのbreak - 本当は怖いHPC
  • How to: Convert an OpenMP Loop that Uses Cancellation to Use the Concurrency Runtime

    Some parallel loops do not require that all iterations be executed. For example, an algorithm that searches for a value can terminate after the value is found. OpenMP does not provide a mechanism to break out of a parallel loop. However, you can use a Boolean value, or flag, to enable an iteration of the loop to indicate that the solution has been found. The Concurrency Runtime provides functional

    How to: Convert an OpenMP Loop that Uses Cancellation to Use the Concurrency Runtime
  • インテル® コンパイラーOpenMP* 入門.pdf

    ® OpenMP* / 1 ® OpenMP* 1 1 1 ......................................................................... 2 2 ........................ 3 3 ....................................................... 5 4 ............................... 7 5 ............................ 9 5.1 ........................................................................ 9 5.2 OpenMP* API ............................ 13 6 .......

  • OpenMPの使い方:tech.ckme.co.jp

    OpenMPは複数のCPU(複数コアを含む)を持った計算機上での並列化に威力を発揮する。 OpenMPを使う最大の利点は、OpenMPに対応したコンパイラであれば、非常に簡単に並列化できる点である。 現在、gcc、Visual C++、およびIntelコンパイラなど主要なコンパイラはOpenMPに対応している。 習得も他の並列化技法に比べて比較的容易である。 なお、速度を最優先にする場合、単一コンピュータ上で動かした場合でも、メモリのローカリティのためかOpenMPよりMPIの方が効率のよいことが多い。MPIに関してはこちらを参照。 なお、インテルがOpenMP初心者向けに非常にわかりやすい文書を公開している。 OpenMPプログラムのコンパイル OpenMPの各種関数を使わない場合、#pragma ompで始まる指示をソースコード内に書き込み、下記のコンパイルスイッチをつけてコンパイルす

  • 1