File: testinternal.c

package info (click to toggle)
gasnet 2025.8.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 17,424 kB
  • sloc: ansic: 114,758; cpp: 5,158; sh: 4,847; makefile: 2,715; perl: 1,774
file content (77 lines) | stat: -rw-r--r-- 2,485 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*   $Source: bitbucket.org:berkeleylab/gasnet.git/tests/testinternal.c $
 * Description: GASNet internal diagnostic tests
 * Copyright 2002, Dan Bonachea <bonachea@cs.berkeley.edu>
 * Terms of use are as specified in license.txt
 */

#include <gasnetex.h>
#include <gasnet_coll.h>
#include <gasnet_tools.h>

#include <test.h>

static gex_Client_t      myclient;
static gex_EP_t    myep;
static gex_TM_t myteam;
static gex_Segment_t     mysegment;

/* ------------------------------------------------------------------------------------ */
int main(int argc, char **argv) {
  int iters = 0, threads=0;
  int arg = 1;
  gex_AM_Entry_t *htable; int htable_cnt;
  char *test_sections = NULL;
  gasnett_diagnostic_gethandlers(&htable, &htable_cnt);

  GASNET_Safe(gex_Client_Init(&myclient, &myep, &myteam, "testinternal", &argc, &argv, 0));
  GASNET_Safe(gex_Segment_Attach(&mysegment, myteam, TEST_SEGSZ_REQUEST));
  GASNET_Safe(gex_EP_RegisterHandlers(myep, htable, htable_cnt));
  #if GASNET_PAR
    test_init("testinternal",0,"(iters) (threadcnt) (test_sections) (seed)");
  #else
    test_init("testinternal",0,"(iters) (test_sections) (seed)");
  #endif
  TEST_PRINT_CONDUITINFO();

  if (argc > arg) iters = atoi(argv[arg++]);
  if (iters < 1) iters = 1000;
  #if GASNET_PAR
  if (argc > arg) threads = atoi(argv[arg++]);
  #endif
  if (threads < 1) threads = 4;
  #if GASNET_PAR
  threads = test_thread_limit(threads);
  #endif
  if (argc > arg) test_sections = argv[arg++];

  unsigned int seed = 0;
  if (argc > arg) seed = atoi(argv[arg++]);
  if (seed == 0) {
    seed = (((unsigned int)TIME()) & 0xFFFF);
    TEST_BCAST(&seed, 0, &seed, sizeof(seed));
  }
  // NOTE: Because TEST_RAND state is per-TU, TEST_SRAND() call is in gasnett_run_diagnostics()

  #if GASNET_PAR
    MSG0("Running GASNet internal diagnostics with iters=%i and threads=%i (seed %u)", iters, threads, seed);
  #else
    MSG0("Running GASNet internal diagnostics with iters=%i (seed %u)", iters, seed);
  #endif


  gex_Rank_t myrank = gex_TM_QueryRank(myteam);
  gex_Rank_t numrank = gex_TM_QuerySize(myteam);
  gex_Rank_t peer = (myrank + 1) % numrank;

  BARRIER();
  void *myseg = TEST_SEG(myrank);
  void *peerseg = TEST_SEG(peer);
  test_errs = gasnett_run_diagnostics(iters, threads, test_sections, myteam,
                                      myseg, peer, peerseg, seed);
  BARRIER();

  if (test_errs) ERR("gasnett_run_diagnostics(%i) failed.", iters);

  gasnet_exit(test_errs);
  return 0;
}