[Openmp-commits] [PATCH] D142512: [OpenMP][libomptarget] Fix mapping/prelock.cpp test

Kevin Sala via Phabricator via Openmp-commits openmp-commits at lists.llvm.org
Wed Jan 25 00:56:49 PST 2023

kevinsala added a comment.

@carlo.bertolli Just tested the example below with the old plugins and it also segfaults:

  #include <assert.h>
  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <omp.h>
  void *llvm_omp_target_lock_mem(void *ptr, size_t size, int device_num);
  void llvm_omp_target_unlock_mem(void *ptr, int device_num);
  int main(int argc, char **argv) {
      const size_t size = 1000*sizeof(int);
      int *ptr1 = (int *) malloc(size);
      assert(ptr1 != NULL);
      memset(ptr1, 0, size);
      int *ptr2 = (int *) llvm_omp_target_lock_mem(ptr1, size, 0);
      assert(ptr2 != NULL);
      fprintf(stdout, "ptr1: %p, ptr2: %p\n", ptr1, ptr2);
      fprintf(stdout, "ptr1[0]: %d\n", ptr1[0]);
      fprintf(stdout, "ptr2[0]: %d\n", ptr2[0]);
      return 0;

When running the program, the access to `ptr2[0]` segfaults at the host side. So I don't think `ptr2` is a locked host pointer. It's the pointer returned by `hsa_amd_memory_lock` as the `agent_ptr` output parameter. And probably it's a pointer that the GPU agents should use for asynchronous memory transfers involving the buffer `[ptr1, size)`. I assumed the host locked pointer is `ptr1` directly, after `hsa_amd_memory_lock` is executed. However, I'm not 100% sure since the documentation of the lock operation on HSA AMD is a bit confusing.

  rG LLVM Github Monorepo



More information about the Openmp-commits mailing list