Re: [Beignet] [PATCH V2] add sends support for oword/media block write
LGTM! Thanks -Original Message- From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Guo, Yejun Sent: Wednesday, December 28, 2016 3:18 PM To: beignet@lists.freedesktop.org Cc: Guo, YejunSubject: [Beignet] [PATCH V2] add sends support for oword/media block write v2: should also change the virtual function prototype for gen7 Signed-off-by: Guo, Yejun --- backend/src/backend/gen7_encoder.cpp | 2 +- backend/src/backend/gen7_encoder.hpp | 2 +- backend/src/backend/gen9_encoder.cpp | 57 ++ backend/src/backend/gen9_encoder.hpp | 2 ++ backend/src/backend/gen_context.cpp| 6 ++-- backend/src/backend/gen_encoder.cpp| 4 +-- backend/src/backend/gen_encoder.hpp| 4 +-- backend/src/backend/gen_insn_selection.cpp | 54 +--- 8 files changed, 111 insertions(+), 20 deletions(-) diff --git a/backend/src/backend/gen7_encoder.cpp b/backend/src/backend/gen7_encoder.cpp index 4f35491..4b2cd9a 100644 --- a/backend/src/backend/gen7_encoder.cpp +++ b/backend/src/backend/gen7_encoder.cpp @@ -280,7 +280,7 @@ namespace gbe response_length); } - void Gen7Encoder::MBWRITE(GenRegister header, uint32_t bti, uint32_t size) { + void Gen7Encoder::MBWRITE(GenRegister header, GenRegister data, + uint32_t bti, uint32_t size, bool useSends) { GenNativeInstruction *insn = this->next(GEN_OPCODE_SEND); const uint32_t msg_length = 1 + size; const uint32_t response_length = 0; // Size of registers diff --git a/backend/src/backend/gen7_encoder.hpp b/backend/src/backend/gen7_encoder.hpp index edb711d..7585b34 100644 --- a/backend/src/backend/gen7_encoder.hpp +++ b/backend/src/backend/gen7_encoder.hpp @@ -45,7 +45,7 @@ namespace gbe /*! MBlock read */ virtual void MBREAD(GenRegister dst, GenRegister header, uint32_t bti, uint32_t elemSize); /*! MBlock write */ -virtual void MBWRITE(GenRegister header, uint32_t bti, uint32_t elemSize); +virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t + bti, uint32_t elemSize, bool useSends); }; } #endif /* __GBE_GEN7_ENCODER_HPP__ */ diff --git a/backend/src/backend/gen9_encoder.cpp b/backend/src/backend/gen9_encoder.cpp index 940809b..b37fd98 100644 --- a/backend/src/backend/gen9_encoder.cpp +++ b/backend/src/backend/gen9_encoder.cpp @@ -244,4 +244,61 @@ namespace gbe gen9_insn->bits2.sends.sel_reg32_desc = 1; } } + + void Gen9Encoder::OBWRITE(GenRegister header, GenRegister data, + uint32_t bti, uint32_t ow_size, bool useSends) { +if (!useSends) + Gen8Encoder::OBWRITE(header, data, bti, ow_size, false); +else { + GBE_ASSERT(data.reg() != header.reg()); + GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS); + Gen9NativeInstruction *gen9_insn = >gen9_insn; + + this->setHeader(insn); + insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA; + + setSendsOperands(gen9_insn, GenRegister::null(), header, data); + + uint32_t dataRegs = ow_size / 2; + // half reg should also have size 1 + if (dataRegs == 0) +dataRegs = 1; + gen9_insn->bits2.sends.src1_length = dataRegs; + + const uint32_t block_size = getOBlockSize(ow_size); + const uint32_t msg_length = 1; + const uint32_t response_length = 0; + setOBlockRW(insn, +bti, +block_size, +GEN7_OBLOCK_WRITE, +msg_length, +response_length); +} + } + + void Gen9Encoder::MBWRITE(GenRegister header, GenRegister data, + uint32_t bti, uint32_t data_size, bool useSends) { +if (!useSends) + Gen8Encoder::MBWRITE(header, data, bti, data_size, false); +else { + GBE_ASSERT(data.reg() != header.reg()); + GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS); + Gen9NativeInstruction *gen9_insn = >gen9_insn; + + this->setHeader(insn); + insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA; + + setSendsOperands(gen9_insn, GenRegister::null(), header, data); + gen9_insn->bits2.sends.src1_length = data_size; + + const uint32_t msg_length = 1; + const uint32_t response_length = 0; + setMBlockRW(insn, +bti, +GEN75_P1_MEDIA_TYPED_BWRITE, +msg_length, +response_length); +} + } } /* End of the name space. */ diff --git a/backend/src/backend/gen9_encoder.hpp b/backend/src/backend/gen9_encoder.hpp index d754d59..2eaa538 100644 --- a/backend/src/backend/gen9_encoder.hpp +++ b/backend/src/backend/gen9_encoder.hpp @@ -54,6 +54,8 @@ namespace gbe virtual void BYTE_SCATTER(GenRegister addr, GenRegister data, GenRegister bti, uint32_t elemSize, bool useSends); virtual unsigned setByteScatterSendsMessageDesc(GenNativeInstruction *insn, unsigned bti, unsigned elemSize); virtual
[Beignet] [PATCH V2] add sends support for oword/media block write
v2: should also change the virtual function prototype for gen7 Signed-off-by: Guo, Yejun--- backend/src/backend/gen7_encoder.cpp | 2 +- backend/src/backend/gen7_encoder.hpp | 2 +- backend/src/backend/gen9_encoder.cpp | 57 ++ backend/src/backend/gen9_encoder.hpp | 2 ++ backend/src/backend/gen_context.cpp| 6 ++-- backend/src/backend/gen_encoder.cpp| 4 +-- backend/src/backend/gen_encoder.hpp| 4 +-- backend/src/backend/gen_insn_selection.cpp | 54 +--- 8 files changed, 111 insertions(+), 20 deletions(-) diff --git a/backend/src/backend/gen7_encoder.cpp b/backend/src/backend/gen7_encoder.cpp index 4f35491..4b2cd9a 100644 --- a/backend/src/backend/gen7_encoder.cpp +++ b/backend/src/backend/gen7_encoder.cpp @@ -280,7 +280,7 @@ namespace gbe response_length); } - void Gen7Encoder::MBWRITE(GenRegister header, uint32_t bti, uint32_t size) { + void Gen7Encoder::MBWRITE(GenRegister header, GenRegister data, uint32_t bti, uint32_t size, bool useSends) { GenNativeInstruction *insn = this->next(GEN_OPCODE_SEND); const uint32_t msg_length = 1 + size; const uint32_t response_length = 0; // Size of registers diff --git a/backend/src/backend/gen7_encoder.hpp b/backend/src/backend/gen7_encoder.hpp index edb711d..7585b34 100644 --- a/backend/src/backend/gen7_encoder.hpp +++ b/backend/src/backend/gen7_encoder.hpp @@ -45,7 +45,7 @@ namespace gbe /*! MBlock read */ virtual void MBREAD(GenRegister dst, GenRegister header, uint32_t bti, uint32_t elemSize); /*! MBlock write */ -virtual void MBWRITE(GenRegister header, uint32_t bti, uint32_t elemSize); +virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t bti, uint32_t elemSize, bool useSends); }; } #endif /* __GBE_GEN7_ENCODER_HPP__ */ diff --git a/backend/src/backend/gen9_encoder.cpp b/backend/src/backend/gen9_encoder.cpp index 940809b..b37fd98 100644 --- a/backend/src/backend/gen9_encoder.cpp +++ b/backend/src/backend/gen9_encoder.cpp @@ -244,4 +244,61 @@ namespace gbe gen9_insn->bits2.sends.sel_reg32_desc = 1; } } + + void Gen9Encoder::OBWRITE(GenRegister header, GenRegister data, uint32_t bti, uint32_t ow_size, bool useSends) + { +if (!useSends) + Gen8Encoder::OBWRITE(header, data, bti, ow_size, false); +else { + GBE_ASSERT(data.reg() != header.reg()); + GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS); + Gen9NativeInstruction *gen9_insn = >gen9_insn; + + this->setHeader(insn); + insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA; + + setSendsOperands(gen9_insn, GenRegister::null(), header, data); + + uint32_t dataRegs = ow_size / 2; + // half reg should also have size 1 + if (dataRegs == 0) +dataRegs = 1; + gen9_insn->bits2.sends.src1_length = dataRegs; + + const uint32_t block_size = getOBlockSize(ow_size); + const uint32_t msg_length = 1; + const uint32_t response_length = 0; + setOBlockRW(insn, +bti, +block_size, +GEN7_OBLOCK_WRITE, +msg_length, +response_length); +} + } + + void Gen9Encoder::MBWRITE(GenRegister header, GenRegister data, uint32_t bti, uint32_t data_size, bool useSends) + { +if (!useSends) + Gen8Encoder::MBWRITE(header, data, bti, data_size, false); +else { + GBE_ASSERT(data.reg() != header.reg()); + GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS); + Gen9NativeInstruction *gen9_insn = >gen9_insn; + + this->setHeader(insn); + insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA; + + setSendsOperands(gen9_insn, GenRegister::null(), header, data); + gen9_insn->bits2.sends.src1_length = data_size; + + const uint32_t msg_length = 1; + const uint32_t response_length = 0; + setMBlockRW(insn, +bti, +GEN75_P1_MEDIA_TYPED_BWRITE, +msg_length, +response_length); +} + } } /* End of the name space. */ diff --git a/backend/src/backend/gen9_encoder.hpp b/backend/src/backend/gen9_encoder.hpp index d754d59..2eaa538 100644 --- a/backend/src/backend/gen9_encoder.hpp +++ b/backend/src/backend/gen9_encoder.hpp @@ -54,6 +54,8 @@ namespace gbe virtual void BYTE_SCATTER(GenRegister addr, GenRegister data, GenRegister bti, uint32_t elemSize, bool useSends); virtual unsigned setByteScatterSendsMessageDesc(GenNativeInstruction *insn, unsigned bti, unsigned elemSize); virtual void ATOMIC(GenRegister dst, uint32_t function, GenRegister addr, GenRegister data, GenRegister bti, uint32_t srcNum, bool useSends); +virtual void OBWRITE(GenRegister header, GenRegister data, uint32_t bti, uint32_t ow_size, bool useSends); +virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t
Re: [Beignet] [PATCH V2] output more detail of GEN IR for workgroup op
LGTM! -Original Message- From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Guo, Yejun Sent: Wednesday, December 21, 2016 6:33 PM To: beignet@lists.freedesktop.org Cc: Guo, YejunSubject: [Beignet] [PATCH V2] output more detail of GEN IR for workgroup op v2: the src number changes for different ops Signed-off-by: Guo, Yejun --- backend/src/ir/instruction.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/src/ir/instruction.cpp b/backend/src/ir/instruction.cpp index 0687dbf..f0c3957 100644 --- a/backend/src/ir/instruction.cpp +++ b/backend/src/ir/instruction.cpp @@ -1917,7 +1917,8 @@ namespace ir { } out << " %" << this->getDst(fn, 0); - out << " %" << this->getSrc(fn, 0); + for (uint32_t i = 0; i < this->getSrcNum(); ++i) +out << " %" << this->getSrc(fn, i); if (this->workGroupOp == WORKGROUP_OP_BROADCAST) { do { @@ -1942,7 +1943,7 @@ namespace ir { } while(0); } - out << "TheadID Map at SLM: " << this->slmAddr; + out << " (TheadID Map at SLM: " << this->slmAddr << ")"; } INLINE void SubGroupInstruction::out(std::ostream , const Function ) const { -- 1.9.1 ___ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet ___ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet
Re: [Beignet] [PATCH] add sends support for oword/media block write
nice catch, will send v2, thanks. -Original Message- From: Pan, Xiuli Sent: Wednesday, December 28, 2016 2:04 PM To: Guo, Yejun; beignet@lists.freedesktop.org Cc: Guo, Yejun Subject: RE: [Beignet] [PATCH] add sends support for oword/media block write It seems you missed the gen7_encoder part for the media block write, gen7 has a different data port and the virtual function for MBWRITE should also be changed for Gen7Encoder. Others LGTM. -Original Message- From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Guo, Yejun Sent: Monday, December 19, 2016 6:13 PM To: beignet@lists.freedesktop.org Cc: Guo, YejunSubject: [Beignet] [PATCH] add sends support for oword/media block write Signed-off-by: Guo, Yejun --- backend/src/backend/gen9_encoder.cpp | 57 ++ backend/src/backend/gen9_encoder.hpp | 2 ++ backend/src/backend/gen_context.cpp| 6 ++-- backend/src/backend/gen_encoder.cpp| 4 +-- backend/src/backend/gen_encoder.hpp| 4 +-- backend/src/backend/gen_insn_selection.cpp | 54 +--- 6 files changed, 109 insertions(+), 18 deletions(-) diff --git a/backend/src/backend/gen9_encoder.cpp b/backend/src/backend/gen9_encoder.cpp index 940809b..b37fd98 100644 --- a/backend/src/backend/gen9_encoder.cpp +++ b/backend/src/backend/gen9_encoder.cpp @@ -244,4 +244,61 @@ namespace gbe gen9_insn->bits2.sends.sel_reg32_desc = 1; } } + + void Gen9Encoder::OBWRITE(GenRegister header, GenRegister data, + uint32_t bti, uint32_t ow_size, bool useSends) { +if (!useSends) + Gen8Encoder::OBWRITE(header, data, bti, ow_size, false); +else { + GBE_ASSERT(data.reg() != header.reg()); + GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS); + Gen9NativeInstruction *gen9_insn = >gen9_insn; + + this->setHeader(insn); + insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA; + + setSendsOperands(gen9_insn, GenRegister::null(), header, data); + + uint32_t dataRegs = ow_size / 2; + // half reg should also have size 1 + if (dataRegs == 0) +dataRegs = 1; + gen9_insn->bits2.sends.src1_length = dataRegs; + + const uint32_t block_size = getOBlockSize(ow_size); + const uint32_t msg_length = 1; + const uint32_t response_length = 0; + setOBlockRW(insn, +bti, +block_size, +GEN7_OBLOCK_WRITE, +msg_length, +response_length); +} + } + + void Gen9Encoder::MBWRITE(GenRegister header, GenRegister data, + uint32_t bti, uint32_t data_size, bool useSends) { +if (!useSends) + Gen8Encoder::MBWRITE(header, data, bti, data_size, false); +else { + GBE_ASSERT(data.reg() != header.reg()); + GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS); + Gen9NativeInstruction *gen9_insn = >gen9_insn; + + this->setHeader(insn); + insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA; + + setSendsOperands(gen9_insn, GenRegister::null(), header, data); + gen9_insn->bits2.sends.src1_length = data_size; + + const uint32_t msg_length = 1; + const uint32_t response_length = 0; + setMBlockRW(insn, +bti, +GEN75_P1_MEDIA_TYPED_BWRITE, +msg_length, +response_length); +} + } } /* End of the name space. */ diff --git a/backend/src/backend/gen9_encoder.hpp b/backend/src/backend/gen9_encoder.hpp index d754d59..2eaa538 100644 --- a/backend/src/backend/gen9_encoder.hpp +++ b/backend/src/backend/gen9_encoder.hpp @@ -54,6 +54,8 @@ namespace gbe virtual void BYTE_SCATTER(GenRegister addr, GenRegister data, GenRegister bti, uint32_t elemSize, bool useSends); virtual unsigned setByteScatterSendsMessageDesc(GenNativeInstruction *insn, unsigned bti, unsigned elemSize); virtual void ATOMIC(GenRegister dst, uint32_t function, GenRegister addr, GenRegister data, GenRegister bti, uint32_t srcNum, bool useSends); +virtual void OBWRITE(GenRegister header, GenRegister data, uint32_t bti, uint32_t ow_size, bool useSends); +virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t + bti, uint32_t data_size, bool useSends); }; } #endif /* __GBE_GEN9_ENCODER_HPP__ */ diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp index 10e2c9e..5f60ff3 100644 --- a/backend/src/backend/gen_context.cpp +++ b/backend/src/backend/gen_context.cpp @@ -3569,13 +3569,14 @@ namespace gbe void GenContext::emitOBWriteInstruction(const SelectionInstruction ) { const GenRegister header = ra->genReg(insn.src(0)); +const GenRegister data = ra->genReg(insn.src(1)); const uint32_t bti = insn.getbti(); const uint32_t ow_size = insn.extra.elem; bool isA64 = bti == 255; if (isA64) p->OBWRITEA64(header,
Re: [Beignet] [PATCH] add sends support for oword/media block write
It seems you missed the gen7_encoder part for the media block write, gen7 has a different data port and the virtual function for MBWRITE should also be changed for Gen7Encoder. Others LGTM. -Original Message- From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Guo, Yejun Sent: Monday, December 19, 2016 6:13 PM To: beignet@lists.freedesktop.org Cc: Guo, YejunSubject: [Beignet] [PATCH] add sends support for oword/media block write Signed-off-by: Guo, Yejun --- backend/src/backend/gen9_encoder.cpp | 57 ++ backend/src/backend/gen9_encoder.hpp | 2 ++ backend/src/backend/gen_context.cpp| 6 ++-- backend/src/backend/gen_encoder.cpp| 4 +-- backend/src/backend/gen_encoder.hpp| 4 +-- backend/src/backend/gen_insn_selection.cpp | 54 +--- 6 files changed, 109 insertions(+), 18 deletions(-) diff --git a/backend/src/backend/gen9_encoder.cpp b/backend/src/backend/gen9_encoder.cpp index 940809b..b37fd98 100644 --- a/backend/src/backend/gen9_encoder.cpp +++ b/backend/src/backend/gen9_encoder.cpp @@ -244,4 +244,61 @@ namespace gbe gen9_insn->bits2.sends.sel_reg32_desc = 1; } } + + void Gen9Encoder::OBWRITE(GenRegister header, GenRegister data, + uint32_t bti, uint32_t ow_size, bool useSends) { +if (!useSends) + Gen8Encoder::OBWRITE(header, data, bti, ow_size, false); +else { + GBE_ASSERT(data.reg() != header.reg()); + GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS); + Gen9NativeInstruction *gen9_insn = >gen9_insn; + + this->setHeader(insn); + insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA; + + setSendsOperands(gen9_insn, GenRegister::null(), header, data); + + uint32_t dataRegs = ow_size / 2; + // half reg should also have size 1 + if (dataRegs == 0) +dataRegs = 1; + gen9_insn->bits2.sends.src1_length = dataRegs; + + const uint32_t block_size = getOBlockSize(ow_size); + const uint32_t msg_length = 1; + const uint32_t response_length = 0; + setOBlockRW(insn, +bti, +block_size, +GEN7_OBLOCK_WRITE, +msg_length, +response_length); +} + } + + void Gen9Encoder::MBWRITE(GenRegister header, GenRegister data, + uint32_t bti, uint32_t data_size, bool useSends) { +if (!useSends) + Gen8Encoder::MBWRITE(header, data, bti, data_size, false); +else { + GBE_ASSERT(data.reg() != header.reg()); + GenNativeInstruction *insn = this->next(GEN_OPCODE_SENDS); + Gen9NativeInstruction *gen9_insn = >gen9_insn; + + this->setHeader(insn); + insn->header.destreg_or_condmod = GEN_SFID_DATAPORT_DATA; + + setSendsOperands(gen9_insn, GenRegister::null(), header, data); + gen9_insn->bits2.sends.src1_length = data_size; + + const uint32_t msg_length = 1; + const uint32_t response_length = 0; + setMBlockRW(insn, +bti, +GEN75_P1_MEDIA_TYPED_BWRITE, +msg_length, +response_length); +} + } } /* End of the name space. */ diff --git a/backend/src/backend/gen9_encoder.hpp b/backend/src/backend/gen9_encoder.hpp index d754d59..2eaa538 100644 --- a/backend/src/backend/gen9_encoder.hpp +++ b/backend/src/backend/gen9_encoder.hpp @@ -54,6 +54,8 @@ namespace gbe virtual void BYTE_SCATTER(GenRegister addr, GenRegister data, GenRegister bti, uint32_t elemSize, bool useSends); virtual unsigned setByteScatterSendsMessageDesc(GenNativeInstruction *insn, unsigned bti, unsigned elemSize); virtual void ATOMIC(GenRegister dst, uint32_t function, GenRegister addr, GenRegister data, GenRegister bti, uint32_t srcNum, bool useSends); +virtual void OBWRITE(GenRegister header, GenRegister data, uint32_t bti, uint32_t ow_size, bool useSends); +virtual void MBWRITE(GenRegister header, GenRegister data, uint32_t + bti, uint32_t data_size, bool useSends); }; } #endif /* __GBE_GEN9_ENCODER_HPP__ */ diff --git a/backend/src/backend/gen_context.cpp b/backend/src/backend/gen_context.cpp index 10e2c9e..5f60ff3 100644 --- a/backend/src/backend/gen_context.cpp +++ b/backend/src/backend/gen_context.cpp @@ -3569,13 +3569,14 @@ namespace gbe void GenContext::emitOBWriteInstruction(const SelectionInstruction ) { const GenRegister header = ra->genReg(insn.src(0)); +const GenRegister data = ra->genReg(insn.src(1)); const uint32_t bti = insn.getbti(); const uint32_t ow_size = insn.extra.elem; bool isA64 = bti == 255; if (isA64) p->OBWRITEA64(header, bti, ow_size); else - p->OBWRITE(header, bti, ow_size); + p->OBWRITE(header, data, bti, ow_size, insn.extra.splitSend); } void GenContext::emitMBReadInstruction(const SelectionInstruction ) { @@ -3587,8 +3588,9 @@ namespace gbe
[Beignet] [PATCH] Improve event execute function.
From: Junyan HeModify the event exec function, make it as the uniformal entry for all event command execution. This will help the timestamp record and profiling feature a lot. V2: 1. Set event init state to bigger than CL_QUEUED. Event state should be set to CL_QUEUED exactly when it is to be queued. Profiling feature make this requirement clearer. We need to record the timestamp exactly when it it to be queued. So we need to add a additional state beyond CL_QUEUED. 2. Fix cl_event_update_timestamp_gen bugi, the CL_SUMITTED time may be less. GPU may record the timestamp of CL_RUNNING before CPU record timestamp of CL_SUMITTED. It is a async process and it is hard for us to control. According to SPEC, we need to record timestamp after some state is done. We can just now set CL_SUMITTED to CL_RUNNING timestamp if the CL_SUBMITTED timestamp is the bigger one. Signed-off-by: Junyan He --- src/cl_api_kernel.c| 26 ++ src/cl_api_mem.c | 190 - src/cl_command_queue_enqueue.c | 14 ++- src/cl_event.c | 94 +++- src/cl_event.h | 6 +- 5 files changed, 144 insertions(+), 186 deletions(-) diff --git a/src/cl_api_kernel.c b/src/cl_api_kernel.c index 723152f..c7d7331 100644 --- a/src/cl_api_kernel.c +++ b/src/cl_api_kernel.c @@ -226,13 +226,11 @@ clEnqueueNDRangeKernel(cl_command_queue command_queue, if (event_status < CL_COMPLETE) { // Error happend, cancel. err = CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST; break; -} else if (event_status == CL_COMPLETE) { - err = cl_enqueue_handle(>exec_data, CL_SUBMITTED); - if (err != CL_SUCCESS) { -break; - } +} - e->status = CL_SUBMITTED; +err = cl_event_exec(e, (event_status == CL_COMPLETE ? CL_SUBMITTED : CL_QUEUED), CL_FALSE); +if (err != CL_SUCCESS) { + break; } cl_command_queue_enqueue_event(command_queue, e); @@ -349,19 +347,13 @@ clEnqueueNativeKernel(cl_command_queue command_queue, new_mem_list = NULL; new_args_mem_loc = NULL; // Event delete will free them. -if (e_status == CL_COMPLETE) { - // Sync mode, no need to queue event. - err = cl_enqueue_handle(data, CL_COMPLETE); - if (err != CL_SUCCESS) { -assert(err < 0); -e->status = err; -break; - } +err = cl_event_exec(e, (e_status == CL_COMPLETE ? CL_COMPLETE : CL_QUEUED), CL_FALSE); +if (err != CL_SUCCESS) { + break; +} - e->status = CL_COMPLETE; // Just set the status, no notify. No one depend on us now. -} else { +if (e_status != CL_COMPLETE) cl_command_queue_enqueue_event(command_queue, e); -} } while (0); if (err != CL_SUCCESS) { diff --git a/src/cl_api_mem.c b/src/cl_api_mem.c index de18684..09f9a14 100644 --- a/src/cl_api_mem.c +++ b/src/cl_api_mem.c @@ -107,7 +107,7 @@ clGetMemObjectInfo(cl_mem memobj, } else if (memobj->type == CL_MEM_IMAGE_TYPE) { parent = memobj; } else if (memobj->type == CL_MEM_BUFFER1D_IMAGE_TYPE) { - struct _cl_mem_buffer1d_image* image_buffer = (struct _cl_mem_buffer1d_image*)memobj; + struct _cl_mem_buffer1d_image *image_buffer = (struct _cl_mem_buffer1d_image *)memobj; parent = image_buffer->descbuffer; } else parent = NULL; @@ -309,31 +309,21 @@ clEnqueueMapBuffer(cl_command_queue command_queue, if (e_status == CL_COMPLETE) { // Sync mode, no need to queue event. - err = cl_enqueue_handle(data, CL_COMPLETE); + err = cl_event_exec(e, CL_COMPLETE, CL_FALSE); if (err != CL_SUCCESS) { -assert(err < 0); -e->status = err; break; } - - ptr = data->ptr; - e->status = CL_COMPLETE; // Just set the status, no notify. No one depend on us now. - cl_event_update_timestamp(e, CL_QUEUED, CL_COMPLETE); } else { - err = cl_enqueue_handle(data, CL_SUBMITTED); // Submit to get the address. + err = cl_event_exec(e, CL_SUBMITTED, CL_TRUE); // Submit to get the address. if (err != CL_SUCCESS) { -assert(err < 0); -e->status = err; break; } - e->status = CL_SUBMITTED; - ptr = data->ptr; - assert(ptr); - cl_command_queue_enqueue_event(command_queue, e); } +ptr = data->ptr; +assert(ptr); err = cl_mem_record_map_mem(buffer, ptr, _ptr, offset, size, NULL, NULL); assert(err == CL_SUCCESS); } while (0); @@ -403,16 +393,15 @@ clEnqueueUnmapMemObject(cl_command_queue command_queue, data->ptr = mapped_ptr; if (e_status == CL_COMPLETE) { // No need to wait - err = cl_enqueue_handle(data, CL_COMPLETE); + err = cl_event_exec(e, CL_COMPLETE, CL_FALSE); if (err != CL_SUCCESS) { -assert(err < 0); -e->status = err; break; } - - e->status = CL_COMPLETE; -
Re: [Beignet] Proposed patch: add CMake option for toggling OCL ICD Loader compatibility
You can use `git send-email --to beignet@lists.freedesktop.org [patch file]` to send the patch directly. > -Original Message- > From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of > Pan, Xiuli > Sent: Tuesday, December 27, 2016 16:30 > To: Marek Szuba; > beignet@lists.freedesktop.org > Subject: Re: [Beignet] Proposed patch: add CMake option for toggling OCL > ICD Loader compatibility > > It seems the mail list could not see this mail's attachment, could you try > with > git send-email to send the patch directly? > > Thanks > Xiuli > > -Original Message- > From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of > Marek Szuba > Sent: Thursday, December 1, 2016 8:24 PM > To: beignet@lists.freedesktop.org > Subject: [Beignet] Proposed patch: add CMake option for toggling OCL ICD > Loader compatibility > > Hello, > > As suggested in https://bugs.freedesktop.org/show_bug.cgi?id=98885 , here > is a Git-friendly patch which makes CMake looking for OCL ICD header files > depend on a new configuration option, so that the loader compatibility mode > can be explicitly disabled. > > All the best, > -- > MS > ___ > Beignet mailing list > Beignet@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/beignet ___ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet
Re: [Beignet] Proposed patch: add CMake option for toggling OCL ICD Loader compatibility
It seems the mail list could not see this mail's attachment, could you try with git send-email to send the patch directly? Thanks Xiuli -Original Message- From: Beignet [mailto:beignet-boun...@lists.freedesktop.org] On Behalf Of Marek Szuba Sent: Thursday, December 1, 2016 8:24 PM To: beignet@lists.freedesktop.org Subject: [Beignet] Proposed patch: add CMake option for toggling OCL ICD Loader compatibility Hello, As suggested in https://bugs.freedesktop.org/show_bug.cgi?id=98885 , here is a Git-friendly patch which makes CMake looking for OCL ICD header files depend on a new configuration option, so that the loader compatibility mode can be explicitly disabled. All the best, -- MS ___ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet
[Beignet] Fwd: Proposed patch: add CMake option for toggling OCL ICD Loader compatibility
Trying again, according to Comment #4 in the bug the patch has not been delivered. Forwarded Message Subject: Proposed patch: add CMake option for toggling OCL ICD Loader compatibility Date: Thu, 1 Dec 2016 13:24:09 +0100 From: Marek SzubaTo: beignet@lists.freedesktop.org Hello, As suggested in https://bugs.freedesktop.org/show_bug.cgi?id=98885 , here is a Git-friendly patch which makes CMake looking for OCL ICD header files depend on a new configuration option, so that the loader compatibility mode can be explicitly disabled. All the best, -- MS From 011609930c09995b13d89bb3f9249f1197fe28c7 Mon Sep 17 00:00:00 2001 From: Marek Szuba Date: Thu, 1 Dec 2016 13:15:11 +0100 Subject: [PATCH] Add a CMake option for toggling OCL ICD Loader compatibility The new option allows anyone wishing to do so to explicitly disable OCL ICD Loader support in Beignet, regardless of the presence or absence of OCL ICD header files. This is particularly useful for people building Beignet packages for distributions, as it avoids creating an implicit dependency on the state of the build host. The new option defaults to ON so the default behaviour of CMake configuration remains unchanged. See also: https://bugs.freedesktop.org/show_bug.cgi?id=98885 --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 713cfa9..09b5734 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,6 +221,8 @@ IF(ENABLE_GL_SHARING) ENDIF(EGL_FOUND) ENDIF(ENABLE_GL_SHARING) +OPTION(OCLICD_COMPAT "OCL ICD compatibility mode" ON) +IF(OCLICD_COMPAT) Find_Package(OCLIcd) IF(OCLIcd_FOUND) MESSAGE(STATUS "Looking for OCL ICD header file - found") @@ -232,6 +234,7 @@ IF(OCLIcd_FOUND) ELSE(OCLIcd_FOUND) MESSAGE(STATUS "Looking for OCL ICD header file - not found") ENDIF(OCLIcd_FOUND) +ENDIF(OCLICD_COMPAT) Find_Package(PythonInterp) -- 2.7.3 ___ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet
[Beignet] Proposed patch: add CMake option for toggling OCL ICD Loader compatibility
Hello, As suggested in https://bugs.freedesktop.org/show_bug.cgi?id=98885 , here is a Git-friendly patch which makes CMake looking for OCL ICD header files depend on a new configuration option, so that the loader compatibility mode can be explicitly disabled. All the best, -- MS From 011609930c09995b13d89bb3f9249f1197fe28c7 Mon Sep 17 00:00:00 2001 From: Marek SzubaDate: Thu, 1 Dec 2016 13:15:11 +0100 Subject: [PATCH] Add a CMake option for toggling OCL ICD Loader compatibility The new option allows anyone wishing to do so to explicitly disable OCL ICD Loader support in Beignet, regardless of the presence or absence of OCL ICD header files. This is particularly useful for people building Beignet packages for distributions, as it avoids creating an implicit dependency on the state of the build host. The new option defaults to ON so the default behaviour of CMake configuration remains unchanged. See also: https://bugs.freedesktop.org/show_bug.cgi?id=98885 --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 713cfa9..09b5734 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -221,6 +221,8 @@ IF(ENABLE_GL_SHARING) ENDIF(EGL_FOUND) ENDIF(ENABLE_GL_SHARING) +OPTION(OCLICD_COMPAT "OCL ICD compatibility mode" ON) +IF(OCLICD_COMPAT) Find_Package(OCLIcd) IF(OCLIcd_FOUND) MESSAGE(STATUS "Looking for OCL ICD header file - found") @@ -232,6 +234,7 @@ IF(OCLIcd_FOUND) ELSE(OCLIcd_FOUND) MESSAGE(STATUS "Looking for OCL ICD header file - not found") ENDIF(OCLIcd_FOUND) +ENDIF(OCLICD_COMPAT) Find_Package(PythonInterp) -- 2.7.3 signature.asc Description: OpenPGP digital signature ___ Beignet mailing list Beignet@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/beignet