キャッシュを有効にしてもソースはほとんど変わりません。(有効の仕方はInterFace誌2010年8月号、P121)ただ、ロードは大変なことになってしまいました。というのは、CCRレジスタを操作するプログラムはキャッシュ無効領域に配置する必要があります。具体的には0x3C000000〜です。シリアルダウンローダーを使用しているので、HEWのリンカの出力形式はバイナリを指定しています。すると、ロードモジュールのサイズが520MBを超えてしまいました。これでは何時まで待っても「ファイル送信」が終わりません。
ここからは私の勝手な解釈です(真似はしないでください)。キャッシュを無効にするとき、キャッシュとメモリが不一致なら誤動作を起こすのは理解できます。有効にするときは、キャッシュには何も載ってないので問題はないのでは?
と、勝手に考え、下記のモジュールを他と同じ0x1C000000〜に配置しました。
キャッシュが効いているか否かを判断するのは相当難しいような気がします。表面的には分かるは時間だけです
結果を見る限りキャッシュは有効になっているようです
ただ、悲しい事実も判明しました。キャッシュを有効にするとグラフの立上りは遅れるのですが、それでも桁数を2倍にすると時間は約4倍。桁数を10倍にすると時間は約100倍になります。
今後、Release+最適化、や計算アルゴリズムを変更してチューニングをしてみたかったのですが、それでもやはり、立上りがおそくなるだけで限界は見えています。結局はπを求める計算式を改良するしかないようです
ここからは私の勝手な解釈です(真似はしないでください)。キャッシュを無効にするとき、キャッシュとメモリが不一致なら誤動作を起こすのは理解できます。有効にするときは、キャッシュには何も載ってないので問題はないのでは?
と、勝手に考え、下記のモジュールを他と同じ0x1C000000〜に配置しました。
/**********************************************************************************/ /* Sample for cache.c (SH7262) */ /**********************************************************************************/ #include "iodefine.h" /* Peripheral Header File */ //#pragma section Cache /* Section Name is PCache */ void Cache_Init(void) /* Cache Initialize */ { CCNT.CCR1.LONG = 0x00000909; /* ICI=ICE=OCI=OCE=1 */ if( CCNT.CCR1.LONG ) ; /* Dummy Read */ } /* WT=0 (write back) */
キャッシュが効いているか否かを判断するのは相当難しいような気がします。表面的には分かるは時間だけです
結果を見る限りキャッシュは有効になっているようです
ただ、悲しい事実も判明しました。キャッシュを有効にするとグラフの立上りは遅れるのですが、それでも桁数を2倍にすると時間は約4倍。桁数を10倍にすると時間は約100倍になります。
今後、Release+最適化、や計算アルゴリズムを変更してチューニングをしてみたかったのですが、それでもやはり、立上りがおそくなるだけで限界は見えています。結局はπを求める計算式を改良するしかないようです
コメントをかく