Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ocl: speedup host-memory allocation on GH200 #846

Merged
merged 1 commit into from
Sep 13, 2024
Merged

ocl: speedup host-memory allocation on GH200 #846

merged 1 commit into from
Sep 13, 2024

Conversation

hfp
Copy link
Member

@hfp hfp commented Sep 13, 2024

No description provided.

@hfp
Copy link
Member Author

hfp commented Sep 13, 2024

This change reduces the duration to allocate a single buffer by approximately 3.5s (tested on GH200 system). No other system has ever shown such high allocation cost for this particular implementation of c_dbcsr_acc_host_mem_allocate.

@hfp hfp merged commit cef934d into cp2k:develop Sep 13, 2024
22 checks passed
@alazzaro
Copy link
Member

out of curiosity, is this something related to #841 ?
I'm checking an idea on how to make the memory pool more effective by introducing a configuration parameter to set a "minimal" allocation size. I will also add some statistics on memory allocations, although we can check the size of the buffers via the MPI size messages...

@hfp
Copy link
Member Author

hfp commented Sep 13, 2024

out of curiosity, is this something related to #841 ? I'm checking an idea on how to make the memory pool more effective by introducing a configuration parameter to set a "minimal" allocation size. I will also add some statistics on memory allocations, although we can check the size of the buffers via the MPI size messages...

This is not directly related (or I did not try to address #841), and I think #841 used the CUDA-based implementation. I have yet to try my reproducer (acc_bench_smm) on an Alps-like node using the CUDA backend (I will report back). It's possible the CUDA based host-memory allocation suffers a similar slowness. Though, #841 states "tested on H100" but we also call the H100 tuned parameters "H100" even when collected on GH200.

hfp added a commit to hfp/dbcsr that referenced this pull request Oct 7, 2024
This is further speeding up host memory allocation. So far, an OpenCL cl_mem object was created with no host-pointer and it was up to the OpenCL runtime to allocate the host memory. It turns out, this is horribly slow for GH200 stack (for unknown reasons). It was only helpful to mark such OpenCL allocated host memory as "not worth to transfer initially" (CL_MAP_WRITE_INVALIDATE_REGION); a bug in itself. Normally, allocating host memory by relying on the OpenCL runtime yields best performance at least when this memory is the origin/destination of a (PCIe-)transfer. However, GH200 SW stack seems to struggle with this idea. Introduced code path (covered by XHINTS) specific to Nvidia, which simply wraps a malloc'ed pointer (host memory).

* Implemented malloc based c_dbcsr_acc_host_mem_allocate.
* Introduced compile-time ACC_OPENCL_XHINTS.
* Updated tuned parameters (Mi250 and GH200).
* Removed unused function (m_getuid).
hfp added a commit that referenced this pull request Oct 7, 2024
This is further speeding up host memory allocation. So far, an OpenCL cl_mem object was created with no host-pointer and it was up to the OpenCL runtime to allocate the host memory. It turns out, this is horribly slow for GH200 stack (for unknown reasons). It was only helpful to mark such OpenCL allocated host memory as "not worth to transfer initially" (CL_MAP_WRITE_INVALIDATE_REGION); a bug in itself. Normally, allocating host memory by relying on the OpenCL runtime yields best performance at least when this memory is the origin/destination of a (PCIe-)transfer. However, GH200 SW stack seems to struggle with this idea. Introduced code path (covered by XHINTS) specific to Nvidia, which simply wraps a malloc'ed pointer (host memory).

* Implemented malloc based c_dbcsr_acc_host_mem_allocate.
* Introduced compile-time ACC_OPENCL_XHINTS.
* Updated tuned parameters (Mi250 and GH200).
* Removed unused function (m_getuid).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants