注: コマンドの
event_wait_list
引数で ユーザー イベントを指定するキューに入れられたコマンドは、イベント オブジェクトを除く OpenCL オブジェクトを解放する OpenCL API が呼び出される前に、clEnqueue***
待機中のこれらのユーザー イベントのステータスが設定されていることを確認する必要があります 。clSetUserEventStatus
それ以外の場合、動作は未定義です。
キューで待機中のユーザー イベントがある場合、どの OpenCL オブジェクトでも release を呼び出すことはできませんか?
これは奇妙な要件のように思えますか? その目的は何ですか?というか、どうしてですか?
彼らが与える例は次のとおりです。
ev1 = clCreateUserEvent(ctx, NULL);
clEnqueueWriteBuffer(cq, buf1, CL_FALSE, ..., 1, &ev1, NULL);
clEnqueueWriteBuffer(cq, buf2, CL_FALSE,...);
clReleaseMemObject(buf2); // <--- UNDEFINED
clSetUserEventStatus(ev1, CL_COMPLETE);
未定義の動作の原因はどれですか?