SlideShare uma empresa Scribd logo
1 de 34
CuthillMckee法による
OpenFOAMのDIC前処理に関す
るスレッド並列化
藤原 巧(伊藤優希、富岡稔、丸石崇史、吉藤尚生)
© 2017 Fixstars Corporation, All rights reserved.
目次
 インターンの動機
 CuthillMckee法を簡単な問題に適用する(1週間)
 OpenFOAMにCuthillMckee法を導入(3日)
 KNLを使った計算(1日)
 まとめ&今後
1
インターンに入るまで
 研究室内でもOpenFOAMのハイブリッド並列化
してみたいという話になる
 知り合いにfixstarsのインターンがよかったよと
言われる
 これをみる
2
ボドゲ会…?
並列計算に向けて
 どうやらCuthill-Mckee法というものが
あるらしいのでそれを実装する
 いきなりOpenFOAM上で実装するのは辛い
 簡単な問題を解く
8x8なメッシュ上で、
8方向から影響を受ける作用を
Cuthill-Mckee法で並列化して
ガウスザイデル法で解いてみる
3
目次
 インターンの動機
 CuthillMckee法を簡単な問題に適用する
– 解く問題について
– 疎行列とその取り扱い方(CSR形式)
– ヤコビ法とガウスザイデル法、並列化の壁
– Multi Coloring法
– Cuthill-Mckee法, 並列化に向けたCuthillMckee法
– 行列の変換結果 & 確認
 OpenFOAMにCuthillMckee法を導入
 KNLを使った計算
 まとめ&今後
4
解く問題について
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
5
8x8なメッシュ上
に
-1 -1 -1
-1 8 -1
-1 -1 -1
8方向から影響
を受ける作用
を適用した結果
↑ ある与えられた分布(定数)
になるような を探す。
解く問題について
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
6
8x8なメッシュ上
に
-1 -1 -1
-1 8 -1
-1 -1 -1
8方向から影響
を受ける作用
を適用した結果
↑ ある与えられた分布(定数)
になるような を探す。
解く問題について
 8x8 のメッシュ … 長さが64の1次元ベクトル化
7
© 2017 Fixstars Corporation, All rights reserved.
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
8x8なメッシュ上
↑ ある与えられた分布(定数)
(未知数)
(定数)
解く問題について
8
8x8なメッシュ上
に
-1 -1 -1
-1 8 -1
-1 -1 -1
8方向から影響
を受ける作用
を適用した結果
↑ ある与えられた分布(定数)
になるような を探す。
解く問題について
 行列で表現
– 𝑖: フィルタを番号する中心の
セル番号(座標そのものではない!)
– 𝑗:フィルタを適用される番号
9
© 2017 Fixstars Corporation, All rights reserved.
-1 -1 -1
-1 8 -1
-1 -1 -1
𝑖
(64個)
𝑗(64個)
フィルタ
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
18,19, 20, 26, 28, 34, 35, 36 が -1
27が8
iは27
𝑨 =
解く問題について
10
に
8方向から影響
を受ける作用
を適用した結果
↑ ある与えられた分布(定数)
𝑨
8x8なメッシュ上
になるような を探す。
解く問題について
11
に
8方向から影響
を受ける作用
を適用した結果
↑ ある与えられた分布(定数)
𝑨
8x8なメッシュ上
になるような
𝑨𝒙 = 𝑩
を解く問題になる
解く行列
 青: 8
 赤: -1
http://proc-cpuinfo.fixstars.com/2016/07/blog-post-html/
12
疎行列の取り扱い方
 疎行列 … 0がいっぱいあるスカスカの行列
←→ 密行列
 疎行列を普通の配列で格納して計算するのはよくない。
– 疎行列にメモリをO(N^2)かけるのはよくない
 疎行列を取り扱うためのデータの格納方法 → 工夫
– 普通の行列… M(i,j) にアクセス
– 工夫… [(値の位置, 値の内容), (), ()] のイメージ
 CSR形式だと0とそうでない部分を区別可能!
スカスカの行列
13
工夫例: CSR (Compressed Sparse Row)形式
 右みたいな行列が与えられたとき、
Value = [a,b,c,d,e,f,g]
Column = [0,1,2,0,3,1,3]
offset = [0 ,3 ,5,6]
offsetは「abc…」
と見ていったときに行が変わるタイミング
a,d,f,gのときに行が変わるので、それに対応するindex
0,3,5,6が入っている。
14
0 1 2 3
今回はこれを使っていきます
http://www.jicfus.jp/wiki/index.php?CRS%E5%BD%A2%E5%BC%8F
CSR形式に関するライブラリ
 boost::numeric::ublas::compressed_matri
x<>
に対応
15
Value = [a,b,c,d,e,f,g]
Column = [0,1,2,0,3,1,3]
offset = [0 ,3 ,5,6]
前のページの… Boostの
mat.Value_data()
mat.index2_data()
mat.index1_data()
 ベクトルは
boost::numeric::ublas::vector<> を使用
 疎行列・ベクトル積
boost::numeric::ublas::prod
Expression template技法を使っていて一時変数を省略しているらしい
並列化に向けて
 こんな感じのフィルタをかけていくので、
上下左右斜めにある座標のデータに依存。
 反復計算をするための2つの方法
– 前のデータのみを使って次の値を更新していく方法…ヤコ
ビ法
– 計算済みのデータはその値を使っちゃう方法…ガウスザイ
デル法
 ガウスザイデル法のほうが計算の収束性が良い!
並列化によって隣接したセルを同時に変更する...
お互いに依存しあっているデータを変更し、
計算が不安定に
-1 -1 -1
-1 8 -1
-1 -1 -1
16
Multicoloring法
 お互いに依存しないように、色分けする
 同じ色どうしなら、並列計算してもOK!
 色分けして行列を解くということは、
右下のような行列を解くということ
 値がとても飛び飛びになる
→ キャッシュミスが多発
 周りの計算されてないノード増加
→ 収束性の悪化
→ 反復計算の回数が多くなる
17
行列で見るMultiColoring
 で囲った部分が
対角行列
 その中では、
𝑖と𝑗は干渉しない
 並列化可能
18
© 2017 Fixstars Corporation, All rights reserved.
Cuthill-McKee法
 行列をグラフ理論の隣接行列だと思う
 次数が少ないノードからスタート
 そこからの距離を幅優先探索で求め、
距離ごとにグルーピングする
 スタート地点をレベル1, そこから距離が離れる
ごとにレベルが1ずつ増える。
 Cuthill-Mckee法適用前と収束性は同じ!
– 行列の並び替えのコストとの戦い
19
Cuthill-Mckee法
引用 中島研吾 科学技術計算のための マルチコアプログラミング入門 C言語編 第 Ⅱ部:オーダリング
http://www.aics.riken.jp/aicssite/wp-content/uploads/2015/05/el_text_sp150305_2C_nakajima.pdf
20
Cuthill-Mckee法の問題点
 この処理をすると、散らばっている疎行列を帯行列にま
とめることができる(関連が強い点を近くに配置すること
ができるため)
 並列化をするためには、レベル間での依存関係を取り除
かなければならない
 隣接点の隣接点をstd::setに
突っ込んで、同じレベル内
で隣接しないように改良
… 隣接ないようにqueに追加
引用 中島研吾 科学技術計算のための マルチコアプログラミング入門 C言語編 第 Ⅱ部:オーダリング
http://www.aics.riken.jp/aicssite/wp-content/uploads/2015/05/el_text_sp150305_2C_nakajima.pdf
21
CuthillMcKee法の実装(並列化)
 同じレベル内での隣接点がなく、桂馬飛びのよ
うな形に
01 02 03 04 05 06 07 08
03 04 05 06 07 08 09 10
05 06 07 08 09 10 11 12
07 08 09 10 11 12 13 14
09 10 11 12 13 14 15 16
11 12 13 14 15 16 17 18
13 14 15 16 17 18 19 20
15 16 17 18 19 20 21 22
22
Multi-Color法との比較
 より帯行列に近いかたちに
23
MultiColor Cutill-Mckee
対称ガウスザイデル法での残差比較
 SymGS, CuthillMckee-SymGSは同じ精度
 MultiColorOrderingは収束が遅い
24
© 2017 Fixstars Corporation, All rights reserved.
OSSで公開中
 こちらのコードは公開中
25
© 2017 Fixstars Corporation, All rights reserved.
https://github.com/fixstars/AlgebraicBlockMulticolorOrdering
目次
 インターンの動機
 CuthillMckee法を簡単な問題に適用する
 OpenFOAMにCuthillMckee法を導入
– OpenFOAM v.s. 疎行列の格納形式
– DIC前処理の並列化
– 計算条件
– レベルと点の分布
– 実行時間比較
 KNLを使った計算
 まとめ&今後
26
解いた問題
 計算領域: (x,y,z) = (15.7m, 2m, 6.28m)
 分割数: (x,y,z) = (240, 130, 96)
 総メッシュ数 = 240 * 130 * 96 ≈ 3 × 106
 𝑅𝑒 𝜏 = 110
 主流方向 … サイクリック境界
27
x
z
y
cycliccyclic
6.28m
15.7m
2m
従来研究:OpenFOAMスレッド並列化のための基礎検討
*富岡稔、伊藤優希、丸石崇史、吉藤尚生: OpenFOAMスレッド並列化のための基礎検討(2017)
 OpenFOAMはそもそもldu形式
– ldu形式… 下三角(L)、対角(D)、上三角(U)に分解して保
存する
 ldu形式では、「疎行列ベクトル積」や
「DIC前処理」が同じアドレスにアクセスする実
装になってしまい、並列化が困難 → CSR形式に*
本インターンシップでは、すでに実装されているCSR形式を使用して、
「Cuthill-Mckee法を用いたDIC前処理の並列化」を実装する
28
OpenFOAMのDIC前処理
 DIC前処理の実装
– 𝑨𝒙 = 𝒃 をすばやく解くための前準備
𝒛 = 𝑰 + 𝑫−𝟏 𝑼
−𝟏
𝑰 + 𝑫−𝟏 𝑼 𝑻 −𝟏
𝑫−𝟏 𝒓
を計算する。
29
for (label i=0; i<n; i++)
{
z[i] = invD[i]*r[i];
}
// 前進代入
for (label i=0; i<n; i++)
{
for (label index = offset[i]; index < offset[i+1]; index++)
{
const auto j = column[index];
if(j < i)
{
z[i] -= invD[i] * data[index] * z[j];
}
}
}
Zが相互干渉
富岡稔、伊藤優希、丸石崇史、吉藤尚生: OpenFOAMスレッド並列化のための基礎検討(2017)
OpenFOAMのDIC前処理
 DIC前処理はガウスザイデルと同じく
工夫して並列化する必要がある
 CuthillMckee, MultiColoring
30
© 2017 Fixstars Corporation, All rights reserved.
//後退代入
for (label i=n-1; i>=0; i--)
{
for (label index = offset[i]; index < offset[i+1];
index++)
{
const auto j = column[index];
if(i < j)
{
z[i] -= invD[i] * data[index] * z[j];
}
}
}
zが相互干渉
OpenMP v.s. OpenMPI
 OpenMP(スレッド並列)
– CuthillMckee法を用いて、DIC前処理を並列化
– それ以外の部分は1並列
 OpenMPI(プロセス並列)
– 計算領域を分割
– それぞれの領域でプロセスを割り当てて計算
– 領域間の必要なデータはプロセス間通信でやり取り
31
© 2017 Fixstars Corporation, All rights reserved.
目次
 インターンの動機
 CuthillMckee法を簡単な問題に適用する
 OpenFOAMにCuthillMckee法を導入
 KNLを使った計算
 今後
32
今後の予定
 OpenMPを用いたスレッド並列と、
従来のMPIのプロセス並列の比較を行いたい
– それぞれの処理時間を計測するプロファイラの実装
– すべての処理をスレッド並列化して比較
33
© 2017 Fixstars Corporation, All rights reserved.

Mais conteúdo relacionado

Mais de Fixstars Corporation

いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~Fixstars Corporation
 
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化Fixstars Corporation
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)Fixstars Corporation
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)Fixstars Corporation
 
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方Fixstars Corporation
 
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてAIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてFixstars Corporation
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)Fixstars Corporation
 
第8回 社内プログラミングコンテスト 結果発表会
第8回社内プログラミングコンテスト 結果発表会第8回社内プログラミングコンテスト 結果発表会
第8回 社内プログラミングコンテスト 結果発表会Fixstars Corporation
 
第8回 社内プログラミングコンテスト 第1位 taiyo
第8回社内プログラミングコンテスト 第1位 taiyo第8回社内プログラミングコンテスト 第1位 taiyo
第8回 社内プログラミングコンテスト 第1位 taiyoFixstars Corporation
 
第8回 社内プログラミングコンテスト 第2位 fy999
第8回社内プログラミングコンテスト 第2位 fy999第8回社内プログラミングコンテスト 第2位 fy999
第8回 社内プログラミングコンテスト 第2位 fy999Fixstars Corporation
 
第8回 社内プログラミングコンテスト 第3位 logicmachine
第8回社内プログラミングコンテスト 第3位 logicmachine第8回社内プログラミングコンテスト 第3位 logicmachine
第8回 社内プログラミングコンテスト 第3位 logicmachineFixstars Corporation
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)Fixstars Corporation
 
A challenge for thread parallelism on OpenFOAM
A challenge for thread parallelism on OpenFOAMA challenge for thread parallelism on OpenFOAM
A challenge for thread parallelism on OpenFOAMFixstars Corporation
 
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてマルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてFixstars Corporation
 
DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化
DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化
DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化Fixstars Corporation
 
自動運転におけるCNNの信頼性
自動運転におけるCNNの信頼性自動運転におけるCNNの信頼性
自動運転におけるCNNの信頼性Fixstars Corporation
 
NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)
NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)
NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)Fixstars Corporation
 

Mais de Fixstars Corporation (20)

いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
量子コンピュータ時代の製造業におけるDXセミナー~生産工程効率化に向けた新たなご提案~
 
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
金融業界向けセミナー 量子コンピュータ時代を見据えた組合せ最適化
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)
 
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
ソフト高速化の専門家が教える!AI・IoTエッジデバイスの選び方
 
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術についてAIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
AIチップ戦国時代における深層学習モデルの推論の最適化と実用的な運用を可能にするソフトウェア技術について
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)
 
第8回 社内プログラミングコンテスト 結果発表会
第8回社内プログラミングコンテスト 結果発表会第8回社内プログラミングコンテスト 結果発表会
第8回 社内プログラミングコンテスト 結果発表会
 
第8回 社内プログラミングコンテスト 第1位 taiyo
第8回社内プログラミングコンテスト 第1位 taiyo第8回社内プログラミングコンテスト 第1位 taiyo
第8回 社内プログラミングコンテスト 第1位 taiyo
 
第8回 社内プログラミングコンテスト 第2位 fy999
第8回社内プログラミングコンテスト 第2位 fy999第8回社内プログラミングコンテスト 第2位 fy999
第8回 社内プログラミングコンテスト 第2位 fy999
 
第8回 社内プログラミングコンテスト 第3位 logicmachine
第8回社内プログラミングコンテスト 第3位 logicmachine第8回社内プログラミングコンテスト 第3位 logicmachine
第8回 社内プログラミングコンテスト 第3位 logicmachine
 
株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)株式会社フィックスターズ 会社説明資料(抜粋)
株式会社フィックスターズ 会社説明資料(抜粋)
 
A challenge for thread parallelism on OpenFOAM
A challenge for thread parallelism on OpenFOAMA challenge for thread parallelism on OpenFOAM
A challenge for thread parallelism on OpenFOAM
 
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化についてマルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
 
DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化
DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化
DIC-PCGソルバーのpimpleFoamに対する時間計測と高速化
 
自動運転におけるCNNの信頼性
自動運転におけるCNNの信頼性自動運転におけるCNNの信頼性
自動運転におけるCNNの信頼性
 
NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)
NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)
NVMCT #1 3D NANDフラッシュメモリの動向 (Trend of 3D NAND Flash Memory)
 

CuthillMckee法によるOpenFORMのDIC前処理に関するスレッド並列化