PEZY-SC2のコア内同期モードにつ...
 
通知
すべてクリア

PEZY-SC2のコア内同期モードについて


金井潤一
(@junichi-kanai)
Active Member
結合: 8年前
投稿: 6
Topic starter  

PEZY-SC2のコア内同期モードを用いてコア内の4スレッドをSIMD的に使いたいのですが、使い方及び動作について質問があります。

  1. コア内同期モードを有効化、無効化する方法
  2. コア内同期モードをSIMD的に用いる場合の、SIMDとの相違点(コア内で分岐が発生した場合の動作など?)

以上について教えていただきたく、よろしくお願いします。


引用
ishikawa
(@ishikawa)
Eminent Member Admin
結合: 9年前
投稿: 21
 

コア内同期モードはアセンブラを用いて記述して頂く必要があります。

例えば以下のようにすると、コア内同期モード、かつ自動chgthreadモードとなります。

__asm__ __volatile__("c.sync.ci 1");

このc.syncの後ろにつく接尾辞でiを指定することでコア内同期モード、cを指定することで自動chgthreadとなります。

なおc.syncの代わりにc.wflushを指定した場合も、このモードは変更されます。

また、ここに記述するsync(あるいはwflush)のレベルは以下に記述したものと同等です。

https://portal.pezy.jp/community/pezy-sc%E6%9C%80%E9%81%A9%E5%8C%96%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A9%E3%83%A0/sync%E3%81%A8flush%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/#post-177

このモードはそれ以外のsyncやflushを記述することで変化します。

例えば

__asm__ __volatile__("c.sync.ci 1");

の後に

flush()

を発行すると、flushは

__asm__ __volatile__("c.wflush 8");

と同等なのですが、これにはcやiの接尾辞がつかないため、モードはもとに戻ります。

もしもモードを維持してflushを行いたい場合には

__asm__ __volatile__("c.wflush.ci 8");

とする必要があります。

 

2.につきましては長くなるので別途返答します。

 

 

 

This post was modified 7年前 by ishikawa

返信引用
ishikawa
(@ishikawa)
Eminent Member Admin
結合: 9年前
投稿: 21
 

コア内同期モードにつきましては

https://portal.pezy.jp/wp-content/uploads/2018/06/pezy_sc2_features_20170116.pdf

のp18以降に記述していますが、基本はパイプラインステージを揃えるだけです。

プログラムカウンタの値そのものを揃えるわけではないので、それぞれのスレッドが勝手に分岐をしても(機能的には)動作をします。

ただしどこかのスレッドがストールを発生した場合には、それに合わせて他のスレッドもストールをするため、性能的には損をすることとなります。


返信引用