More Related Content
Similar to Spmv9forpublic
Similar to Spmv9forpublic (20)
Spmv9forpublic
- 3. 実行環境
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
- 10. コード
#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]=%dn",i,part[i]);
}
printf("objval= %d n",objval);
free(nvtxs);
free(ncon);
free(col);
free(index);
free(nparts);
free(objval);
free(part);
}
- 20. nd24k
• COOL
Matrix properties
number of rows 72,000
number of columns 72,000
nonzeros 28,715,634
structure symmetric
20
- 21. 追加したコード
• #include <omp.h>
• double time1=0,time2=0;
• time1,2 = omp_get_wtime();
• printf("time = %lfnn",(time2-time1));
• $ gcc newread.c mmio.c -lm -lmetis -fopenmp
• 図は494_busでテストしたもの
21
- 24. 理論時間
• 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
- 25. 比較
理論値 実際
Read 0.00026sec 9.138236 sec
Sort 18.72sec 2479.721206 sec
Metis ? 20.328463 sec
all ? 2515.525911 sec
25
顕著なズレ(ハードを扱いきれていない?)
- 26. リオーダリング?
• 色々試行錯誤したものの出来ず
• 多分認識が違う
• 自分の認識ではordering[i][j] = kで
分割番号i、そこに入る順のj、kが通し番号
→Cで二次元配列(仮)を作ろうとすると
・ordering[分割数][nz/非ゼロ数]で
大き過ぎて作れない
・**ordering , *ordering でコンパイルは通るが
実行時即時に落とされる(原因わからず)
26
- 28. 並列化(読み込み部)
for (i=0; i<nz; i++)
{
fscanf(f, "%d %d %lgn", &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 %lgn", &I[i], &J[i], &val[i]);
I[i]--;
J[i]--;
}
(結局ソートするので同じ所の情報が取り出せれば
順番はどうでも良い(?))
- 32. FX10上でのMETISの導入
• module load METIS をする
• $ fccpx ~~でコンパイル
(並列の場合は –Kopenmpも付加する)
• (ドキュメント閲覧時表示の遵守事項)
核兵器又は生物化学兵器及びこれらを
運搬するためのミサイル等の大量破壊兵器の
開発、設計、製造、保管及び使用等の目的に
利用しない ←すごい
Oakleaf-FX利用手引書(ログイン後表示)
32