Next: Memory Efficient Cloning the Probability Profile, Previous: Using Probability Variables, Up: Assembler Programs [Contents][Index]

To load the same probability profile into multiple nodes of a multinode model, you can load an assembler program into one node and copy its probability profile to other nodes—clone a probability profile. Cloning a probability profile from a node to other nodes is faster than loading the same assembler program into them.

Use the function described below to clone a probability profile.

- Function:
*int***qsmm_node_profile_clone***(qsmm_t*`model`, qsmm_sig_t`node_from`, qsmm_sig_t`node_to`, unsigned int`flags`) This function copies a probability profile from a node of a multinode

`model`to another node of this model. The argument`node_from`specifies the identifier of a source node. The argument`node_to`specifies the identifier of a destination node. The function clears event history statistics collected for the destination node. If the destination node already has a probability profile loaded, the function first unloads the profile from this node along with additional information the function can copy (see the description of`flags`argument below). To clear the event history statistics and unload the profile, this function calls the function`qsmm_node_unload`

described in Unloading the Probability Profile. The function`qsmm_node_profile_clone`

cannot copy probability profiles manually written to storage without prior calling the function`qsmm_node_asm`

.The argument

`flags`is a bitmask specifying the types of information to copy from the source node to the destination node along with the probability profile. The following macros specify the bits of this bitmask taken into account.- Macro:
**QSMM_NODE_CLONE_VARS** Copy the definitions of controlled and output probability variables and arrays. This copying makes it possible to modify the controlled probability variables of the destination node and to retrieve the output probability variables and arrays of that node, as you can modify and retrieve them for the source node. Before copying the definitions of controlled probability variables, this function calls the function

`qsmm_node_var_realize`

for the source node if that node has uncommitted assignments to controlled probability variables.

- Macro:
**QSMM_NODE_CLONE_STATE_NAMES** Copy names assigned to node states by the arguments of

`stt`

instructions. The functions`qsmm_get_node_state_name`

and`qsmm_get_node_state_by_name`

can retrieve this information from the destination node. The function`qsmm_node_disasm`

can use this information when disassembling the destination node. The function`qsmm_mat_goto_dump_v2`

uses this information when dumping the state transition matrix of that node. The function`qsmm_mat_action_dump_v2`

uses this information when dumping the action emission matrix of that node.

- Macro:
**QSMM_NODE_CLONE_TEMPLATE** If the source node has an associated assembler program template, copy the template. The function

`qsmm_node_disasm`

uses this template when disassembling the destination node.

The function returns a non-negative value on success or a negative error code on failure. Currently, the function can return the following error codes.

`QSMM_ERR_INVAL`

The argument

`node_from`is equal to the argument`node_to`.`QSMM_ERR_NOTFOUND`

The source or destination node does not exist.

`QSMM_ERR_NOPROF`

The source node does not have a loaded probability profile.

`QSMM_ERR_NOEQCLAS`

The instruction class set of the source node and the instruction class set of the destination node are different.

`QSMM_ERR_NOSTATE`

The destination node has the number of states less than it is necessary to hold the probability profile of the source node.

`QSMM_ERR_UNTIMELY`

The model instance does not exist.

`QSMM_ERR_UNSUPPLA`

The multinode model has positive length of look-ahead signal segment.

`QSMM_ERR_PROFSRCU`

The source node is a user of a source probability profile provided by another node.

`QSMM_ERR_PROFSRCP`

One of the following conditions is true:

- – destination node is a probability profile source for other nodes;
- – function
`qsmm_node_profile_clone`

called the function`qsmm_node_var_realize`

for the source node, and the latter function has failed because that node is a probability profile source for other nodes.

This error can leave the probability profile of the destination node in inconsistent state. If after removing a reason of this error a repeated call to this function succeeds, the probability profile becomes consistent.

`QSMM_ERR_PSUMGT1`

The function

`qsmm_node_profile_clone`

called the function`qsmm_node_var_realize`

for the source node, and the latter function failed because the sum of probabilities of`case`

instructions in a`choice`

instruction block would exceed 1.`QSMM_ERR_STORAGE`

A Storage API function reported storage failure.

`QSMM_ERR_STATS`

Inconsistent statistics on an action choice state or cycle type detected.

`QSMM_ERR_ILSEQ`

Unable to convert a multibyte string to a wide string or vice versa according to a current locale.

`QSMM_ERR_NOMEM`

There was not enough memory to perform the operation.

Errors

`QSMM_ERR_PSUMGT1`

,`QSMM_ERR_STORAGE`

,`QSMM_ERR_STATS`

,`QSMM_ERR_ILSEQ`

, and`QSMM_ERR_NOMEM`

can leave the probability profile of the source or destination node in inconsistent state. If after removing a reason of this error a repeated call to this function succeeds, the probability profile becomes consistent.- Macro: