Upload
t2c
View
118
Download
1
Tags:
Embed Size (px)
DESCRIPTION
This is it.
Citation preview
実行環境OS:Windows 7 Professional 64-bit Service Pack 1
CPU: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz (8 CPUs), ~3.7GHz
メモリ: 8192MB RAM
実行環境: Cygwin 、 FX10 (性能は後述)
3
コード#include <stdio.h>
#include <stdlib.h>
#include <metis.h>
void main()
{
int nz = 6,i;
int col2[100] = {3,0,1,2,3,4};
int index2[100] = {0,1,3,4,6};
int val[100] = {1,2,3,4,5,6};
double objval2[100] ={0};
int part2[100] ={0};
idx_t *nvtxs, *ncon, *col, *index,*nparts, *objval, *part;
nvtxs = (int *) malloc(1000 * sizeof(int));
ncon = (int *) malloc(1000 * sizeof(int)) 確保すべきcol = (int *) malloc(1000 * sizeof(int)); 領域??index = (int *) malloc(1000 * sizeof(int));
nparts = (int *) malloc(1000 * sizeof(int));
objval = (int *) malloc(1000 * sizeof(int));
part = (int *) malloc(1000 * sizeof(int));
*nvtxs = (int)nz; → M??*ncon = (int)1;
*col = *col2;
*index = *index2;
*nparts = (int)3;
10
printf("HelloMetis!\n");
METIS_PartGraphKway(nvtxs,ncon,col,index,NULL,NULL,NULL,nparts,NULL,NULL,NULL,objval,part);
for(i=0;i<nz;i++){printf("part[%d]=%d\n",i,part[i]);}
printf("objval= %d \n",objval);
free(nvtxs);free(ncon);free(col);free(index);free(nparts);free(objval);free(part);}
テスト 2 &概要MM 形式の .mtx ファイル( 今回は 494_bus.mtx を使用 )を CRS に変換→metis.h を使って分割
12
Size Type
494 x 494, 1080 entriesreal symmetric
indefinite symmetric positive definite
コードread_example.c に先程のコードを追加。
▫idx_t *nvtxs, *ncon, *col2, *index2, *nparts, *objval, *part;
▫ *nvtxs = (int)nz;▫ *ncon = (int)1;▫ *col2 = *col;▫ *index2 = *index;▫ *nparts = (int)20;
13
可視化目的:行・列・分割された番号を用いて 色付けするなどしてどの様に分割されたか
を確認する。(最初は自分で見易くするため改行)以下を追加。
15
//for 494_bus.mtxprintf("0\n");for(i=0,j=0;i<=nz;i++){if(col[i] > col[i+1]){printf("\n");j++;}printf("%d\n",j);}
printf("\n\n --------- above:line number below:col -------- \n\n");
for(i=0;i<nz;i++){printf("%d\n",col[i]);
if(col[i] > col[i+1]){printf("\n");}}
printf("\n\n --------- above:col below:part -------- \n\n");
for(i=0;i<nz;i++){printf("%d\n",part[i]);if(col[i] > col[i+1]){printf("\n");}}
nd24k•COOL
Matrix properties number of rows 72,000 number of columns 72,000 nonzeros 28,715,634 structure symmetric
20
追加したコード• #include <omp.h>
• double time1=0,time2=0;
• time1,2 = omp_get_wtime();
• printf("time = %lf\n\n",(time2-time1));
• $ gcc newread.c mmio.c -lm -lmetis -fopenmp
•図は 494_bus でテストしたもの
21
理論時間•FLOPS 理論値 = ( クロック ) × ( コア数 ) × 大体一致。
( コア・クロックあたりの浮動小数点演算回数 )= (3.40 * 10^9) * (4) * (8) = 110.8 * 10^9 FLOPS=110.8GFLOPS∴nz(= 28,715,634) / 110.8G ≒ 260000 * 10^-9 = 0.00026sec / nz1 周の処理∴readtime = 0.00026sec sorttime = (nz * M) 回 = nz1 * 72,000 = 18.72sec metistime = (nz * objval?) 回 = 取り忘れ alltime = SUM(read,sort,metis) = ?
24
比較理論値 実際
Read 0.00026sec 9.138236 sec
Sort 18.72sec 2479.721206 sec
Metis ? 20.328463 sec
all ? 2515.525911 sec
25
顕著なズレ(ハードを扱いきれていない?)
リオーダリング?•色々試行錯誤したものの出来ず•多分認識が違う•自分の認識では ordering[i][j] = k で 分割番号 i 、そこに入る順の j 、 k が通し番号→C で二次元配列(仮)を作ろうとすると ・ ordering[ 分割数 ][nz/ 非ゼロ数 ] で 大き過ぎて作れない ・ **ordering , *ordering でコンパイルは通るが 実行時即時に落とされる(原因わからず)
26
メモリの確保方法もわからず仮にポインタのポインタが実装出来たとして
ordering = (int **)malloc(DIVNUM * sizeof(int));
for(i=0; i<DIVNUM; i++){
ordering[i] = (int *)malloc( (nz/DIVNUM)*3 *sizeof(int) );}
だろうか?
27
並列化(読み込み部) for (i=0; i<nz; i++) { fscanf(f, "%d %d %lg\n", &I[i], &J[i], &val[i]); I[i]--;
J[i]--; }
28
#pragma omp parallel for private(i) for (i=0; i<nz; i++) { fscanf(f, "%d %d %lg\n", &I[i], &J[i], &val[i]); I[i]--;
J[i]--; }
(結局ソートするので同じ所の情報が取り出せれば 順番はどうでも良い(?))
並列化(ソート部)index[0]=0;
for(i=1; i<=M; i++){for(j=0; j<nz; j++){if(I[j]==i){// ソート部val2[count] = val[j];col[count] = J[j];count++;}}//index 作成部index[i] = count;}
29
count の数に依存するので別の設計が必要(先週参照)
FX10 でも実行•FX10
31
項目仕様
Oakleaf-FX Oakbridge-FX
システム全体( 計算ノード )
総理論演算性能 1.135 PFlops 136.2 TFlops
総主記憶容量 150 TByte 18 TByte
総ノード数 4,800 576
インターコネクト
6 次元メッシュ / トーラス
6 次元メッシュ / トーラス
ローカルファイルシステム
1.1 PByte 147 TByte
共有ファイルシステム
2.1 PByte 295 TByte
FX10 上での METIS の導入
• module load METIS をする
• $ fccpx ~~ でコンパイル ( 並列の場合は – Kopenmp も付加する)
• (ドキュメント閲覧時表示の遵守事項) 核兵器又は生物化学兵器及びこれらを 運搬するためのミサイル等の大量破壊兵器の 開発、設計、製造、保管及び使用等の目的に 利用しない ←すごい
Oakleaf-FX 利用手引書(ログイン後表示)
32
課題•リファクタリング(関数化など)や そもそもの設計•レベル的におそらく可能なので可視化•バージョン管理•理論値の算出(並列化後・ FX10 上のものも)•ordering の宣言、初期化領域(メモリ確保数)•FX10 上での実行、•時間の確保
35