Beispiel #1
0
static int
Turbine_Init_Cmd(ClientData cdata, Tcl_Interp *interp,
                 int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(4);
  int amserver, rank, size;

  get_tcl_version();

  int rc;
  rc = Tcl_GetIntFromObj(interp, objv[1], &amserver);
  TCL_CHECK(rc);
  rc = Tcl_GetIntFromObj(interp, objv[2], &rank);
  TCL_CHECK(rc);
  rc = Tcl_GetIntFromObj(interp, objv[3], &size);
  TCL_CHECK(rc);

  turbine_code code = turbine_init(amserver, rank, size);
  if (code != TURBINE_SUCCESS)
  {
    Tcl_AddErrorInfo(interp, " Could not initialize Turbine!\n");
    return TCL_ERROR;
  }

  log_setup(rank);

  return TCL_OK;
}
Beispiel #2
0
static int
Turbine_Cache_Retrieve_Cmd(ClientData cdata, Tcl_Interp *interp,
                   int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(2);
  turbine_datum_id td;
  const char *subscript;
  size_t subscript_len;
  int error = ADLB_EXTRACT_HANDLE(objv[1], &td, &subscript,
                                  &subscript_len);
  TCL_CHECK(error);

  // TODO: handle caching subscripts
  TCL_CONDITION(subscript_len == 0, "Don't handle caching subscripts");

  turbine_type type;
  void* data;
  size_t length;
  turbine_code rc = turbine_cache_retrieve(td, &type, &data, &length);
  TURBINE_CHECK(rc, "cache retrieve failed: %"PRId64"", td);

  Tcl_Obj* result = NULL;
  int tcl_code = adlb_datum2tclobj(interp, objv, td, type,
                      ADLB_TYPE_EXTRA_NULL, data, length, &result);
  TCL_CHECK(tcl_code);
  Tcl_SetObjResult(interp, result);
  return TCL_OK;
}
Beispiel #3
0
/*
  turbine::coaster_register

  Register coaster executor if enabled
 */
static int
Coaster_Register_Cmd(ClientData cdata, Tcl_Interp *interp,
                  int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(1);

#if HAVE_COASTER == 1
  turbine_code tc;
  tc = coaster_executor_register();
  TCL_CONDITION(tc == TURBINE_SUCCESS,
                "Could not register Coaster executor");

  coaster_log_level threshold = COASTER_LOG_WARN;

  // Turn on debugging based on debug tokens.
  if (turbine_debug_enabled) {
#ifdef ENABLE_DEBUG_COASTER
    // Only enable detailed debugging if coaster debugging on
    threshold = COASTER_LOG_DEBUG;
#else
    threshold = COASTER_LOG_INFO;
#endif
  }

  coaster_rc crc = coaster_set_log_threshold(threshold);
  TCL_CONDITION(crc == COASTER_SUCCESS, "Could not set log threshold");
#endif
  return TCL_OK;
}
Beispiel #4
0
/* usage: async_exec_names
   Return list of names of registered async executors
 */
static int
Async_Exec_Names_Cmd(ClientData cdata, Tcl_Interp* interp,
                        int objc, Tcl_Obj* const objv[])
{
  TCL_ARGS(1);

  turbine_code tc;

  const int names_size = TURBINE_ASYNC_EXEC_LIMIT;
  const char *names[names_size];
  int n;
  tc = turbine_async_exec_names(names, names_size, &n);
  TCL_CONDITION(tc == TURBINE_SUCCESS, "Error enumerating executors");

  assert(n >= 0 && n <= names_size);

  Tcl_Obj * name_objs[n];

  for (int i = 0; i < n; i++)
  {
    const char *exec_name = names[i];
    assert(exec_name != NULL);

    name_objs[i] = Tcl_NewStringObj(exec_name, -1);
    TCL_CONDITION(name_objs[i] != NULL, "Error allocating string");
  }

  Tcl_SetObjResult(interp, Tcl_NewListObj(n, name_objs));
  return TCL_OK;
}
Beispiel #5
0
static int
Turbine_Cache_Check_Cmd(ClientData cdata, Tcl_Interp *interp,
                int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(2);
  turbine_datum_id td;
  const char *subscript;
  size_t subscript_len;
  int error = ADLB_EXTRACT_HANDLE(objv[1], &td, &subscript,
                                  &subscript_len);
  TCL_CHECK(error);

  bool found;
  if (subscript_len == 0)
  {
    found = turbine_cache_check(td);
  }
  else
  {
    // TODO: handle caching subscripts - currently just ignore
    found = false;
  }

  Tcl_Obj* result = Tcl_NewBooleanObj(found);
  Tcl_SetObjResult(interp, result);
  return TCL_OK;
}
Beispiel #6
0
static int
Python_Eval_Cmd(ClientData cdata, Tcl_Interp *interp,
                int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(4);
  return turbine_user_errorv(interp,
                   "Turbine not compiled with Python support");
}
Beispiel #7
0
static int
Turbine_Normalize_Cmd(ClientData cdata, Tcl_Interp *interp,
                      int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(1);
  log_normalize();
  return TCL_OK;
}
Beispiel #8
0
/*
  turbine::toint_impl <string>
  Convert decimal string to wide integer
 */
static int
Turbine_ToIntImpl_Cmd(ClientData cdata, Tcl_Interp *interp,
                  int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(2);

  return Turbine_ParseInt_Impl(cdata, interp, objv, objv[1], 10);
}
Beispiel #9
0
static int
Turbine_Debug_On_Cmd(ClientData cdata, Tcl_Interp *interp,
                  int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(1);
  bool enabled = turbine_debug_enabled;
  Tcl_SetObjResult(interp, Tcl_NewIntObj(enabled));
  return TCL_OK;
}
Beispiel #10
0
int
Turbine_TaskComm_Cmd(ClientData cdata, Tcl_Interp *interp,
                     int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(1);
  Tcl_Obj* result = Tcl_NewLongObj(turbine_task_comm);
  Tcl_SetObjResult(interp, result);
  return TCL_OK;
}
Beispiel #11
0
/*
  Initialises Turbine debug logging.
  turbine::init_debug
 */
static int
Turbine_Init_Debug_Cmd(ClientData cdata, Tcl_Interp *interp,
                 int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(1);
  turbine_debug_init();

  return TCL_OK;
}
Beispiel #12
0
static int
Turbine_Log_Cmd(ClientData cdata, Tcl_Interp *interp,
                int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(2);

  log_printf("%s", Tcl_GetString(objv[1]));

  return TCL_OK;
}
Beispiel #13
0
/*
  turbine::noop_exec_register
 */
static int
Noop_Exec_Register_Cmd(ClientData cdata, Tcl_Interp *interp,
                  int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(1);

  turbine_code tc;
  tc = noop_executor_register();
  TCL_CONDITION(tc == TURBINE_SUCCESS,
                "Could not register noop executor");

  return TCL_OK;
}
Beispiel #14
0
/*
  turbine::parse_int_impl <string> <base>
  Convert string in any base to wide integer
 */
static int
Turbine_ParseIntImpl_Cmd(ClientData cdata, Tcl_Interp *interp,
                  int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(3);

  int base;
  int rc = Tcl_GetIntFromObj(interp, objv[2], &base);
  TCL_CHECK(rc);

  TCL_CONDITION(base >= 1, "Base must be positive: %i", base);
  return Turbine_ParseInt_Impl(cdata, interp, objv, objv[1], base);
}
Beispiel #15
0
static int
Turbine_Version_Cmd(ClientData cdata, Tcl_Interp *interp,
                 int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(1);

  version v;
  turbine_version(&v);
  char vs[8];
  version_to_string(vs, &v);
  Tcl_Obj* result = Tcl_NewStringObj(vs, -1);
  assert(result);
  Tcl_SetObjResult(interp, result);

  return TCL_OK;
}
Beispiel #16
0
static int
Python_Eval_Cmd(ClientData cdata, Tcl_Interp *interp,
                int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(4);
  int rc;
  int persist;
  rc = Tcl_GetBooleanFromObj(interp, objv[1], &persist);
  TCL_CHECK_MSG(rc, "first arg should be integer!");
  char* code = Tcl_GetString(objv[2]);
  char* expression = Tcl_GetString(objv[3]);
  Tcl_Obj* result = NULL;
  rc = python_eval(persist, code, expression, &result);
  TCL_CHECK(rc);
  Tcl_SetObjResult(interp, result);
  return TCL_OK;
}
Beispiel #17
0
static int
Turbine_Debug_Cmd(ClientData cdata, Tcl_Interp *interp,
                  int objc, Tcl_Obj *const objv[])
{
  TCL_ARGS(2);

  if (turbine_debug_enabled)
  {
    unused char* msg = Tcl_GetString(objv[1]);
    DEBUG_TCL_TURBINE("%s", msg);
    return TCL_OK;
  }
  else
  {
    return TCL_OK;
  }
}
Beispiel #18
0
/* usage: async_exec_configure <executor name> <config string>
   Configure registered executor.
 */
static int
Async_Exec_Configure_Cmd(ClientData cdata, Tcl_Interp* interp,
                        int objc, Tcl_Obj* const objv[])
{
  TCL_ARGS(3);

  turbine_code tc;

  const char *exec_name = Tcl_GetString(objv[1]);
  int config_len;
  const char *config = Tcl_GetStringFromObj(objv[2], &config_len);

  turbine_executor *exec = turbine_get_async_exec(exec_name, NULL);
  TCL_CONDITION(exec != NULL, "Executor %s not registered", exec_name);

  tc = turbine_configure_exec(interp, exec, config, (size_t)config_len);
  TCL_CONDITION(tc == TURBINE_SUCCESS,
      "Could not configure executor %s", exec_name);

  return TCL_OK;
}