• [问题求助] 【Atlas200DK】【多线程】使用acl.util.start_thread开启线程,debug无法跳入
    【功能模块】acl库【操作步骤&问题现象】使用acl.util.start_thread开启的线程,在使用VScode进行远程开发时,在debug的时候打断点,无法跳入开启的线程。而使用原生的多线程函数则可以跳入。
  • [问题求助] 【Atlas200DK】【多线程同步推理】aclmdlExecute推理报错107004
    【功能描述】1、这是个多人情绪识别项目,第一个模型为retinaface检测多个人脸,然后根据第一个模型推理得出的人脸个数启用多线程来进行第二个模型推理,前面已经成功测试过第二个模型串行执行,但是现在想用多线程来提高整体推理速度;2、第二个情绪模型推理线程函数已经建立了多个context容器来进行并行推理,线程函数如下图2所示。【操作步骤&问题现象】1、第二个情绪模型(在线程函数中)运行到模型推理时报错如下图一所示;2、我找了aclError相关的返回值定义,并没有发现这个107004错误的含义,请大佬帮我看一下这是啥原因。【截图信息】图一:图二:【日志信息】(可选,上传日志内容或者附件)
  • [新手课堂] Python爬虫的多线程使用方法
    1.构造线程构建新的线程有两种方法,一种是直接通过Thread方法构建一个线程,另一种时通过继承Thread类,重写run()方法构建。Thread(group=None,target=None,name=None,args=(),kwargs={})groups :线程组,这个暂时不用管,官方文档是这样说的:“group should be None”,所以我们可以不写就行。target :我们要使用线程的方法name :线程名args/kwargs :传给方法的参数。要注意,如果只有一个参数,元组记得加个“,”,否则就会报错。2.其他实例方法setDaemon(bool) :设置守护线程,参数默认为False,如果需要设置,则设置为True,将子线程设置成守护线程后,主线程结束,无论守护线程是否执行完毕,守护线程和主线程一起停止。看一下下面这个示例就知道了。守护线程有两种设置方法,守护线程一定要在线程执行前设置,否则无效。主任务结束后,守护线程其实还没有结束,但也一起随主线程结束了。start() :这个不用再多介绍了,就是启动线程join(timeout) :这个就是为了防止主线程直接结束,先阻塞当前进程,直到调用这个方法的进程终止,或者达到设置的可选参数timeout时限。setName(anme)/getName(name) :设置/获取线程名字isAlive() :返回线程是否在运行。enumerate() :返回正在运行的线程名activeCount() : 返回正在运行的线程数3.锁,可重入锁    具体方法如下:        acquire([timeout]): 请求获得锁定。使线程进入同步阻塞状态。        release(): 释放锁。使用前线程必须已获得锁定,否则将抛出异常。        关于线程的锁的案例,这里给出一个简单的指令锁的示例,主要看下,锁的作用。简单的线程代码如下:import timeimport threading  def spider(a):    print("启动任务")    print(f"执行的参数为{a}")    time.sleep(5)    print(f"结束任务{a}")    print('已经结束任务')  def main():    start_time = time.time()    for i in range(1,5):        s1 = threading.Thread(target=spider, args=(i,))        s1.start()        # 等待两个子线程结束再结束主线程    s1.join()    end_time = time.time()    total_time = end_time - start_time    print(f"所有任务结束,总耗时为:{total_time}") main()到这里已经简单的介绍完毕。
  • [新手课堂] Python爬虫的多线程使用方法
    1.构造线程构建新的线程有两种方法,一种是直接通过Thread方法构建一个线程,另一种时通过继承Thread类,重写run()方法构建。Thread(group=None,target=None,name=None,args=(),kwargs={})groups :线程组,这个暂时不用管,官方文档是这样说的:“group should be None”,所以我们可以不写就行。target :我们要使用线程的方法name :线程名args/kwargs :传给方法的参数。要注意,如果只有一个参数,元组记得加个“,”,否则就会报错。2.其他实例方法setDaemon(bool) :设置守护线程,参数默认为False,如果需要设置,则设置为True,将子线程设置成守护线程后,主线程结束,无论守护线程是否执行完毕,守护线程和主线程一起停止。看一下下面这个示例就知道了。守护线程有两种设置方法,守护线程一定要在线程执行前设置,否则无效。主任务结束后,守护线程其实还没有结束,但也一起随主线程结束了。start() :这个不用再多介绍了,就是启动线程join(timeout) :这个就是为了防止主线程直接结束,先阻塞当前进程,直到调用这个方法的进程终止,或者达到设置的可选参数timeout时限。setName(anme)/getName(name) :设置/获取线程名字isAlive() :返回线程是否在运行。enumerate() :返回正在运行的线程名activeCount() : 返回正在运行的线程数3.锁,可重入锁    具体方法如下:        acquire([timeout]): 请求获得锁定。使线程进入同步阻塞状态。        release(): 释放锁。使用前线程必须已获得锁定,否则将抛出异常。        关于线程的锁的案例,这里给出一个简单的指令锁的示例,主要看下,锁的作用。简单的线程代码如下:import timeimport threading  def spider(a):    print("启动任务")    print(f"执行的参数为{a}")    time.sleep(5)    print(f"结束任务{a}")    print('已经结束任务')  def main():    start_time = time.time()    for i in range(1,5):        s1 = threading.Thread(target=spider, args=(i,))        s1.start()        # 等待两个子线程结束再结束主线程    s1.join()    end_time = time.time()    total_time = end_time - start_time    print(f"所有任务结束,总耗时为:{total_time}") main()到这里已经简单的介绍完毕。
  • [技术干货] 鲲鹏+麒麟多线程测试
    鲲鹏+麒麟多线程测试介绍:UnixBench 是测试类 Unix 系统性能的老牌工具,也是常用的基准测试工具主要测试项目有:系统调用、读写、进程、图形化测试、2D、 3D、管道、运算、C库等系统基准性能提供测试数据。unixbench一个基于系统的基准测试工具,不单纯是CPU 内存 或者磁盘测试工具。测试结果不仅仅取决于硬件,也取决于系统、开发库、甚至是编译器。测试环境:测试环境版本泰山2280 2*48 kunpeng920 银河麒麟高级服务器麒麟操作系统V10UnixbenchV5.1.3安装:Unixbench 是一款开源工具,可直接在网上下载使用,下载连接如下:https://github.com/kdlucas/byte-unixbench/archive/v5.1.3.tar.gz1:将下载的软件包上传之服务器并解压2:进入解压好的文件夹进行编译3:修改参数由默认16线程测试,需要将Run文件maxCopies参数更改成系统的逻辑核数比如泰山2280 4826配置参数需要更改为96 cat /proc/cpuinfo  查看系统核数set number  显示文件行数,修改maxCopies保存退出。测试修改BIOS参数设置BIOS选项设置值Power PolicyPerformanceStream Write ModeAllocate share LLCCPU Prefetching ConfigurationEnabledCustom Refresh Rate64ms在安装路径下执行测试大约10分钟  ./Run -c 1  单线程测试多线程测试执行命令./Run -c 96 (-c后面的核数根据系统的逻辑核数修改,结果也可以在result里查看)
  • [问题求助] 【模型推理】多线程下模型推理速度受限
    在单线程下yolov3总共耗时10ms左右,但是在多线程下同时跑yolov3,单个耗时达到50ms;多线程开发是依据开发文档,每一个线程创建一个context与stream管理线程,请问如何定位此问题?谢谢答复。
  • [Atlas500] Atlas 500如何使用Python API接口进行多线程预处理图片和离线推理?
    【功能模块】如题,我现在在使用Python API进行Atlas 500的开发,但是离线推理速度比较慢,而且NPU利用率只有30%左右,请问各路大神Atlas 500可以使用多线程进行数据预处理和离线推理吗?如果可以的话多线程具体的处理步骤是怎样的,有相应的文档么?
  • [问题求助] 【Atlas 200 DK】【yolov4多线程】基于官方yolov3多线程的例子,改用yolov4模型,执行模型报错
    【功能模块】官方yolov3多线程的例子https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/n_performance/1_multi_process_thread/yolov3_coco_detection_multi_thread官方yolov4识别图片的例子https://gitee.com/ascend/samples/tree/master/cplusplus/level2_simple_inference/2_object_detection/YOLOV4_coco_detection_picture想基于yolov3多线程例子的框架,改用yolov4算法.【操作步骤&问题现象】1、按照官方手册操作,两个官方工程都可以正常运行.2、多线程的工程yolov3_coco_detection_multi_thread上替换为yolov3_coco_detection_multi_thread的yolov4.om模型文件之后,在模型执行的步骤出现报错怎样才能通过模型执行,到达后处理的步骤,这样我们就知道怎么改写了.多谢!【日志信息】[ERROR]  Execute model(../model/yolov4.om) error:145000[ERROR]  Execute model inference failed, error: 309[ERROR]  Inference frame failed, error 1
  • [算子开发] 【ResizeArea算子】【ST多线程测试】多线程出错,不知道怎么改了
    【功能模块】单线程时算子小数据性能强于tf,大数据时略差,所以开启多线程测试性能,结果出错了多线程方式:输入tensor的shape为  [batch,height,width,channel],我选择在batch(图片数量)的循环内对height(图片的高度)分片计算,当总数据量大于128k时开启多线程【操作步骤&问题现象】小数据单线正常,但是一旦有一个大数据进入多线程,程序就坏了我gdb调试后发现问题在多线程函数里但是怎么也定位不了问题求大佬帮我看看问题出在哪,救命
  • [算子开发] 【众智】【CANN】加入多线程后输出错误
    【功能模块】在运算输出四维张量的时候,对第二个for循环进行切片,但是输出数据发成错位,甚至有几个索引越界。在不改变代码的情况下重新运行ut测试,某个类型会测试通过,如截图中int64类型通过检验。再次运行又会全部报错。有其他同学在写相应算子的时候也出现了与我一样的错误,请问需要如何解决呢?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [算子开发] 【众智】【CANN】多线程测试错误
    我在进行多线程UT测试时,设定matrix的shape为[4,4,4,4],rhs的shape为[4,4,4,1],但最终输出结果不对,请问专家能不能帮忙查查错?
  • [新手课堂] 多线程中 synchronized 锁升级的原理是什么?
    synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置为其线程 id,再次进入的时候会先判断 threadid 是否与其线程 id 一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了 synchronized 锁的升级。锁的升级的目的:锁升级是为了减低了锁带来的性能消耗。在 Java 6 之后优化 synchronized 的实现方式,使用了偏向锁升级为轻量级锁再升级到重量级锁的方式,从而减低了锁带来的性能消耗。
  • [新手课堂] java多线程创建方式
    1.继承Thread类  (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()    方法称为执行体。  (2)创建Thread子类的实例,即创建了线程对象。  (3)调用线程对象的start()方法来启动该线程。2.实现Runnable接口 (1)定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。 (2)创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。 (3)调用线程对象的start()方法来启动该线程。  3.实现Callable接口(1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值(2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。(3)使用FutureTask对象作为Thread对象的target创建并启动新线程。(4)调用FutureTask对象的get()方法来获得子线程执行结束后的返回值4.使用线程池线程和数据库连接这些资源都是非常宝贵的资源。那么每次需要的时候创建,不需要的时候销毁,是非常浪费资源的。那么我们就可以使用缓存的策略,也就是使用线程池>三种方式的优缺点采用继承Thread类方式:   (1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。   (2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。采用实现Runnable接口方式:   (1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。   (2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。Runnable和Callable的区别:   (1)Callable规定的方法是call(),Runnable规定的方法是run().   (2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得   (3)call方法可以抛出异常,run方法不可以,因为run方法本身没有抛出异常,所以自定义的线程类在重写run的时候也无法抛出异常   (4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。 start()和run()的区别start()方法用来,开启线程,但是线程开启后并没有立即执行,他需要获取cpu的执行权才可以执行run()方法是由jvm创建完本地操作系统级线程后回调的方法,不可以手动调用(否则就是普通方法)
  • [算子开发] UT测试精度问题 以及 Eigen如何加多线程
    【功能模块】matrixsolve算子,ut测试【操作步骤&问题现象】1、进行ut测试时,小数据的计算结果是正确的,但大数据的计算结果会出现精度问题,float的shape为[128,128]和complex64的shape为[512,512]报错,但double和complex128是正确的,想请教一下这该怎么解决?2、因为在算子性能比tf差,所以要加多线程,但是因为用的Eigen函数来求解线性方程组,不知道该如何加多线程,请问这该如何解决呢?请教各位专家,问题该怎么解决,有点手足无措。。。【截图信息】大数据报错小数据结果如何加多线程【日志信息】(可选,上传日志内容或者附件)
  • [调试调优] 使用GeneratorDataset类实现数据加载支持多线程并发优化方案吗
    【功能模块】【操作步骤&问题现象】1、下图图示与文字描述信息不符,诱导理解上的矛盾。是均支持多进程和多线程并发吗【截图信息】【日志信息】(可选,上传日志内容或者附件)
总条数:53 到第
上滑加载中