タグ

parallelに関するrydotのブックマーク (17)

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

    スレッドプール(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構文のご提案
  • STMの設計と進化

    Please select the category that most closely reflects your concern about the presentation, so that we can review it and determine whether it violates our Terms of Use or isn't appropriate for all viewers.

  • 直列加算と並列加算でdoubleの足し算の結果が変わる話 - きしだのHatena

    Javaに限った話ではないのだけど、Javaで並列加算が気軽にできるようになったので、気に留めておいたほうがいい話。 まず、次のようなコードを動かしてみます。 public static void main(String[] args){ double[] data = { 1.234E80, -1.234E80, 2, 3}; System.out.println(Arrays.stream(data).sum()); System.out.println(Arrays.stream(data).parallel().sum()); } 1.234×10^80と-1.234×10^80という、桁が大きくて符号の違う数を並べて、そのあとに2と3という1桁の数値を置いています。 これらを加算すると、1.234×10^80と-1.234×10^80は符号が違うだけなので、当然結果は0になります

    直列加算と並列加算でdoubleの足し算の結果が変わる話 - きしだのHatena
  • 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
  • 並列と並行の違い - 氷雪の備忘録

    並列(Parallel)と並行(Concurrent)はあまり区別されなかったり、混同されていたりしますが別のことを指す言葉です。 よく見られるわかりやすい区別の仕方は、マルチスレッドのプログラムを一つのCPU上で実行している状態は並行で、複数のCPUで実行している状態は並列だというものです。一般的に言うと並行は「複数の実行の流れが一つの基準による順序性を持って(同期的に)実行されている状態」のことで、並列は「複数の実行の流れが基準を持たずに(非同期的に)実行されている状態」のことです。 「並列処理は実行順が不定なのが有害なので、プログラマーが同期プリミティブを用いて決定論的に動作するようにプログラミングすべきだ」という人がいたりしますが、非同期的な動作は並列処理の質なので、それを否定しつつ並列処理から何らかの恩恵を得たいというのは無理な話です。並列処理を行う場合は並列区間が非同期に実行

    並列と並行の違い - 氷雪の備忘録
  • インテル® コンパイラー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で始まる指示をソースコード内に書き込み、下記のコンパイルスイッチをつけてコンパイルす

  • Haskellの並列プログラミングを学ぶ読み物リスト - このブログは証明できない。

    今、子どもたちを寝かしつけてきました。子守唄にレミオロメンの「粉雪」を歌っていたのですが、サビの「こなぁーゆきぃー!」で子どもたちが泣き出してしまいました。粉雪舞う季節はいつもすれ違いですね。 さて、今日もブログ記事の紹介です。自分でプログラミングする時間がとれないのです。。でも、気(マジ)でHaskellやる人には役立つかも。 Parallel Programming in Haskell: A Reading List | Control.Monad.Writer "How to learn about parallel programming in Haskell"ということで、Haskellの並列プログラミングを学ぶ方法。そのための読み物リストです。それぞれの読み物の説明は省略します。上のリンク先記事を見てください。 Real World Haskell A Tutorial o

    Haskellの並列プログラミングを学ぶ読み物リスト - このブログは証明できない。
  • IBMの新メインフレーム、商用初のトランザクショナルメモリ搭載でJavaを超高速実行。JavaOne 2012

    IBMのメインフレームにはJavaを高速に実行する仕組みが組み込まれている。JavaOne基調講演に続いて行われたIBMの講演では、そんな興味深い技術が紹介されました。 このメインフレームは8月末に発表されたばかりの新型で、1筐体で最大10万もの仮想サーバを実行可能という怪物のような性能のマシン。これひとつでその辺のデータセンター並の性能を持つといっても過言ではなさそうです。 しかも、商用マシンとしては初のハードウェアによるトランザクションメモリを搭載。ランタイム・インストゥルメンテーションなど多くの機能によってJava実行の高速化を実現したとのこと。業務用アプリケーションを実行するメインフレームにとって、Java性能が重要であることを示しているようです。 IBMの講演の一部を紹介しましょう。 4年前から取り組む IBM Distinguished Engineer、Java CTOのJo

    IBMの新メインフレーム、商用初のトランザクショナルメモリ搭載でJavaを超高速実行。JavaOne 2012
  • langref.org - fsharp, clojure, scala, and haskell - Parallel

  • A Very Brief Introduction to the Pi-Calculus (in Japanese)

    π-calculus 超入門 π-calculus は、80 年代の終わりごろに Milner らによって提案された並行計算のモデルの一つです。そこでは、プロセスと呼ばれる複数の独立した主体が、通信チャネルと呼ばれるデータの通り道を介して値をやりとりしながら、計算を行っていきます。π-calculus にはいろいろな変種があるのですが、ここではとりあえず次のような構成要素からなるものを考えましょう。 new x . P 新しいチャネル x を作ってから、プロセス P を実行する (channel creation) x![v1, ..., vn] チャネル x に値 v1, ..., vn を送る (asynchronous output) x?[v1, ..., vn] . P チャネル x から値 v1, ..., vn を受け取って、P を実行する (input guard) P |

  • 7.26. Concurrent HaskellおよびParallel Haskell

    GHCは、並行プログラミングおよび並列プログラミングに対応するための、Haskellへの大規模な拡張をいくつか実装している。まず用語をはっきりさせておこう。 並列性(parallelism)とは、実行性能の向上を目的として、Haskellプログラムを複数のプロセッサ上で走らせることである。理想的には、これは不可視に、意味を変更することなく為されるべきである。 並行性(concurrency)とは、それぞれIOを行う複数のスレッドを使ってプログラムを実装することである。確かに並行Haskellプログラムは並列な機械上で走らせることができるが、並行性を使うのは、第一目的として実行性能を得るためではなく、それが当該プログラムを書くための最も単純で最も直接的な方法だからである。スレッドは入出力を行うので、プログラムの意味は必然的に非決定的なものになる。

  • 方法: Windows Phone Marketplace 用のスクリーンショットを作成する

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

    方法: Windows Phone Marketplace 用のスクリーンショットを作成する
  • OpenCL - The Open Standard for Parallel Programming of Heterogeneous Systems

    Open Standard for Parallel Programming of Heterogeneous Systems OpenCL™ (Open Computing Language) is an open, royalty-free standard for cross-platform, parallel programming of diverse accelerators found in supercomputers, cloud servers, personal computers, mobile devices and embedded platforms. OpenCL greatly improves the speed and responsiveness of a wide spectrum of applications in numerous mark

    OpenCL - The Open Standard for Parallel Programming of Heterogeneous Systems
  • 1