Implemented external memory sample#90
Conversation
nikhiljnv
left a comment
There was a problem hiding this comment.
Large change to review meaningfully:)
Approving based on our successful testing on NVIDIA implementation.
bashbaug
left a comment
There was a problem hiding this comment.
Note: I only reviewed the last commit.
At some point it would be good to update this sample so it worked with other types of external memory as well, e.g. dma_buf file descriptors.
| // We need to get the pointer to the vkGetMemoryFdKHR function because | ||
| // it's from extension VK_KHR_external_memory_fd. | ||
| PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR = | ||
| (PFN_vkGetMemoryFdKHR)vkGetDeviceProcAddr(vk_device, | ||
| "vkGetMemoryFdKHR"); |
There was a problem hiding this comment.
This is the function that is needed for Linux and file descriptors, but a different function is needed for Windows and NT handles. Has this sample been tested on Windows?
There was a problem hiding this comment.
Yes, this sample has been tested on Windows, but we got
Test #31: externalmemory_Release ...........Exit code 0xc0000135
***Exception: 0.01 sec
Test #32: externalmemorycpp_Release ........Exit code 0xc0000135
***Exception: 0.01 sec
In the latest commit, I have added the logic to get the function pointer and call the correct function on Windows, but the runtime fail is still there: https://github.com/StreamHPC/OpenCL-SDK/actions/runs/7216235279/job/19662376992. This runtime error also appears on MacOS, although for now both tests are disabled on CI (macos' here and windows' here).
Given that it works fine in Linux, we assumed this failure could be due to no appropriate Vulkan device present on the failing test machines from CI. Perhaps you have more insights about this?
There was a problem hiding this comment.
I think this is still failing because the handle type needs to be updated for Windows:
(cl_mem_properties)CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_FD_KHR,
#ifdef _WIN32
(cl_mem_properties)handle_y,
#else
(cl_mem_properties)fd_y,
#endifThere was a problem hiding this comment.
I think this still needs to be fixed. Have these samples been tested on Windows?
There was a problem hiding this comment.
Forgot to answer this, sorry. The handle type is allegedly fixed, but the example still fails on Windows. Right now is disabled on CI, but I tested it on my personal fork https://github.com/Beanavil/OpenCL-SDK/actions/runs/9563524333/job/26362215011.
bashbaug
left a comment
There was a problem hiding this comment.
Note: I've left comments on the C++ sample, but many of the issues occur in the C sample also. Thanks!
bf01f67 to
aae074f
Compare
|
There is a merge conflict here that needs to be resolved, also. |
3f900c6 to
5dbeb7b
Compare
|
Addressed the comments and rebased onto StreamHPC/release-cd. There are some test failures from the other tests of the repo, but I think those are due to |
bashbaug
left a comment
There was a problem hiding this comment.
The C sample is fixed and doesn't crash for me anymore, thanks!
I think the Windows sample is still broken, though.
90df63b to
f220052
Compare
f220052 to
7cff095
Compare
7cff095 to
4bf7ad4
Compare
fb99610 to
7101a17
Compare
bashbaug
left a comment
There was a problem hiding this comment.
FYI, here are a few more issues I found.
Note that the sample still does not execute properly on Windows.
7101a17 to
294d0bc
Compare
294d0bc to
1c8c8db
Compare
|
@bashbaug about the Windows crash: unfortunately, I'm only able to run this sample in Windows through the CI and debugging it is rather slow. I checked the error that the sample produced, and it was the |
1c8c8db to
780296c
Compare
|
c91ebd6 to
5ca6f4c
Compare
bashbaug
left a comment
There was a problem hiding this comment.
I'd like to fix the first issue below if possible, but otherwise I think this is ready to go. If we find any additional issues we can fix them after merging.
| cl_device, CL_DEVICE_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR, | ||
| supported_handle_types_count, supported_handle_types, NULL), | ||
| error, err); | ||
| for (size_t i = 0; i < supported_handle_types_count; ++i) |
There was a problem hiding this comment.
supported_handle_types_count is actually the size in bytes rather than a count, so this loop will read off the end of the allocation. There needs to be a divide by cl_external_memory_handle_type_khr somewhere to compute the count.
| if (opencl_version_is_major(&dev_versions[i], 3)) | ||
| { | ||
| strcat(compiler_options, "-cl-std=CL3.0 "); | ||
| } |
There was a problem hiding this comment.
I don't see anything in the external_saxpy.cl kernel that requires OpenCL C 3.0. Am I missing something? If not, we could remove this code block to shorten the sample, and it could run on more devices also (in theory, at least).
There was a problem hiding this comment.
Note, if we remove this code block from the C sample, we should remove it from the C++ sample also.
There was a problem hiding this comment.
Removed! OpenCL 3.0 is certainly only necessary for the external memory extension.
5ca6f4c to
ad13557
Compare
e724350 to
ad13557
Compare
ad13557 to
5f52d0d
Compare
NOTE: this PR includes all commits from branch StreamHPC:release-cd. This is required, because the implemented sample requires additional updates to the CI scripts to pull its new dependencies. After #88 is merged, this should be trivial to rebase/merge. Only the last commit is relevant for the sample, all other commits are from the
release-cdbranch.