Send data to all workers in `spmd` block

Since R2022b

## Syntax

``B = spmdBroadcast(source,A)``
``B = spmdBroadcast(source)``

## Description

example

````B = spmdBroadcast(source,A)` sends the data `A` to every worker in the current `spmd` block or communicating job.When you offload computations using `parfor` and `parfeval`, only one worker at a time runs each computation. These workers are independent and do not communicate with each other. If you apply `spmdBroadcast` to these workers, the function has no effect.The worker whose index in the current spmd block is equal to source broadcasts the data. To get the worker index, use the `spmdIndex` function. If `source` is equal to the worker index, `B` is equal to `A`. ```

example

````B = spmdBroadcast(source)` receives the data `B` on each worker running the current `spmd` block or communicating job. The data `B` is equal to the data `A` sent from the worker with an index equal to `source`.```

## Examples

collapse all

This example shows how to broadcast an array from one worker to other workers in an `spmd` block.

Create a parallel pool with four workers.

`parpool(4);`

When you execute an `spmd` block after creating a parallel pool, by default all available workers in the pool run the code inside the `spmd` block.

Create an `spmd` block. On the worker whose index is equal to `1`, create an array. Use `spmdBroadcast` to send the array to all workers. On each other worker, use `spmdBroadcast` to receive the array.

```spmd source = 1; if spmdIndex == source A = magic(3); B = spmdBroadcast(source, A); else B = spmdBroadcast(source); end B end```
```Worker 1: B = 8 1 6 3 5 7 4 9 2 Worker 2: B = 8 1 6 3 5 7 4 9 2 Worker 3: B = 8 1 6 3 5 7 4 9 2 Worker 4: B = 8 1 6 3 5 7 4 9 2 ```

On the client, inspect the `Composite` `A`. Only the worker whose index is 1 contains a definition of `A`.

`A`
``` A = Worker 1: class = double, size = [3 3] Worker 2: No data Worker 3: No data Worker 4: No data ```

## Input Arguments

collapse all

Index of the worker that is sending data, specified as a positive integer. This value must be greater than or equal to `1` and less than or equal to the number of workers running the current spmd block. To determine the number of workers running the current spmd block, use the `spmdSize` function. The `spmdSize` function returns a value of 1 outside of an spmd block or communicating job.

Example: `1`

Data sent from the worker whose index is equal to `source`, specified as any MATLAB variable that can be saved and loaded.

Example: `magic(3)`

## Output Arguments

collapse all

Data returned on the worker, specified as a scalar, vector, matrix, multidimensional array, table, or timetable.

## Tips

A worker that calls `spmdBroadcast` might finish execution before other workers. When you need synchronized workers in an `spmd` block or communicating job, such as when you close a shared resource, use `spmdBarrier` after calling `spmdBroadcast`.

## Version History

Introduced in R2022b