Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 600860
Collapse All | Expand All

(-)file_not_specified_in_diff (-20 / +28 lines)
Line  Link Here
                 https://reviews.llvm.org/D35072
                 https://reviews.llvm.org/D35072
1
-- a/runtime/src/kmp_alloc.c
1
++ b/runtime/src/kmp_alloc.c
Lines 1719-1731 Link Here
1719
__kmp_ft_page_allocate(size_t size)
1719
__kmp_ft_page_allocate(size_t size)
1720
{
1720
{
1721
  void *adr, *aadr;
1721
  void *adr, *aadr;
1722
#if KMP_OS_LINUX
1722
1723
  /* TODO: Use this function to get page size everywhere */
1723
  const int page_size = KMP_GET_PAGE_SIZE();
1724
  int page_size = getpagesize();
1725
#else
1726
  /* TODO: Find windows function to get page size and use it everywhere */
1727
  int page_size = PAGE_SIZE;
1728
#endif /* KMP_OS_LINUX */
1729
1724
1730
  adr = (void *) __kmp_thread_malloc( __kmp_get_thread(),
1725
  adr = (void *) __kmp_thread_malloc( __kmp_get_thread(),
1731
                                    size + page_size + KMP_PTR_SKIP);
1726
                                    size + page_size + KMP_PTR_SKIP);
1732
-- a/runtime/src/kmp_os.h
1727
++ b/runtime/src/kmp_os.h
Lines 235-244 Link Here
235
    #define __forceinline __inline
235
    #define __forceinline __inline
236
#endif
236
#endif
237
237
238
#define PAGE_SIZE                       (0x4000)
238
#if KMP_OS_WINDOWS
239
#include <windows.h>
240
241
static inline int KMP_GET_PAGE_SIZE(void) {
242
    SYSTEM_INFO si;
243
    GetSystemInfo(&si);
244
    return si.dwPageSize;
245
}
246
#else
247
// TODO: find the corresponding function to getpagesize() in Windows
248
// and use it whenever possible.
249
#define KMP_GET_PAGE_SIZE() getpagesize()
250
#endif
251
239
#define PAGE_ALIGNED(_addr)     ( ! ((size_t) _addr & \
252
#define PAGE_ALIGNED(_addr)     ( ! ((size_t) _addr & \
240
                                     (size_t)(PAGE_SIZE - 1)))
253
                                     (size_t)(KMP_GET_PAGE_SIZE() - 1)))
241
#define ALIGN_TO_PAGE(x)   (void *)(((size_t)(x)) & ~((size_t)(PAGE_SIZE - 1)))
254
#define ALIGN_TO_PAGE(x)   (void *)(((size_t)(x)) & ~((size_t)(KMP_GET_PAGE_SIZE() - 1)))
242
255
243
/* ---------------------- Support for cache alignment, padding, etc. -----------------*/
256
/* ---------------------- Support for cache alignment, padding, etc. -----------------*/
244
257
Lines 289-296 Link Here
289
302
290
#if KMP_ASM_INTRINS && KMP_OS_WINDOWS
303
#if KMP_ASM_INTRINS && KMP_OS_WINDOWS
291
304
292
#include <Windows.h>
293
294
#pragma intrinsic(InterlockedExchangeAdd)
305
#pragma intrinsic(InterlockedExchangeAdd)
295
#pragma intrinsic(InterlockedCompareExchange)
306
#pragma intrinsic(InterlockedCompareExchange)
296
#pragma intrinsic(InterlockedExchange)
307
#pragma intrinsic(InterlockedExchange)
297
-- a/runtime/src/kmp_runtime.c
308
++ b/runtime/src/kmp_runtime.c
Lines 345-352 Link Here
345
                    int lastNode;
345
                    int lastNode;
346
                    int localProc = __kmp_get_cpu_from_gtid(gtid);
346
                    int localProc = __kmp_get_cpu_from_gtid(gtid);
347
347
348
                    p1 = (void *)( (size_t)p1 & ~((size_t)PAGE_SIZE - 1) );
348
                    const int page_size = KMP_GET_PAGE_SIZE();
349
                    p2 = (void *)( ((size_t) p2 - 1) & ~((size_t)PAGE_SIZE - 1) );
349
350
                    p1 = (void *)( (size_t)p1 & ~((size_t)page_size - 1) );
351
                    p2 = (void *)( ((size_t) p2 - 1) & ~((size_t)page_size - 1) );
350
                    if(localProc >= 0)
352
                    if(localProc >= 0)
351
                        __kmp_printf_no_lock("  GTID %d localNode %d\n", gtid, localProc>>1);
353
                        __kmp_printf_no_lock("  GTID %d localNode %d\n", gtid, localProc>>1);
352
                    else
354
                    else
Lines 358-374 Link Here
358
                        lastNode = node;
360
                        lastNode = node;
359
                        /* This loop collates adjacent pages with the same host node. */
361
                        /* This loop collates adjacent pages with the same host node. */
360
                        do {
362
                        do {
361
                            (char*)p1 += PAGE_SIZE;
363
                            (char*)p1 += page_size;
362
                        } while(p1 <= p2 && (node = __kmp_get_host_node(p1)) == lastNode);
364
                        } while(p1 <= p2 && (node = __kmp_get_host_node(p1)) == lastNode);
363
                        __kmp_printf_no_lock("    %p-%p memNode %d\n", last,
365
                        __kmp_printf_no_lock("    %p-%p memNode %d\n", last,
364
                                             (char*)p1 - 1, lastNode);
366
                                             (char*)p1 - 1, lastNode);
365
                    } while(p1 <= p2);
367
                    } while(p1 <= p2);
366
# else
368
# else
367
                    __kmp_printf_no_lock("    %p-%p memNode %d\n", p1,
369
                    __kmp_printf_no_lock("    %p-%p memNode %d\n", p1,
368
                                         (char*)p1 + (PAGE_SIZE - 1), __kmp_get_host_node(p1));
370
                                         (char*)p1 + (page_size - 1), __kmp_get_host_node(p1));
369
                    if(p1 < p2)  {
371
                    if(p1 < p2)  {
370
                        __kmp_printf_no_lock("    %p-%p memNode %d\n", p2,
372
                        __kmp_printf_no_lock("    %p-%p memNode %d\n", p2,
371
                                             (char*)p2 + (PAGE_SIZE - 1), __kmp_get_host_node(p2));
373
                                             (char*)p2 + (page_size - 1), __kmp_get_host_node(p2));
372
                    }
374
                    }
373
# endif
375
# endif
374
                }
376
                }

Return to bug 600860