マルチスレッド
のバックアップ(No.1)
検索
AND検索
OR検索
↑
メモ
TODO
バックアップ
CV
↑
僕の経験
博士課程
GCL
学会
eduroam
SXSW2017
↑
生活
↑
常識
人生
真人間計画
身だしなみ
移動
リーダーシップ
アサーション
モチベーション
ドレスコード
引っ越し
ネット回線
質
思想
選挙
人権
睡眠
郵便
結婚
妊娠
身分証明
プレゼント
発達障害
宗教
リスク
自転車
運転
家具
ロビー活動
妊娠
メンタル
チアアップ
Metabo Law
うなぎを食べない教
菜食主義
↑
金銭
投資
質
収入
相続
保険
遺書
ネット回線
クレジットカード
金券ショップ
コンシェルジュ
マイル
買い物
チップ
雑用代行サービス
詐欺
イカサマ
アイドル
↑
旅行
ホテル
海外宿泊
留学準備
飛行機
家さがし
↑
健康
健康
家庭の医学
ダイエット
歯磨き
↑
美術
アート
絵
↑
学業
履修
脳
タンパク質
解剖学
材料力学
ドイツ留学
↑
国
ドイツ
イギリス
日本
ベルギー
シンガポール
アメリカ
インド
イラン
↑
言語
中国語
英語
ドイツ語
日本語
韓国語
↑
エンジニアリング
↑
統合システム
ロボット
部品選定
コンテンツ
体験コンテンツ
技術コンテスト
新興技術
ブロックチェーン
↑
ハード
メカ
回路
熱設計
裁縫
レザークラフト
シルバークラフト
ダンボール細工
装飾
↑
ソフト
ソフトウェアエンジニア
プログラミング
ロボットミドルウェア
システムデザイン
デバッグ
スマートフォン
?
テキストエディタ
MySQL
ビッグデータ
機械学習
テスト
アルゴリズム
プロコン
非厳密アルゴリズム
辞書
便利ツール
ウェブ
NAS
↑
管理
UNIX系
パソコン
コマンド
ネットワーク設定
開発環境設定
トラブルシューティング
サーバ管理
Windows
キーボード
ファイル検索コマンド
↑
制御
制御
数学
物理の直感
↑
趣味
↑
嗜好品
料理
レシピ
酒
紅茶
コーヒー
チョコレート
バー
ファッション
男性服
↑
鑑賞
カラオケ
アニメ
ゲーム
娯楽施設
陶器
工芸
ジュエリー
宝石
↑
習得
タイピング
カリグラフィー
↑
情報発信
↑
デザイン
画像編集
Photoshop
Illustrator
動画編集
ボイスチェンジャー
スライド
PowerPoint
Prezi
プレゼン
資料作成
TeX
デザイン
カメラ
色
UI
メイク
商用写真素材
著作権
音楽
↑
情報発信
Tumblr
情報発信
Polycom
↑
文章
文章の書き方
論理
校正
↑
ビジネス
↑
事業
個人
法人
↑
会計
会計
請求書
税金
出張
↑
商談
開業
営業
セールス
?
契約
特許
労働基準法
就活
期待値制御
↑
投資
株
自社株
?
商品先物取引
日本経済
ニュース
物価
企業
?
非自明マネタイズ
就活
遺書
紛失
↑
遂行
外注
アイディア出し
クラウドソーシング
クラウド基盤構築
?
マネジメント
人事
リーダーシップ
ライセンス
共同作業
共同開発
企画
↑
情報・知的財産
情報リテラシー
知的財産
↑
研究
↑
研究基本
研究遂行
研究のモチベーション
研究の疑問
インパクト
↑
研究課題発見
サーベイ
↑
研究方法
解析
結果の設計
Matlab
↑
研究表現
論文
論文の書き方
学位論文
TeX
論文英語
発表
図の描き方
ポスター発表
オーラル発表
大衆向けスピーチ
↑
研究発表参加
質問
↑
研究哲学
哲学
科学史
身体性
↑
研究室運営
研究室所感
研究雑多
最新の70件
2024-11-13
ラストウォー
2024-10-25
料理
レシピ
自転車
2024-10-17
パソコン
2024-10-07
ふるさと納税
2024-10-03
Chrome
2024-09-30
メルカリ
2024-09-26
SQL
2024-09-23
IPA
2024-09-22
Anki
2024-08-28
ダイエット
2024-08-14
魅力的な話し方
2024-08-03
生活
妊娠
2024-07-24
育児
プレゼント
2024-07-01
LLM
CSV
2024-06-25
名刺
2024-06-23
韓国語
2024-06-12
Cookie+Clicker+Mobile
2024-05-25
ぷよぷよ
2024-04-30
英語
IELTS
2024-04-09
RecentDeleted
2024-04-01
株
2024-03-11
泥酔ローグと増魔の洞窟
2024-03-09
数学
2024-03-07
非厳密アルゴリズム
2024-03-02
p5.js
2024-02-26
Generative+AI
2024-02-24
MenuBar
2024-02-21
PostgreSQL
2024-02-14
Google Sheets
2024-02-11
FrontPage
2024-01-29
うなぎを食べない教
2024-01-24
税金
リスク
2024-01-23
投資
2024-01-10
コマンド
2024-01-05
量子コンピュータ
2024-01-04
Python
2023-12-21
アルゴリズム
開発環境設定/Ubuntu
プロコン
移動
マナー
2023-10-16
Electronic+Diversity+Visa+Program
2023-10-13
健康
2023-10-10
写真
2023-09-10
眼科
2023-09-04
美容
2023-08-25
人生
2023-08-21
電験
2023-08-12
ネットワーク
2023-08-11
モニタ
2023-07-24
出産
2023-07-16
白猫
2023-06-27
工事
2023-06-11
ジュエリー
口頭発表
2023-05-26
スマホ
2023-05-18
ヘビ貿易
2023-03-28
電工
2023-03-20
睡眠
2023-03-14
電磁気学
2023-03-04
トラブルシューティング
2023-02-20
真人間のアンチパターン
2023-02-12
学習
edit
バックアップ一覧
差分
を表示
現在との差分
を表示
ソース
を表示
マルチスレッド
へ行く。
1 (2016-02-13 (土) 21:48:48)
2 (2016-02-24 (水) 01:25:25)
3 (2017-01-16 (月) 11:14:39)
C
概要
†
並列プログラミング技法のまとめ
TODO もっと簡潔に、勉強になる問題の抽出をしたい。
↑
参考
†
Patterns for Parallel Programmingなるものに大量のパターンがあるらしい。
https://deadlockempire.github.io/
スレッドセーフでないプログラムをバグらせて遊ぶゲーム
↑
メモ
†
手順
時間のかかっているところを特定
プロファイラで時間計測
独立かチェック
バグ
デバッガを使うと再現しない可能性
計算順序が違うので丸め誤差で計算結果が一致しない可能性
並列コンピューティングのチューニン<本日大安>BIG・totoご購入をご検討下さい
逐次の考え方
キャッシュの非効率な共有
非効率なメモリアクセス
バスのオーバーロード
並列ならではの考え方
同期オブジェクトの競合
スレッドごとの不均等な処理割り当て
スレッドAPIの異常なオーバヘッド
スレッドをそもそも使うまでもない処理量
開発手順
逐次のアルゴリズムを作ってから、並列化に移植すべき
アルゴリズムのバグか並列化のバグかがわからなくなるため
即並列を組むのは慣れてからにしましょう
各メモリに対して以下の4パターンを割り当てる。
並行or排他
参照or更新
スレッドの割り当て
実行前に割り当てるのを静的
実行中に割り当てるのを動的(各スレッドの実行時間が大きく違うorはじめにスレッド数が予想できない場合)
メモリ
分散メモリ・共有メモリという概念がある(TODO)
TLS:スレッド固有なメモリが利用可能(とても重い!)
変数のローカルコピーが必要で他の変数からも参照しないといけない場合
スレッドが同じ関数を別の場所からも呼ぶ必要ある場合
参照>>更新の変数には、リードライトロックを利用するといい
タスク分解とデータ分解
処理順序の独立性=時間的独立性→タスク分解
データのそれぞれに対しての独立性=空間的独立性→データ分解
OpenMPはデータ分解に特化したもの
タスク分解の原則(トレードオフになっていることに注意)
スレッド数<=タスク数にする
スレッドの処理量=
粒度
>オーバヘッド(つまり、なるべく粒度は大きい方がいい。スレッド数増加に対してもスケーラブルになりやすい。)
したがって、コアを全部使うと性能が下がることもある。
依存性
時間依存性
空間依存性=データ依存性(代入分だけ見ればわかりやすいが、ポインタがあると意味不明になる)
独立性の増やし方
漸化式を消す・帰納変数=ループ変数をなくす・分割する
データ分解の要件
データチャンク分割法
データの
形状
は、「隣接データ」と「交換=外のチャンクのデータを使うこと」に影響
経験的には、ボリューム-サーフェース比を最大にするのがいい
チャンクを割り当てられたタスクが、更新すべきデータ全てにアクセス可能な保証
スレッドに割り当てられたチャンクの状態
↑
Ben-Aliの並列化検証法
†
かなり重要。
並列プログラムの理解
プログラムとはアトミックな処理の連続である
並列プログラムはアトミックな処理をインターリーブする
任意のインターリーブで期待した処理をする(この組み合わせは指数関数的に増える)
アトミックな実行文はいつかは実行される(公平性)
インターリーブ分析
必要なこと:現状の定義、スレッドごとの処理の順番を考えること
心配すること:デッドロック、スターベーション
クリティカルリージョン
共有変数の参照変更
必ず1スレッドからしか参照されないように、排他処理が必要
他のスレッドがクリティカルリージョンに入っているときは、自分は入れない
いい加減にクリティカルリージョンを実装しようとするとだいたい問題が起きる(1-3段階)
デッドロックの4条件(
これのうち一つでも不成立ならOK
)
相互排除条件=リソースを同時に取りうる状態が以下のどちらか「利用可能」「1スレッドのみが使用中のいずれか」
獲得後ウェイト=リソース獲得済みのスレッドが、新たなリソースを獲得しようとする
プリエンプトなし=スレッドがリソースを獲得後は、そのリソースを削除できるのは獲得したスレッドが自発的にリソースを開放した時だけ
循環待ち=スレッドの循環が発生し、和の中の次のスレッドがすでに獲得しているリソースを獲得しようとしている。
スターベーション
条件はない。
インターリーブ分析のみによって発見可能
↑
性能指標
†
高速化比率
1コア実行速度/nコア実行速度
コア数-高速化比率曲線
理想的には係数1の直線になるはず。
そうならない場合は
スケーラビリティが悪い
という。
スーパーリニア
コア数を超える倍率の高速化
原因はデータが小さくて、キャッシュにデータがすべて収まってしまうから。大規模データでテストしましょう。
Amdahlの法則
逐次ソースコードを並列化することでどれくらいの高速化が可能かを予想できる
並列処理可能割合
、直列限定処理割合
(p+q=1)、コア数nとして、処理時間はq+p/n以下にはならない。
これによって、
コア数-高速化比率曲線が予想可能
Gustafan-Barsisの法則
並列ソースコードがどれくらいの高速化を達成しているかを測定できる
直列限定処理時間対全部処理時間
、コア数
として、高速化率はn-(n-1)s以下である。
実行効率
nコア並列実行時間
、1コア実行時間
とした時、実行効率は
低いとコアが使い切れていない
↑
具体的なライブラリ
†
OpenMP, TBB, pthread, OpenCL(GPU)
OpenMP
ローカルコピーする変数の明示できる(private)
パラレルリージョンという概念があり重要(パラレルリージョンじゃないと使えない指示子があるので)
チャンクサイズはschedule指示節で指定
TBB
Lambdaが使える!
チャンクサイズを自動調節
pthread
より低次な処理
↑
具体的なアルゴリズム
†
PRAMモデル
配列を完全二分木とみなすことでアルゴリズムの高速化ができる
並列和、プレフィックススキャンはPRAMに非常に向いている
プレフィックススキャン(例6.8)
使い道:セレクション=リスト(未ソート)からk番目に大きい数値を取り出す(O(n)で可能, 例6-12)
↑
MapReduce
?
†
Mapデータ構造をReduceするアルゴリズム
分割統治法、バックトラック法など
変形例
CountAndMark
?
では1つの合計→3種類の合計を一度に算出(6.3.3)
スキャン処理を用いてデータの値を解釈、論理バイナリのように処理
配列を完全二分木とみなす (PRAM)
↑
ソート
†
プロセッサ時間の80%以上はソートに費やされている
↑
性能解析ツール
†
gdbはスレッドに対応
スレッドチェッカ
Intelスレッドチェッカはメモリ領域での衝突・デッドロックの可能性・スレッドのストールを検出可能
Intel VTuneパフォーマンスアナライザをのプラグインとして使うと、動的解析可能(ストレージコンフリクトを見つけるには、スレッドのメモリアクセスをすべて監視するなど)
プロファイリング(ホットスポットの特定)
gprofは-pgオプションでプロファイル用にコンパイルされたプログラムを解析可能。
Intel VTuneパフォーマンスアナライザ
↑
よくわからなかったところ
†
1.3.2 1.4.2.2 2.1.1 キャッシュライン、キャッシュラインのデータの共有とは。 偽共有とは。実行効率の解析でよく出てくるので重要そう。 配列のパッキングとは