いつも大変お世話になっております。Satsukiユーザの小池@ASTOMと申します。
PEZY-SC1にてカーネル側からローカルメモリを共有データ領域として使用したく
カーネルのスタックサイズを変化させる方法を試行しております。
①「PEZY-SCプログラミング概要」P.54にあります拡張APIを用いてスタックサイズを
変更しておりますが、以下のようにenqueNDRangeKernelでカーネルを実行投入する前に
スタックサイズ(size)を指定する方法でよろしいでしょうか?
clExtSetPerThreadStackSize(kernel(), size);
kernel.setArg(0, ...)
kernel.setArg(7, ...);
queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(8192), cl::NullRange);
② ①の方法でスタックサイズを小さくした場合、カーネルが正しく動作しない場合があります。
この場合はカーネルでスタックオーバフローしていると解釈してよろしいでしょうか?
スタックオーバーフローを実行時に検知することは可能でしょうか?
ためしにstack_inspector.rbを使用してみましたが、現状では算出された値よりも大きめにスタックサイズを
設定しないと正しく動作しないように見受けられます。
初心者質問で申し訳ございませんがどうぞよろしくお願いいたします。
ASTOM 小池様
大変お世話になっております。PEZY Computingの石川です。
前者の設定方法に関しましては、こちらの設定で問題ありません。
スタックオーバフローを事前に検知することはできませんが、スタックオーバフローが発生した場合にはpzcl.logに該当のエラーメッセージが現れるかと思います。
またスタックサイズにつきましては、このツールでは完全なスタックサイズを予測することはできません。
少なくともここで指定したサイズよりも大きめに取らないと、確実に動作しない、ということが分かります。
しかしながらそれほど大きめに取る必要はないと思います。経験的には数十バイト程度多めに取れば動作すると思います。
PEZY Computing 石川様
いつも大変お世話になっております。ASTOMの小池です。
早速のご回答大変ありがとうございました。
いただいた情報をもとに再度試行してみます。