---
title: 初始化
description: "CANN Runtime提供了aclInit、aclrtSetDevice接口，在应用程序启动时被调用，结合json配置文件完成如下功能："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/programug/acldevg/runtime_doc_dev_0002.html
sourcePath: /source/zh/canncommercial/900/programug/acldevg/runtime_doc_dev_0002.html
indexId: 886969ab8a7448d834dde2d22bd4ee3800dd946d6f3d79067d2279a9c547983f73
---
# 初始化

CANN Runtime提供了aclInit、aclrtSetDevice接口，在应用程序启动时被调用，结合json配置文件完成如下功能：

- 初始化环境：设置 CANN Runtime 运行时所需的环境参数，确保所有运行时资源和配置项都被正确加载。
- 设备资源配置：初始化与硬件相关的资源（如 Ascend 处理器、加速卡等）并为其分配资源，使得后续的计算任务可以在适当的设备上执行。
- 设置日志：提供日志记录的初始化，确保系统的运行状态可以被实时检查与调试。
- 资源管理初始化：为后续的内存管理、任务调度、内存分配等功能提供资源准备。


以下是初始化及指定计算设备的代码示例，不可以直接拷贝编译运行，仅供参考。完整样例代码请参见Link(https://gitcode.com/cann/runtime/tree/9.0.0/example/device/0_device_normal)。

```
// 初始化
int32_t deviceId = 0;
aclInit(nullptr); // json配置路径为nullptr, 默认初始化
aclrtSetDevice(deviceId);

// SetDevice后才可以调用其他aclrt运行时接口。
......

// 去初始化
aclrtResetDeviceForce(deviceId);
aclFinalize();
```


若不显式调用aclrtSetDevice接口时，可按照如下配置的默认Device进行处理。例如：aclInit接口的json文件中指定默认Device 为 0：

```
{
"defaultDevice":{
"default_device":"0"
}
}
```

在aclInit接口中启用默认Device功能后，初始化的示例代码如下，不可以直接拷贝编译运行，仅供参考。完整样例代码请参见Link(https://gitcode.com/cann/runtime/tree/9.0.0/example/device/0_device_normal)。

```
// 初始化
int32_t deviceId = 0;
aclInit(nullptr);

// 启用DefaultDevice后，可以不显式调用aclrtSetDevice直接调用运行时接口
// 接口中会按json配置文件指定的device，进行隐式aclrtSetDevice
aclrtMalloc(&devPtr, size, 0); 

......

// 去初始化
aclrtResetDeviceForce(deviceId);
aclFinalize();
```


除了默认Device功能之外，通过配置aclInit接口中的json文件，可实现零修改代码二进制完成性能数据采集、模型输入/输出数据导出、溢出算子Dump等功能，相关配置示例及使用说明请参考aclInit接口中的说明。
