gtbercea marked an inline comment as done. gtbercea added inline comments.
================ Comment at: lib/CodeGen/CGOpenMPRuntime.cpp:5122 + NewTask = CGF.EmitRuntimeCall( + createRuntimeFunction(OMPRTL__kmpc_omp_target_task_alloc), AllocArgs); + } else { ---------------- AlexEichenberger wrote: > gtbercea wrote: > > ABataev wrote: > > > gtbercea wrote: > > > > ABataev wrote: > > > > > gtbercea wrote: > > > > > > ABataev wrote: > > > > > > > gtbercea wrote: > > > > > > > > ABataev wrote: > > > > > > > > > Can we use the same function in both modes, with nowait > > > > > > > > > clause and without? > > > > > > > > For nowait we need to use the target_task_alloc variant. There > > > > > > > > are runtimes - other than the open source one - for which this > > > > > > > > function does something different. > > > > > > > Trunk relies only to libomptarget interfaces. Why we should take > > > > > > > into account some other runtime libraries? Plus, what's so > > > > > > > different for async and non-async versions of the directive? > > > > > > Async is not yet fully supported in the OpenMP open source runtime > > > > > > but at some point it will be. This is the first step towards its > > > > > > support. I'm not sure what your objection is. The difference is > > > > > > clear. Device ID must be passed on the async version of this call. > > > > > The difference is not obvious. Why we can't use the same function for > > > > > sync directives? The fact the it has DeviceId parameter is not an > > > > > argument here. What's so special from functional point of view? > > > > When you have multiple device on the same system you have to be able to > > > > distinguish between then and manage dependencies across these different > > > > devices. Knowing the device is a crucial first step in handling these > > > > inter-device dependencies. > > > Ok, this is why we need it for async version. But why we can't use for > > > sync version? > > Based on how the runtime is currently structured, nowait functions are > > separate from the synchronous ones. See target vs. target_nowait functions > > and there are many examples like that. The async support is always kept > > separate from the synchronous support at least in terms of entry points in > > the runtime. > Right now, target_task indicates two things: 1) there are depenences to > offload and 2) it's a nowait constructs. If we use target_task_alloc for both > situations, we need to distinguish these two cases using flags, because the > handling iseventually different. > If we want to explore this avenue, then we have to look into using the proxy > flag is set to indicates nowait. It may have implications for the tasks on > the KMP side, so this might be more risky. > This is why I suggest at the present time that we only generate target task > for the limited "target task depend nowait" Thanks a lot for the comment @AlexEichenberger Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63009/new/ https://reviews.llvm.org/D63009 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits