Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds AppVayor CI and fixes some bugs in tests.
2a69955 is the most interesting bug-fix.
clEnqueueWriteBufferis not "100% blocking". OpenCL specification only promises that forclEnqueueWriteBuffer:Which means that blocking
clEnqueueWriteBuffercan return after it copies memory pointer byptrto some temporary memory (on host), and it doesn't have to wait for the write to the buffer to be completed. (To be honest OpenCL specification is not 100% clear about that.) Anyway, in case of the Intel implementation for CPU,clEnqueueWriteBufferdoes not wait for the data to be written into the buffer. Every other platform waits (AMD, NVIDIA, pocl), but the fact is that Intel implementation is in line with the specification. (See also https://software.intel.com/en-us/forums/opencl/topic/731519.)That caused random errors when writing and reading using
[]operator, because each call of[]operator creates it's own temporary command queue (so calls were not ordered). Long story short: It was possible to dovector[0] = 3;and right after thatvector[0] == 3could befalse.