さて、私はAppleデベロッパフォーラムで質問しようとしましたが、誰も応答しませんでした。スタックオーバーフローの方が適切だと思いました。ここにあります...
フレームバッファオブジェクトに格納されているピクセルを実行し、非黒と非白のピクセルをカウントするOpenCLカーネルがいくつかあります。以前は私のマシンで正常に動作していましたが、Mac OS Xやdevtoolsを更新すると、問題が発生してストールが発生した可能性があります。
カーネルコードに関連付けられたカーネルオブジェクトはQTウィンドウにアタッチされ、ウィンドウでレンダリングの更新が必要な場合、カーネルコードはn回実行されます。このウィンドウは、最初に作成された後に2回更新されます。つまり、openCLコードのシーケンスによって最初に問題が発生することはありません。ウィンドウを前面に表示すると、別の更新が必要になり、カーネルコードをさらにn回実行しようとします。しかし、それらのn回の途中で、それは失速します。つまり、51回実行する必要がある場合、反復26で停止します。clEnqueueReadBufferを呼び出すと停止するようです。
どうしても必要な場合を除いて、openCLコードを使用する理由については、混乱を招く可能性があるため、詳細は省略します。OpenCLコード自体に焦点を当てたほうがいいと思いました。ここに参照用です:http://dl.dropbox.com/u/10838242/forumsquestion.cpp
gdbのバックトレースは次のとおりです。
#0 0x00007fff8e3a6122 in __psynch_mutexwait ()
#1 0x00007fff8955ad9d in pthread_mutex_lock ()
#2 0x000000010dd3acbd in gldFlushQueue ()
#3 0x000000010bbc193f in IOAccelContextFinishResourceSysMem ()
#4 0x000000010bbcd5b0 in gpumAcquireFenceOnQueue ()
#5 0x000000010dd43fcd in gldCopyBufferDataWithQueue ()
#6 0x00007fff8ffa7e2e in GCC_except_table49 ()
#7 0x00007fff8ffc5f11 in clFinish ()
#8 0x00007fff936800b6 in _dispatch_client_callout ()
#9 0x00007fff93681723 in _dispatch_barrier_sync_f_invoke ()
#10 0x00007fff8ffc5ddb in clFinish ()
#11 0x00007fff8ffc25c2 in clSetEventCallback ()
#12 0x00007fff8ffb86e6 in clEnqueueReadBuffer ()
#13 0x0000000100020a31 in CLHandler::update (this=0x107683e20, tagged=@0x7fff5fbfb960, w=761, h=711) at clhandler.cpp:343
#14 0x000000010002f8c1 in CustomBladesGLWidget::render (this=0x1072b09e0, indexMode=true, offset=135288, numPnts=4416, blobID=25, bladeIdsIntersected=@0x7fff5fbfb960) at customBladesGLWidget.cpp:943
添付ファイルの343行目(上記の太字)は、この呼び出し(関数CLHandler :: update内)に対応しています。
//read data from buffer
status = clEnqueueReadBuffer(cqueue,hitbuffer,CL_TRUE,0,mNumBladeCells * sizeof(float),mBladesHit,0, NULL,&event);
handleError("clEnqueueReadBuffer","",status);
ここで、clEnqueueWriteBufferの最初の呼び出しより下のすべてにコメントを付けると、代わりにその関数呼び出しで停止します。なぜこれが起こるのか分かりません。ミューテックスなどを使おうとしているわけではありません。どんな助けでも大歓迎です。
システム仕様:MacbookPro 8,2、Core i7 2.2 GHz、AMD Radeon HD 6750M、OSX10.8.2。
ありがとう