当前位置: 首页 > news >正文

CANN Lennard-Jones力场API参考

aclnnLJForce

【免费下载链接】mat-chem-sim-pred面向工业领域,聚焦计算仿真、预测两大核心场景,构建面向流程工业"机理+数据"双轮驱动的领域计算层,推动AI for Science在材料化学领域的深度应用。项目地址: https://gitcode.com/cann/mat-chem-sim-pred

作者

  • 刘非(@Magic_LF)

学术指导

  • 黄剑兴(@huangjianxing)

产品支持情况

产品是否支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas 200I/500 A2 推理产品×
Atlas 推理系列产品×
Atlas 训练系列产品×

功能说明

  • 接口功能:实现 Lennard-Jones 力场的融合计算,一次完成距离计算、势能计算和力向量计算,适用于分子动力学模拟场景。

  • 计算公式:

    Lennard-Jones 势能:

    $$ V_{LJ}(r) = 4\varepsilon \left[ \left(\frac{\sigma}{r}\right)^{12} - \left(\frac{\sigma}{r}\right)^{6} \right] $$

    Lennard-Jones 力:

    $$ F_{LJ}(r) = \frac{24\varepsilon}{r} \left[ 2\left(\frac{\sigma}{r}\right)^{12} - \left(\frac{\sigma}{r}\right)^{6} \right] \cdot \frac{\vec{r}}{|r|} $$

    其中:

    • $r$ 为两原子间距离
    • $\varepsilon$ 为势阱深度
    • $\sigma$ 为零势能距离
    • $\vec{r}$ 为距离向量

函数原型

int32_t aclnnLJForceDirect( void* positionsAddr, void* forcesAddr, void* energyAddr, int32_t numAtoms, float epsilon, float sigma, float cutoff, void* workspaceAddr, uint64_t workspaceSize, void* stream );
uint64_t aclnnLJForceGetWorkspaceSize(int32_t numAtoms);

aclnnLJForceDirect

  • 参数说明
参数名输入/输出描述数据类型
positionsAddr输入原子坐标数组,shape为[N, 3],N为原子数。设备内存地址。FLOAT32
forcesAddr输出每个原子受到的力,shape为[N, 3]。设备内存地址。FLOAT32
energyAddr输出系统总势能数组,shape为[maxCores * 8],需要在Host端累加。设备内存地址。FLOAT32
numAtoms输入原子数量N。INT32
epsilon输入势阱深度,单位eV。FLOAT32
sigma输入零势能距离,单位Angstrom。FLOAT32
cutoff输入截断距离,超过此距离的原子对不计算相互作用,单位Angstrom。FLOAT32
workspaceAddr输入在Device侧申请的workspace内存地址。void*
workspaceSize输入在Device侧申请的workspace大小,由aclnnLJForceGetWorkspaceSize获取。UINT64
stream输入指定执行任务的Stream。aclrtStream
  • 返回值

    返回0表示成功,非0表示失败。

aclnnLJForceGetWorkspaceSize

  • 参数说明
参数名输入/输出描述数据类型
numAtoms输入原子数量N。INT32
  • 返回值

    返回需要在Device侧申请的workspace大小(字节)。

约束说明

  • 输入坐标必须为 FLOAT32 类型
  • 原子数 N 不超过 65535
  • cutoff 必须大于 0
  • 强制 FP32 精度计算,满足科学计算需求

调用示例

示例代码如下,仅供参考:

#include <iostream> #include <vector> #include "acl/acl.h" extern "C" int32_t aclnnLJForceDirect( void* positionsAddr, void* forcesAddr, void* energyAddr, int32_t numAtoms, float epsilon, float sigma, float cutoff, void* workspaceAddr, uint64_t workspaceSize, void* stream ); extern "C" uint64_t aclnnLJForceGetWorkspaceSize(int32_t numAtoms); int main() { // 1. 初始化设备 aclInit(nullptr); aclrtSetDevice(0); aclrtStream stream; aclrtCreateStream(&stream); // 2. 构造输入数据 const int32_t numAtoms = 64; const float epsilon = 0.0103f; // eV (Argon) const float sigma = 3.4f; // Angstrom const float cutoff = 10.0f; // Angstrom std::vector<float> positions(numAtoms * 3); // 初始化原子坐标... // 3. 分配设备内存 void *posAddr, *forcesAddr, *energyAddr, *workspaceAddr; uint64_t workspaceSize = aclnnLJForceGetWorkspaceSize(numAtoms); aclrtMalloc(&posAddr, numAtoms * 3 * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc(&forcesAddr, numAtoms * 3 * sizeof(float) + 32 * 8 * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc(&energyAddr, 32 * 8 * sizeof(float), ACL_MEM_MALLOC_HUGE_FIRST); aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); // 4. 拷贝输入到设备 aclrtMemcpy(posAddr, numAtoms * 3 * sizeof(float), positions.data(), numAtoms * 3 * sizeof(float), ACL_MEMCPY_HOST_TO_DEVICE); // 5. 调用算子 aclnnLJForceDirect(posAddr, forcesAddr, energyAddr, numAtoms, epsilon, sigma, cutoff, workspaceAddr, workspaceSize, stream); // 6. 同步等待 aclrtSynchronizeStream(stream); // 7. 拷贝结果回主机并累加能量 std::vector<float> energy(32 * 8, 0.0f); aclrtMemcpy(energy.data(), energy.size() * sizeof(float), energyAddr, 32 * 8 * sizeof(float), ACL_MEMCPY_DEVICE_TO_HOST); float totalEnergy = 0.0f; for (int i = 0; i < 32; i++) { totalEnergy += energy[i * 8]; } // 8. 释放资源 aclrtFree(posAddr); aclrtFree(forcesAddr); aclrtFree(energyAddr); aclrtFree(workspaceAddr); aclrtDestroyStream(stream); aclrtResetDevice(0); aclFinalize(); return 0; }

性能数据

原子数原子对数PyTorch CPUNPU融合算子加速比
642,0160.54 ms0.57 ms0.96x
1288,12825.57 ms0.75 ms34.21x
25632,640174.96 ms0.85 ms206.23x
512130,816183.00 ms1.45 ms126.36x

【免费下载链接】mat-chem-sim-pred面向工业领域,聚焦计算仿真、预测两大核心场景,构建面向流程工业"机理+数据"双轮驱动的领域计算层,推动AI for Science在材料化学领域的深度应用。项目地址: https://gitcode.com/cann/mat-chem-sim-pred

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/787161/

相关文章:

  • RAG-Fusion:多查询与排序融合技术如何提升大模型检索效果
  • CAN协议在工业自动化中的应用与高层协议解析
  • 量子化学基态计算:ARNN-SCI算法解析与应用
  • CMOS隔离栅极驱动器技术解析与应用实践
  • 2026年4月国内知名的铜包钢源头厂家推荐分析,接地施工队伍/铜包钢放热焊接/覆铜钢棒,铜包钢源头厂家怎么选择 - 品牌推荐师
  • AI国际协作信任构建:溯源、水印与协作红队技术实践
  • k8s-tew:专为边缘与实验室环境设计的轻量级Kubernetes发行版
  • CANN ops-nn Heaviside阶跃函数算子
  • Flutter Bloc状态管理详解:企业级应用架构
  • Vue 3 + TypeScript + Pinia 实战:构建交互式赛马模拟器
  • 内存计算与数据去重技术优化实践
  • 从零构建个人技能树:技术能力可视化与系统化管理实践
  • 基于Node.js模拟iPad微信协议:openclaw-wechat项目部署与实战指南
  • 超算中心海光异构卡dcu bw 64G显卡报错 无法通过设置来解决的办法,通过新增服务器跳过显卡
  • CANN opbase aclnn API列表
  • AI气象预报:从数据驱动到端到端模型,构建智能天气推演系统
  • CANN/GE NPU模型装饰器
  • 基于OpenCV与MQTT的智能习惯追踪系统:从视觉识别到物联网联动
  • 施乐复印机维修难题:技术人员如何破局,尤里卡项目能否成功?
  • ARMv8/9异常处理与ESR_EL2寄存器详解
  • OpenClaw的模型和渠道详解
  • CSS Subgrid详解:网格布局的终极进化
  • 基于Next.js 14与AI SDK构建企业级全栈聊天应用架构解析
  • GitSubmodule避坑全攻略
  • 在多模型聚合平台观察不同模型的响应延迟与Token消耗对比
  • 开源技能库:结构化技能体系如何驱动个人与团队技术成长
  • 开源量化交易框架dsinyakov/quant:从回测到实盘的一体化平台实践
  • 【2026实战】Python+Go构建企业级AIAgent实战指南工业场景:代码审查Agent开发实战
  • CANN算子库基础框架安全声明
  • PyCharm性能调优避坑指南