comparison paper/chapter2.tex @ 5:b8d790bccfe7 draft

fix
author Yutaka_Kinjyo <yutaka@cr.ie.u-ryukyu.ac.jp>
date Thu, 09 Feb 2012 04:31:13 +0900
parents 6cf0f731cbde
children cb430c965050
comparison
equal deleted inserted replaced
4:6cf0f731cbde 5:b8d790bccfe7
457 描画 Task が変わるたびに、新しい Tile を転送していては、DMA 転送のコストがかかりすぎる。そこで、 457 描画 Task が変わるたびに、新しい Tile を転送していては、DMA 転送のコストがかかりすぎる。そこで、
458 すでに SPE 上に転送してある Tile を保存しておく。そして、次に描画する Span が保存してある Tile 458 すでに SPE 上に転送してある Tile を保存しておく。そして、次に描画する Span が保存してある Tile
459 を参照する場合、新たに DMA 転送を行わずに保存してある Tile を使用する。新たに Tile を参照し且つ領域に 459 を参照する場合、新たに DMA 転送を行わずに保存してある Tile を使用する。新たに Tile を参照し且つ領域に
460 空きが無い場合、 FIFO で Tile の入れ替えを行う。Tile の検索は、テクスチャのアドレスを key とし、 460 空きが無い場合、 FIFO で Tile の入れ替えを行う。Tile の検索は、テクスチャのアドレスを key とし、
461 Tile を value としてハッシュを用いる。 461 Tile を value としてハッシュを用いる。
462 \begin{comment}
463 SPE 上で保存する Tile の数を変化させることによって、Rendering の実行速度がどのように変化するか
464 実験した(\figref{cerium_hash_test})。
465
466 \begin{table}[htb]
467 \begin{center}
468 \caption{SPE 上での Tile 管理数による実行速度比較} \label{tab:cerium_hash_test}
469 \hbox to\hsize{\hfil
470 \begin{tabular}{c|l} \hline \hline
471 Tile 保存数 & 実行速度 (FPS) & \\ \hline
472 \hline
473 1 & &\\ \hline
474 128 & &\\ \hline
475 \end{tabular}\hfil}
476 \end{center}
477 \end{table}
478
479 \figref{cerium_hash_test} より、SPE 上で保存する Tile の数を増やすことによりテクスチャ
480 のヒット率が上昇し、DMA 転送回数が減ることで実行速度が向上するがわかる。
481
482 \end{comment}
483 462
484 \subsection{Texture の縮小} \label{sec:cerium_scale} 463 \subsection{Texture の縮小} \label{sec:cerium_scale}
485 464
486 遠くにあるオブジェクトは小さく描画される。この場合、使用されるテクスチャは原寸大である 465 遠くにあるオブジェクトは小さく描画される。この場合、使用されるテクスチャは原寸大である
487 必要がない。そこで、オリジナルのテクスチャの他に縮小したテクスチャを用意し、描画される 466 必要がない。そこで、オリジナルのテクスチャの他に縮小したテクスチャを用意し、描画される
512 コストを減少させた。さらに Scale によって 描画に用いる Tapestry を変更することで、 491 コストを減少させた。さらに Scale によって 描画に用いる Tapestry を変更することで、
513 1テクスチャの Tile の数を減少させることができる。必要 Tile のヒット率が上昇し、結果 492 1テクスチャの Tile の数を減少させることができる。必要 Tile のヒット率が上昇し、結果
514 転送コストの削減に繋がる。 493 転送コストの削減に繋がる。
515 494
516 この Texture hash の効果を示す。(\tabref{ball_bound})例題として、ball bound を使用した。 495 この Texture hash の効果を示す。(\tabref{ball_bound})例題として、ball bound を使用した。
496 解像度は 1980x1080 である。FPSは一秒あたりの RednderingEngine 全体の処理回数(Frame per Scecond)である。
517 497
518 \begin{table}[!htb] 498 \begin{table}[!htb]
519 \begin{center} 499 \begin{center}
520 \caption{キャッシュの効果(ball bound)} \label{tab:ball_bound} 500 \caption{Effect of cache(ball bound)} \label{tab:ball_bound}
521 \hbox to\hsize{\hfil 501 \hbox to\hsize{\hfil
522 \begin{tabular}{|c|c|c|c|c|} \hline 502 \begin{tabular}{|c|c|c|c|c|} \hline
523 キャッシュ & FPS & DMA転送待ち時間 & mail待ちの割合 & SPE稼働率\\ \hline 503 キャッシュ & FPS & DMA転送待ち時間 & mail待ちの割合 & SPE稼働率\\ \hline
524 なし & 24.6FPS & 5.5\% & 72.4\% & 22.1\% \\ \hline 504 なし & 24.6 & 5.5\% & 72.4\% & 22.1\% \\ \hline
525 あり & 27.2FPS & 1.8\% & 76.2\% & 22.0\% \\ \hline 505 あり & 27.2 & 1.8\% & 76.2\% & 22.0\% \\ \hline
526 \end{tabular}\hfil} 506 \end{tabular}\hfil}
527 \end{center} 507 \end{center}
528 \end{table} 508 \end{table}
529 509
510 DMA転送待ち時間が減り、FPSの向上が見られた。
511
512 続いて 解像度1980x1080の画面いっぱいに一枚の画像を描画する例題である panel で効果を測定した。 panel でのキャッシュの効果を示す(\tabref{cache_panel})
513
514 \begin{table}[!htb]
515 \begin{center}
516 \caption{Effect of cache(panel)} \label{tab:cache_panel}
517 \hbox to\hsize{\hfil
518 \begin{tabular}{|c|c|c|c|c|} \hline
519 キャッシュ & FPS & DMA転送待ち時間 & mail待ちの割合 & SPE稼働率\\ \hline
520 なし & 3.9 & 21.1\% & 13.2\% & 65.9\% \\ \hline
521 あり & 2.9 & 0.5\% & 9.9\% & 89.5\% \\ \hline
522 \end{tabular}\hfil}
523 \end{center}
524 \end{table}
525
526 panel では使用する画像のサイズが大きいために、キャッシュの HIT するまでの時間がかかる。キャッシュの HIT 確認は SPE の稼働率に含まれるため、稼働率が向上している。キャッシュ HIT 時間が、DMA転送待ち時間の削減の効果よりも高いため、FPSが減少した結果になった。このようなケースでは、キャッシュを用いない方が、高いFPSが得られる。ball bound の場合は、小さな画像を用いてるため、キャッシュの効果が見られた。
530 527
531 \subsection{DrawSpanTask} \label{drawspan} 528 \subsection{DrawSpanTask} \label{drawspan}
532 529
533 現在、PlayStation 3 の GPU にアクセスする API は公開されていないため、Cerium では 530 現在、PlayStation 3 の GPU にアクセスする API は公開されていないため、Cerium では
534 Frame Buffer に直接描画する。Frame Buffer のアドレスは mmap() で取得できるため、 Task 531 Frame Buffer に直接描画する。Frame Buffer のアドレスは mmap() で取得できるため、 Task
556 \begin{itemize} 553 \begin{itemize}
557 \item SPEが他のSPEの処理完了を待つ時間 554 \item SPEが他のSPEの処理完了を待つ時間
558 \item バリア同期が完了し、PPE 側で次の Task が作られる時間 555 \item バリア同期が完了し、PPE 側で次の Task が作られる時間
559 \end{itemize} 556 \end{itemize}
560 557
561 この二つの時間の間SPEの処理が止まり、処理性能の低下につながる。この待ち時間を回避するためには、Taskの粒度を下げる、他の SPE の処理完了を待っている SPE に、別の Task を割り当てる、等の方法がある。別の Task を割り当てるには Task の実行をパイプライン化する方法がある。そこで、特に3つの Task の中でも処理の重い DrawSpanTask と、CreatePolygonTask, CreateSpanTask の Task でパイプライン化を行っている。(\figref{rend-dep}) 速度比較の対象として、ball bound を用いる。FPSは一秒あたりの RednderingEngine 全体の処理回数(Frame per Scecond)であり、busy ration はSPEの稼働率である。(\tabref{pipeline_ballbound}) 558 この二つの時間の間SPEの処理が止まり、処理性能の低下につながる。この待ち時間を回避するためには、Taskの粒度を下げる、他の SPE の処理完了を待っている SPE に、別の Task を割り当てる、等の方法がある。別の Task を割り当てるには Task の実行をパイプライン化する方法がある。そこで、特に3つの Task の中でも処理の重い DrawSpanTask と、CreatePolygonTask, CreateSpanTask の Task でパイプライン化を行っている。(\figref{rend-dep}) 速度比較の対象として、レンダリング例題の ball bound と panel を用いる。(\tabref{pipeline_ballbound})(\tabref{pipeline_panel})
562 559
563 \begin{figure}[htb] 560 \begin{figure}[htb]
564 \begin{center} 561 \begin{center}
565 \includegraphics[scale=0.90]{./images/rend-dep.pdf} 562 \includegraphics[scale=0.90]{./images/rend-dep.pdf}
566 \end{center} 563 \end{center}
568 \label{fig:rend-dep} 565 \label{fig:rend-dep}
569 \end{figure} 566 \end{figure}
570 567
571 \begin{table}[!htb] 568 \begin{table}[!htb]
572 \begin{center} 569 \begin{center}
573 \caption{パイプライン化の効果(ball bound)} \label{tab:pipeline_ballbound} 570 \caption{Effect of use pipeline(ball bound)} \label{tab:pipeline_ballbound}
574 \hbox to\hsize{\hfil 571 \hbox to\hsize{\hfil
575 \begin{tabular}{|c|c|c|c|c|} \hline 572 \begin{tabular}{|c|c|c|c|c|} \hline
576 PipeLine & FPS & DMA転送待ち時間 & mail待ちの割合 & SPE稼働率\\ \hline 573 PipeLine & FPS & DMA転送待ち時間 & mail待ちの割合 & SPE稼働率\\ \hline
577 なし & 27.2FPS & 1.8\% & 76.2\% & 22.0\% \\ \hline 574 なし & 27.2 & 1.8\% & 76.2\% & 22.0\% \\ \hline
578 あり & 30.2FPS & 1.8\% & 74.3\% & 23.7\% \\ \hline 575 あり & 30.2 & 1.8\% & 74.3\% & 23.7\% \\ \hline
576 \end{tabular}\hfil}
577 \end{center}
578 \end{table}
579
580 \begin{table}[!htb]
581 \begin{center}
582 \caption{Effect of use pipeline(panel)} \label{tab:pipeline_panel}
583 \hbox to\hsize{\hfil
584 \begin{tabular}{|c|c|c|c|c|} \hline
585 PipeLine & FPS & DMA転送待ち時間 & mail待ちの割合 & SPE稼働率\\ \hline
586 なし & 3.9 & 21.1\% & 13.2\% & 65.9\% \\ \hline
587 あり & 4.0 & 21.3\% & 11.1.\% & 67.6\% \\ \hline
579 \end{tabular}\hfil} 588 \end{tabular}\hfil}
580 \end{center} 589 \end{center}
581 \end{table} 590 \end{table}
582 591
583 パイプライン化した結果(\tabref{pipeline_ballbound})、SPEの稼働率が向上し、FPSも向上した。 592 パイプライン化した結果(\tabref{pipeline_ballbound})、SPEの稼働率が向上し、FPSも向上した。
584 処理性能を維持するには、SPEはなるべく稼働させ続けなければならない。 593 処理性能を維持するには、SPEはなるべく稼働させ続けなければならない。
585 その為には処理をTaskに分割し、並列実行するだけでなく、バリア同期などで、 594 その為には処理をTaskに分割し、並列実行するだけでなく、バリア同期などで、
586 SPEの待ち時間が発生することへ対処しないといけない。 595 SPEの待ち時間が発生することへ対処しないといけない。
587 その対処の一つとしてそれにパイプライン化は有効である。 596 その対処の一つとしてそれにパイプライン化は有効である。
597
598