当前位置:首页|资讯|编程|文心一言

北太天元混合编程来提速

作者:卢朓发布时间:2024-07-21

模拟退火算法求解旅行商问题:一场寻找最短路径的数字“旅行” - 哔哩哔哩 (bilibili.com) 

在上面文章的代码的循环部分, 也就是寻找新的路径,然后根据温度等因素判断是否以一定概率采纳新的路径这一部分特别耗费时间, 能否写成一个bex函数来完成这个任务呢, 我们可以使用文心一言, 让它写一个mex函数(这个相当于我们的bex函数)


我们把这个函数的 mex 改成 bex, 把mx 改成bx , 名字取成 tuihuo.c  ,  然后用北太天元来编译

我用 bex("tuihuo.c") 来编译, 但是却看到无法找到bex.h , 看报错中出现的

gcc -o tuihuo.bexw64 -fPIC -shared -O3 -IC:\baltamatica\include     

于是到 C:\baltamatica\include 下查看, 发现 bex.h 所在的位置是 C:\baltamatica\include\bex\bex.h

于是把 tuihuo.c 中的 #include "bex.h"  改成 #include "bex/bex.h"

这是发现C:\baltamatica\include\bex\bex.h 的展示
这个报错说明,还有 mxArray 没有改成bxArray
把mxArray 改成 bxArray
这个报错说明 exp 这个函数需要头文件 math.h , 于是在 tuihuo.c 增加 #include <math.h>
这个报错我一时没有看明白,知道是确实头文件写不起来是哪一个了, 于是取问了文心一言
文心一言回答说缺少的是 stdlib.h , 于是增加 #include <stdlib.h>
按照建议把bexErrMsgIdAndTxt 修改成了 bxErrMsgTxt, 但是 bxGetScalar 是不是要改成bxGetNzmax, 这个感觉要去查看一个SDK的开发文档
在北太天元的浏览器帮助里找到了上面的信息, 给出了SDK文档的下载地址
下载了文档,打开看了看, 是这样的
感觉 bxGetDoubles 可能适合来替换 bxGetScalar
看 bxGetDoubles 返回的是double*, 因此写成了30行这样的形式. 
还有 bxErrMsgTxt的输入参数是一个,因此从原来两个参数改成如下的一个参数
bxErrMsgTxt 输入参数改成了一个, 注意 注意17行末的双引号和18行首的双引号相当于把两个字符串连接起来. 

经过上面的修改,再次运行 bex("tuihuo.c") , 已经编译成功, 如下图所示, 然后测试了一下, 

编译成功, 测试发现使用也正常
把原来的这段for循环代码用 注释点, 然后换成 BEXFunction tuihuo 来做(也就是第76行),
执行还是测试10个目标点的情况

现在计算的速度大大的加快了, 因此可以可以计算更多的目标点了, 例如 100个目标点

利用BEXFunction提速后, 用模拟退火算法计算的100目标点的问题

后面, 我再用个视频解释一下吧. 

环境也许需要设置一下, 可以参考 北太天元/C++混合编程 - 哔哩哔哩 (bilibili.com)

最简混合编程-用北太天元吧_哔哩哔哩_bilibili  的视频网址如下: 

https://www.bilibili.com/video/BV1r64y1H7QN/?share_source=copy_web&;spm_id_from=333.976.0.0




Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1