Function: create_stream
Description
Creates a stream in the calling process or thread.
This API does not allow for adjusting the stream priority. By default, streams are assigned the highest priority if none is specified. For details about how to set the priority when creating a stream, see the acl.rt.create_stream_with_config API.
If the stream creation API is not explicitly called, each context corresponds to a default stream. The default stream is implicitly created by calling the acl.rt.set_device or acl.rt.create_context API. The priority of the default stream cannot be set and is the highest priority. The default stream is suitable for simple applications without complex interaction logic. However, in multithreaded programming, the execution result depends on the thread scheduling sequence. Explicitly created streams are suitable for large-scale applications with complex interaction logic to improve program readability and maintainability. Therefore, explicit streams are recommended.
Prototype
- C Prototype
1aclError aclrtCreateStream(aclrtStream *stream)
- Python Function
1stream, ret = acl.rt.create_stream()
Parameters
None
Return Value
|
Return Value |
Description |
|---|---|
|
stream |
Int, pointer address of the created context. |
|
ret |
Int, error code. 0 on success; else, failure. |
Restrictions
- Each context corresponds to a default stream. The default stream is implicitly created by calling the acl.rt.set_device or acl.rt.create_context API. The priority of the default stream cannot be set and is the highest priority. You are advised to use aclrtCreateStream to explicitly create a stream.
- Implicit stream creation: applies to simple apps with low complicity of interaction logic. However, in multithreaded programming, the execution result depends on the thread scheduling sequence.
- (Recommended) Explicit stream creation: applies to large apps with complex interaction logic, offering better app readability and maintainability.
- The maximum number of streams supported by hardware varies depending on the hardware model. If multiple streams (including the default stream and streams for internal synchronization) exist, only N streams can be created explicitly. N = Maximum number of streams - Number of existing streams. For example, if the maximum number of streams is 1,024 and there are already two streams, you can only call this API to explicitly create 1,022 streams.
|
Model |
Maximum Number of Streams |
|---|---|
|
Atlas 350 Accelerator Card |
1,984 |
|
|
512 |
|
|
1,024 |
|
|
1,024 In the |
|
|
2,048
In the multi-process scenario, if the total number of streams created at a time is close to 2,048, streams may fail to be created. In this case, you are advised to perform the following operations:
|