プログラムの高速化・並列化サービスの事例

ケーススタディ : Cray X2におけるCASTEPベンチマーク

[2016年1月掲載]

Numerical Algorithms Group Ltd.


CASTEPのベンチマーク結果

CASTEPコードのHECToR XTおよびX2におけるベンチマーク実行結果を以下に示します。

Benchmark Nprocs XT(bespoke FFTs) X2(bespoke FFTs) X2(libsci FFTs) Speedup factor XT:X2bespoke FFTs
al1x1(step 7) 1 2042.44s 1464.70s 1446.66s 1.39
8 437.81s 243.85s 307.55s 1.80
★16 231.92s 157.28s 188.83s 1.47
32 166.61s 128.62s 143.3s 1.30
al3x3(step 11) ★16 10152s* 4436s 4648s 2.29
32 6077.90s 2162.73s 2263.76s 2.81
64 3352.89s 1225.48s 1274.03s 2.73
112 2196.7s 912.55s 930.58s 2.41
TiN-mp(step 39) 16 3327.63s 1651.2s 2107.37s 2.02
32 1629.41s 1256.22s 1454.51s 1.30
64 832.52s 2066.07s 2227.79s **
  1. 時間は、括弧で示すSCFステップにおけるCASTEPのアウトプットから採取しました。al3x3の16procのみは、CASTEPの内部時間関数が不正確なため(実際の4倍短い時間を出力していた) 、aprunコマンドの経過時間としました。
  2. *印のジョブはメモリー制限のためシングルコア・モードで計測しました。
  3. **印は、以下のSCFが未収束とのメッセージで終了したものです:"*Warning* max. SCF cycles performed but system has not reached the groundstate"
  4. CASTEP搭載のFFTはCRAYのlibsciのライブラリーより高速です。
  5. CASTEPのFFTに対しては、lotmax=128およびlvr=128 (ベクトルレジスター長)とし、FFTループにIVDEP(依存性を無視する)指示行を挿入しました。Lotmaxに対しては、1のような適切でない値をセットした場合以外では、性能に影響はありませんでした(以下の記述を参照)。
  6. ★印についてはCrayPATで計測しました(以下の記述を参照)。

パラメーターlotmaxの影響

パラメーターlotmax(多重1D FFTに対するブロッキングパラメーター)の様々な値について、X2条のal1x1ジョブの16プロセッサーにおける、内蔵FFTの性能を調べました。

lotmax=1 lotmax=64 lotmax=128 lotmax=256 lotmax=512
300.99s 175.92 175.66 175.64 175.96

ベクトルレジスター要素数は128です。1より大きな値についてはCASTEPの性能に影響は与えませんでした。

CrayPATによる比較

コマンドpat_report- Oapaを用いてビルドすると、以下のような有益なトレース情報を生成します。さらにこの出力もまた、経過時間を計測する機能による基本的なプロファイリングにも役立ちます。最初に示す結果は、16プロセッサーを用いたal1x1のケースです。

XT,al1x1,16procケース


Samp % |  Samp |  Imb.  | Imb.   |Group
       |       |   Samp | Samp % | Function
       |       |        |        | PE='HIDE'
100.0% | 16913 |     -- |     -- |Total
|---------------------------------------------
| 54.5% | 9210 |     -- |     -- |ETC
||--------------------------------------------
|| 15.0% | 2534 |  70.81 |   2.9% |zgemm_kernel_n
||  8.0% | 1359 |  59.94 |   4.5% |zgemm_kernel_l
||  4.1% |  700 |  46.50 |   6.6% |zgemm_otcopy
||  2.7% |  462 |  26.94 |   5.9% |zcopy_k
||  2.6% |  442 |  35.81 |   8.0% |zgemm_oncopy
||  2.2% |  367 | 172.88 |  34.1% |PtlEQPeek
||  2.2% |  364 |  35.31 |   9.4% |zlaset_
||  1.6% |  267 |  23.56 |   8.6% |zlasr_
||  1.4% |  244 |  16.69 |   6.8% |zdotu_
||  1.2% |  205 |  17.75 |   8.5% |zlacpy_
||  1.0% |  177 |  20.94 |  11.3% |zscal_k
||  1.0% |  161 |  27.31 |  15.5% |zgemv_n
||============================================
| 24.3% | 4105 |     -- |     -- |MPI
||--------------------------------------------
|| 17.5% | 2956 | 105.38 |   3.7% |mpi_alltoallv_
||  4.3% |  725 |  48.06 |   6.6% |mpi_recv_
||  2.2% |  365 |  20.62 |   5.7% |mpi_allreduce_
||============================================
| 21.3% | 3598 |     -- |     -- |USER
||--------------------------------------------
||  5.3% |  904 |  58.31 |   6.5%
|COMMS_TRANSPOSE_EXCHANGE.in.COMMS_TRANSPOSE_N.in.COMMS
||  2.4% |  402 |  36.44 |   8.9% |RAD5I.in.FFT_GPFA
||  2.3% |  397 |  35.25 |   8.7% |GPFA.in.FFT_GPFA
||  1.3% |  225 |  25.88 |  11.0% |RAD4ITWID.in.GPFA2F.in.FFT_GPFA
||  1.3% |  223 |  36.12 |  14.9% |RAD4II.in.GPFA2F.in.FFT_GPFA
||  1.1% |  188 |  18.50 |   9.6%
|ION_BETA_RECIP_INTERPOLATION.in.ION
|=============================================

X2 内製FFT,al1x1,16procケース


Samp % |  Samp |  Imb.  | Imb.   |Group
       |       |   Samp | Samp % | Function
       |       |        |        | PE='HIDE'
100.0% | 22552 |     -- |     -- |Total
|----------------------------------------------
| 59.4% | 13386 |     -- |     -- |ETC
||---------------------------------------------
|| 13.0% |  2933 | 246.88 |   8.3% |zgbmv_
||  9.8% |  2213 | 136.12 |   6.2% |zgemm_
||  8.1% |  1817 | 150.19 |   8.1% |MPIDI_CRAY_progress
||  3.0% |   677 |  81.12 |  11.4% |MPIDI_CRAY_dmdev_progress
||  2.4% |   530 |  67.69 |  12.1% |_F90_LEN_TRIM_
||  1.9% |   433 | 266.94 |  40.7% |getrusage
||  1.9% |   433 |  53.81 |  11.8% |zcopy_
||  1.9% |   427 |  57.06 |  12.6% |zhbmv_
||  1.4% |   324 |  52.12 |  14.8% |MPIDI_CRAY_Progress_wait
||  1.4% |   307 |  51.56 |  15.3% |_F90_FCD_CMP_EQ
||  1.2% |   270 |  36.44 |  12.7% |MPIC_Wait
||  1.0% |   218 |  25.75 |  11.3% |zdotu_
||=============================================
| 22.2% |  5007 |     -- |     -- |USER
||---------------------------------------------
||  4.1% |   920 | 110.56 |  11.4% |trace_entry$trace_
||  3.9% |   879 | 125.50 |  13.3%
|ion_beta_recip_interpolation$ion_
||  2.6% |   592 | 566.81 |  52.2%
|comms_transpose_exchange$comms_transpose_n$comms_
||  1.9% |   422 |  76.00 |  16.3% |gpfa2f$fft_gpfa_
||  1.1% |   258 |  46.50 |  16.3% |gpfa$fft_gpfa_
||  1.1% |   237 |  39.00 |  15.1% |gpfa5f$fft_gpfa_
||=============================================
| 18.4% |  4159 |     -- |     -- |MPI
||---------------------------------------------
|| 13.7% |  3087 | 356.81 |  11.1% |mpi_alltoallv_
||  3.1% |   696 |  79.69 |  11.0% |mpi_allreduce_
||  1.1% |   250 |  37.50 |  13.9% |mpi_recv_
|==============================================

X2 libsci FFT,al1x1,16procケース


Samp % |  Samp |  Imb.  | Imb.   |Group
       |       |   Samp | Samp % | Function
       |       |        |        | PE='HIDE'
100.0% | 26110 |     -- |     -- |Total
|----------------------------------------------
| 68.6% | 17902 |     -- |     -- |ETC
||---------------------------------------------
|| 11.2% |  2914 | 248.56 |   8.4% |zgbmv_
||  8.5% |  2216 | 165.06 |   7.4% |zgemm_
||  6.6% |  1718 | 244.31 |  13.3% |MPIDI_CRAY_progress
||  6.0% |  1578 | 182.50 |  11.1% |zfftx32_
||  3.1% |   816 | 124.44 |  14.1% |MPIDI_CRAY_dmdev_progress
||  2.0% |   511 | 130.75 |  21.7% |_F90_LEN_TRIM_
||  1.8% |   472 |  56.06 |  11.3% |zpassm1$32_
||  1.7% |   454 | 146.00 |  26.0% |getrusage
||  1.7% |   436 |  36.69 |   8.3% |zcopy_
||  1.7% |   435 | 143.75 |  26.5% |zpass1$32_
||  1.7% |   432 |  51.06 |  11.3% |zpass$32_
||  1.6% |   419 |  32.88 |   7.8% |zhbmv_
||  1.2% |   306 |  53.69 |  15.9% |MPIDI_CRAY_Progress_wait
||  1.2% |   302 |  70.19 |  20.1% |_F90_FCD_CMP_EQ
||  1.1% |   279 |  64.31 |  20.0% |MPIC_Wait
||  1.0% |   262 |  53.62 |  18.1% |zpass1f_r6$32_
||=============================================
| 16.2% |  4238 |     -- |     -- |MPI
||---------------------------------------------
|| 12.0% |  3144 | 223.56 |   7.1% |mpi_alltoallv_
||  2.6% |   683 |  81.69 |  11.4% |mpi_allreduce_
||  1.1% |   281 |  24.56 |   8.6% |mpi_recv_
||=============================================
| 15.2% |  3970 |     -- |     -- |USER
||---------------------------------------------
||  3.5% |   908 | 115.81 |  12.1%
|ion_beta_recip_interpolation$ion_
||  3.4% |   897 | 105.19 |  11.2% |trace_entry$trace_
||  2.1% |   538 |  67.31 |  11.9%
|comms_transpose_exchange$comms_transpose_n$comms_
|==============================================

これらの表からBLASに最も時間が掛かっており、CASTEPはX2に最適化されたバージョンの恩恵に与っていると言えます。2つのバンド行列計算ルーチンzhbmvとzgbmvはX2のプロファイルに現れていますが、XTでは見えません(つまりXTでは重要ではない)。このことからこのバンド行列計算は、X2上でlibsci BLASにより最適化されていないと考えられます。NaHF3ベンチマークでの貧弱な性能はBLASに関して特に問題がある事を示しています。シングルプロセッサーでの実行から、以下の実行時間が得られました:

XT X2 libsci BLAS
467.2s 544.8s

プロファイリングから、この性能劣化がBLASルーチンzhbmv(複素エルミートバンド行列-ベクトル計算)のベクトル性能によるものであることが示されました。netlibよりこのルーチンをダウンロードして、ftn -cのみでコンパイルしてリンクしたところ、実行時間は361.25sに減少しました。ベクトル化されていなかったループは以下のものです:


      DO 60 J = 1,N
        TEMP1 = ALPHA*X(J)
        TEMP2 = ZERO
        L = KPLUS1 - J
        DO 50 I = MAX(1,J-K),J - 1
          Y(I) = Y(I) + TEMP1*A(L+I,J)
          TEMP2 = TEMP2 + DCONJG(A(L+I,J))*X(I)
50      CONTINUE
        Y(J) = Y(J) + TEMP1*DBLE(A(KPLUS1,J)) + ALPHA*TEMP2
60    CONTINUE

Y(I)とY(J)への参照は依存性を持ち、外側ループのベクトル化を阻害しています。しかしながらCASTEPのNaHF3でのこのルーチンの呼出しにおいては、変数K(super-diagonal数)はゼロであり、内側ループは実行されません。そこで内側ループをコメントアウトして再度コンパイルしたところ、実行時間が176.89sまで減少しました。4ケースでのzhbmvのこれらのルーチンの平均実行時間は以下の通りでした:

XT XT libsci XT netlib XT netlib commented
2.4*10^-3 3.66*10^-2 1.97*10^-2 7*10^-4

プロファイルはmpi_all_to_allが多くの時間を消費していることも示しています。しかしながら、このルーチンの性能は全実行時間比で見れば、X2よりもXTでの比率が大きくなっています。

CrayPATトレース情報

ここで述べた実験はトレース情報を生成するために、CrayPATの自動プロファイリング解析オプションを用いています。

XT al1x1 16procケース


=====================================================================
USER / main
---------------------------------------------------------------------
Time%                                           67.3%
Time                                       183.270900
Imb.Time                                    12.549153
Imb.Time%                                        7.3%
Calls                                               1
DATA_CACHE_MISSES        68.258M/sec      12368216931 misses
PAPI_TLB_DM               0.250M/sec         45337321 misses
PAPI_L1_DCA            1678.617M/sec     304161187441 refs
PAPI_FP_OPS            2162.653M/sec     391867404523 ops
User time (approx)      181.197 secs     471113500000 cycles
Average Time per Call                        0.000000 sec/call
Overhead / Time                               2267.3%
Cycles                  181.197 secs     471113500000 cycles
User time (approx)      181.197 secs     471113500000 cycles
Utilization rate                               100.0%
HW FP Ops / Cycles                               0.83 ops/cycle
HW FP Ops / User time  2162.653M/sec     391867404523 ops 41.6%peak
HW FP Ops / WCT        2162.653M/sec   
Computation intensity                            1.29 ops/ref
MFLOPS                 34602.46M/sec
LD & ST per TLB miss                          6708.85 refs/miss
LD & ST per D1 miss                             24.59 refs/miss
D1 cache hit ratio                              95.9%
% TLB misses / cycle                             0.0%
=====================================================================

X2 内製FFT al1x1 16procケース


=====================================================================
USER / castep_
---------------------------------------------------------------------
Time%                                           53.0%
Time                                       179.718458
Imb.Time                                     5.246363 
Imb.Time%                                        3.2%
Calls                                               1
VOPS_VL                3728.603M/sec     457400583884 ops
PAPI_VEC_INS             78.268M/sec       9601388532 instr
DCACHE_HIT               29.006M/sec       3558224331 hits
DCACHE_MISS               4.974M/sec        610157559 misses
PAPI_TOT_INS            330.429M/sec      40534828013 instr
PAPI_FP_OPS            2847.366M/sec     349296196196 ops
PAPI_TOT_CYC            122.673 secs      98138767428 cycles
User time (approx)      133.084 secs     106467465000 cycles
Average Time per Call                        0.000000 sec/call
Overhead / Time                              14929.7%
Cycles                  122.673 secs      98138767428 cycles
User time (approx)      133.084 secs     106467465000 cycles
Utilization rate                               100.0%
Instr per cycle                                  0.41 inst/cycle
HW FP Ops / Cycles                               3.56 ops/cycle
HW FP Ops / User time  2847.366M/sec     349296196196 ops 11.1%peak
HW FP Ops / WCT        2847.366M/sec
HW FP Ops / Inst                               861.7%
Avg VL                                          47.64 ops
Data cache refs          33.979M/sec       4168381890 refs
D cache hit ratio                               85.4%
MIPS                    5286.86M/sec
MFLOPS                 45557.85M/sec
Instructions per LD ST                           9.72 inst/ref
LD & ST per D1 miss                              6.83 refs/miss
=====================================================================

X2 libsci FFTs al1x1 16procケース


=====================================================================
USER / castep_
---------------------------------------------------------------------
---
Time%                                           63.6%
Time                                       218.313417
Imb.Time                                     5.040330
Imb.Time%                                        2.6%
Calls                                               1
VOPS_VL                3017.798M/sec     498497777267 ops
PAPI_VEC_INS             81.736M/sec      13501616871 instr
DCACHE_HIT               43.989M/sec       7266421874 hits
DCACHE_MISS               3.619M/sec        597870529 misses
PAPI_TOT_INS            416.228M/sec      68755074792 instr
PAPI_FP_OPS            2270.404M/sec     375038916911 ops
PAPI_TOT_CYC            165.186 secs     132148763363 cycles
User time (approx)      173.750 secs     138999970000 cycles
Average Time per Call                        0.000000 sec/call
Overhead / Time                              12868.7%
Cycles                  165.186 secs     132148763363 cycles
User time (approx)      173.750 secs     138999970000 cycles
Utilization rate                               100.0%
Instr per cycle                                  0.52 inst/cycle
HW FP Ops / Cycles                               2.84 ops/cycle
HW FP Ops / User time  2270.404M/sec     375038916911 ops 8.9%peak
HW FP Ops / WCT        2270.404M/sec
HW FP Ops / Inst                               545.5%
Avg VL                                          36.92 ops
Data cache refs          47.609M/sec       7864292403 refs
D cache hit ratio                               92.4%
MIPS                    6659.65M/sec
MFLOPS                 36326.47M/sec
Instructions per LD ST                           8.74 inst/ref
LD & ST per D1 miss                             13.15 refs/miss
=====================================================================

これらの表はlibsci FFTのようなCrayPATに隠れているライブラリー呼出しを含む全CASTEPの状態を示します。

XTとX2の表を比べると、すぐに解る違いはピーク性能比で、XTは41.6%、X2では11.1%と8.9%であることです。これはCASTEPが、X2よりもXTのハードウェア性能をより良く引き出していることを示しています。

内製およびlibsciのFFTルーチンの比較から、内製FFTを用いる実行形式がベクトルレジスターをうまく使っていることが解ります。

  1. 平均ベクトル長がより長い(47.6 vs. 36.2)
  2. サイクル毎の浮動小数点演算数がより大きい(3.56 vs. 2.84)。(X2は、例えばパイプラインが初期化された後に8乗算と8加算のような、サイクル毎に16浮動小数点演算が可能です)
  3. FLOPS比がより大きい(理論ピーク性能の11.1% vs. 8.9%)

内製FFTルーチンがユーザーサプライのため、PATレポートを生成できました。例えばルーチンgpfa5fのPATレポートは以下の通りです(rad51やrad5iiはgpfa5fから呼ばれます):

X2 内製FFT al1x1 16 procケース


=====================================================================
USER / gpfa5f$fft_gpfa_
---------------------------------------------------------------------
Time%                                            1.1%
Time                                         3.714851
Imb.Time                                     0.135285
Imb.Time%                                        4.0%
Calls                                          251680
VOPS_VL                4155.213M/sec      15495551976 ops
PAPI_VEC_INS             64.058M/sec        238883853 instr
DCACHE_HIT               36.236M/sec        135130645 hits
DCACHE_MISS               1.145M/sec          4271125 misses
PAPI_TOT_INS            231.495M/sec        863289163 instr
PAPI_FP_OPS            3062.210M/sec      11419543975 ops
PAPI_TOT_CYC              3.729 secs       2983346812 cycles
User time (approx)        0.403 secs        322450000 cycles
Average Time per Call                        0.000000 sec/call
Overhead / Time                       181781789943.4%
Cycles                    3.729 secs       2983346812 cycles
User time (approx)        0.403 secs        322450000 cycles
Utilization rate                               100.0%
Instr per cycle                                  0.29 inst/cycle
HW FP Ops / Cycles                               3.83 ops/cycle
HW FP Ops / User time  3062.210M/sec      11419543975 ops12.0%peak
HW FP Ops / WCT        3062.210M/sec
HW FP Ops / Inst                              1322.8%
Avg VL                                          64.87 ops
Data cache refs          37.381M/sec        139401770 refs
D cache hit ratio                               96.9%
MIPS                    3703.93M/sec
MFLOPS                 48995.36M/sec
Instructions per LD ST                           6.19 inst/ref
LD & ST per D1 miss                             32.64 refs/miss
=====================================================================

この表を、XTでのrad5iルーチンに対する出力と比較します:

XT al1x1 16 procケース


=====================================================================
USER / RAD5I.in.FFT_GPFA
---------------------------------------------------------------------
Time%                                            2.4%
Time                                         6.715598
Imb.Time                                     0.096200
Imb.Time%                                        1.6%
Calls                                          188725
DATA_CACHE_MISSES       118.223M/sec        660403246 misses
PAPI_TLB_DM               0.048M/sec           269989 misses
PAPI_L1_DCA            1215.428M/sec       6789493566 refs
PAPI_FP_OPS            2227.874M/sec      12445115211 ops
User time (approx)        5.586 secs      14523843750 cycles
Average Time per Call                        0.000000 sec/call
Overhead / Time                        11505329430.4%
Cycles                    5.586 secs      14523843750 cycles
User time (approx)        5.586 secs      14523843750 cycles
Utilization rate                               100.0%
HW FP Ops / Cycles                               0.86 ops/cycle
HW FP Ops / User time  2227.874M/sec      12445115211 ops 42.8%peak
HW FP Ops / WCT        2227.874M/sec
Computation intensity                            1.83 ops/ref
MFLOPS                 35645.99M/sec
LD & ST per TLB miss                         25147.33 refs/miss
LD & ST per D1 miss                             10.28 refs/miss
D1 cache hit ratio                              90.3%
% TLB misses / cycle                             0.0%
=====================================================================

ベクトルマシンはより高いFLOPS(3.06 GFLOPS vs. 2.2 GFLOPS)ですが、この値はX2ピーク性能(25.6 GFLOPS)よりかなり低い値です。このXTにおける実行では、シングルOpteronプロセッサーのピーク性能(5.6 GFLOPS)に近い値となっています。 al1x1 16procケースの結果を、より大きな問題であるal3x3 16procケースと比較してみます。

X2 内製FFT al3x3 16 procケース


=====================================================================
USER / castep_
---------------------------------------------------------------------
---
Time%                                           84.3%
Time                                      3942.380814
Imb.Time                                    52.875652
Imb.Time%                                        1.5%
Calls                                               1
VOPS_VL               10786.848M/sec   41787189905570 ops
PAPI_VEC_INS            118.336M/sec     458423644048 instr
DCACHE_HIT               24.275M/sec      94038801549 hits
DCACHE_MISS               1.897M/sec       7349945411 misses
PAPI_TOT_INS            312.953M/sec    1212349784141 instr
PAPI_FP_OPS            9517.049M/sec   36868112621489 ops
PAPI_TOT_CYC           3873.902 secs    3099121303275 cycles
User time (approx)     3899.569 secs    3119655485000 cycles
Average Time per Call                        0.000005 sec/call
Overhead / Time                                669.8%
Cycles                 3873.902 secs    3099121303275 cycles
User time (approx)     3899.569 secs    3119655485000 cycles
Utilization rate                               100.0%
Instr per cycle                                  0.39 inst/cycle
HW FP Ops / Cycles                              11.90 ops/cycle
HW FP Ops / User time  9517.049M/sec   36868112621489 ops37.2%peak
HW FP Ops / WCT        9517.049M/sec
HW FP Ops / Inst                              3041.0%
Avg VL                                          91.15 ops
Data cache refs          26.172M/sec     101388746959 refs
D cache hit ratio                               92.8%
MIPS                    5007.25M/sec
MFLOPS                152272.79M/sec
Instructions per LD ST                          11.96 inst/ref
LD & ST per D1 miss                             13.79 refs/miss
=====================================================================

この表からal1x1ケースに対して大きな改善が確認できます。このより大きなケースではより大きなループ長を持つため(平均ベクトル長が64.87から91.15へ改善しています)、ベクトルユニットをより長く保持し、良好な11.9 FP ops per cycle値を示し、ピーク性能の37.2%の実行性能を導いています。

X2 内製FFT al3x3 16 procケース


=====================================================================
USER / gpfa5f$fft_gpfa_
---------------------------------------------------------------------
---
Time%                                            1.1%
Time                                        49.389664
Imb.Time                                     1.689171
Imb.Time%                                        3.8%
Calls                                         1239018
VOPS_VL                5690.326M/sec     272427152070 ops
PAPI_VEC_INS             46.389M/sec       2220891576 instr
DCACHE_HIT               12.135M/sec        580972618 hits
DCACHE_MISS               0.537M/sec         25687919 misses
PAPI_TOT_INS            122.806M/sec       5879394154 instr
PAPI_FP_OPS            4193.054M/sec     200744517417 ops
PAPI_TOT_CYC             47.875 secs      38300393033 cycles
User time (approx)       44.244 secs      35395230000 cycles
Average Time per Call                        0.000000 sec/call
Overhead / Time                        66245897039.1%
Cycles                   47.875 secs      38300393033 cycles
User time (approx)       44.244 secs      35395230000 cycles
Utilization rate                               100.0%
Instr per cycle                                  0.15 inst/cycle
HW FP Ops / Cycles                               5.24 ops/cycle
HW FP Ops / User time  4193.054M/sec     200744517417 ops 16.4%peak
HW FP Ops / WCT        4193.054M/sec
HW FP Ops / Inst                              3414.4%
Avg VL                                         122.67 ops
Data cache refs          12.672M/sec        606660536 refs
D cache hit ratio                               95.8%
MIPS                    1964.89M/sec
MFLOPS                 67088.86M/sec
Instructions per LD ST                           9.69 inst/ref
LD & ST per D1 miss                             23.62 refs/miss
=====================================================================

同じく、FFTルーチンの性能改善は、ベクトルユニット保持期間を長くするループ長の伸長(平均ベクトル長122.67)により引き起こされています。しかしながらrad5i内のループは、加算と乗算ユニットを常に保持しているわけではないためにピークのops per cycle比は16には届かず、5.24という値となっています。

結論

X2上のCASTEPの性能は、BLASの性能に制限されており、特にNaHF3ケースで問題を生じていました。CASTEPの内製FFTの性能は、libsci FFTよりも良好でした。al3x3 16procケースは、ベクトルユニットの性能を最も有効に動作させていると考えられます。これはおそらく、プロセッサーへより多くの演算を割り振り、ベクトルユニット効率をより高く維持し、このことからベクトルパイプラインの立ち上がりのコストを最小化しているためと考えられます。すなわちCASTEPは、各プロセッサーにそのベクトルユニットをbusyにする十分な演算を供給する場合であれば、良好な活用が可能であると言えます。

関連情報
MENU
Privacy Policy  /  Trademarks