================ @@ -444,32 +444,81 @@ template <typename T, typename ST> struct omptarget_nvptx_LoopSupport { // KMP interface implementation (dyn loops) //////////////////////////////////////////////////////////////////////////////// -// TODO: This is a stopgap. We probably want to expand the dispatch API to take -// an DST pointer which can then be allocated properly without malloc. -static DynamicScheduleTracker *THREAD_LOCAL(ThreadDSTPtr); +// TODO: Expand the dispatch API to take a DST pointer which can then be +// allocated properly without malloc. +// For now, each team will contain an LDS pointer (ThreadDST) to a global array +// of references to the DST structs allocated (in global memory) for each thread +// in the team. The global memory array is allocated during the init phase if it +// was not allocated already and will be deallocated when the dispatch phase +// ends: +// +// __kmpc_dispatch_init +// +// ** Dispatch loop ** +// +// __kmpc_dispatch_deinit +// +static DynamicScheduleTracker **SHARED(ThreadDST); // Create a new DST, link the current one, and define the new as current. static DynamicScheduleTracker *pushDST() { + int32_t ThreadIndex = mapping::getThreadIdInBlock(); + // Each block will allocate an array of pointers to DST structs. The array is + // equal in length to the number of threads in that block. + if (!ThreadDST) { + // Allocate global memory array of pointers to DST structs: + if (ThreadIndex == 0) ---------------- doru1004 wrote:
Thread 0 is an arbitrary choice. https://github.com/llvm/llvm-project/pull/97065 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits