当前位置: 首页 > 知识库问答 >
问题:

调试OpenMP Python C扩展卸载

危寒
2023-03-14

我正在使用建模工具箱Anuga,并已将其设置为运行并行支持。据我目前所知,背后的机制是Numpy被C中的模块扩展,这些模块通过

extra_args=['-fopenmp']

我已经开发并测试了一个脚本,可以通过mpirun-np4python运行

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.56       Driver Version: 418.56       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Quadro K2000        Off  | 00000000:01:00.0  On |                  N/A |
| 32%   48C    P8    N/A /  N/A |    403MiB /  1999MiB |      4%      Default |
+-------------------------------+----------------------+----------------------+

所以我

>

  • 在我的Ubuntu19.04上安装了gcc卸载nvptx,它读取gcc的第8版。我那么

    将编译器标志更改为

    extra_args=['-fopenmp','-fstack-Protector']

    x86_64-linux-gnu-gcc-pthread-share-Wl,-O1-Wl,-B符号-函数-Wl,-B符号-函数-Wl,-z, relro-fno-严格-混淆现象-DNDEBUG-g-fwrapv-O2-Wall-Wsted-time-D_FORTIFY_SOURCE=2-g-fdebug-前缀-map=/build/python2.7-rzpqx3/python2.7-2.7.16=.-fstack-保护者-强-W格式化-Werror=格式化-安全-Wl,-B符号-函数-Wl,-z, relro-Wdate-time-D_FORTIFY_SOURCE=2-g-fdebug-前缀-map=/build/python2.7-rzpqx3/python2.7-2.7.16=.-fstack-保护者-强-W格式化-Werror=格式化-安全构建/temp.linux-x86_64-2.7/anuga/实用程序/cg_ext. o-Lbuild/temp.linux-x86_64-2.7-o build/lib.linux-x86_64-2.7/anuga/实用程序/cg_ext.so-fopenmp-fstack-保护者

    什么时候

    build/lib。linux-x86_64-2.7/anuga/utilities/cg_ext.so linux vdso。所以1(0x00007fff7a9fa000)libgomp。所以1 =

    所以我假设一切都设置正确。我现在转到

    之前:

    void cg_daxpy(int N, double a, double *x, double *y)
    {
      int i;
      #pragma omp parallel for private(i)
      for(i=0;i<N;i++)
      {
        y[i]=y[i]+a*x[i];
      }
    }
    

    之后:

    void cg_daxpy(int N, double a, double *x, double *y)
    {
      int i;
      #pragma omp target device(0)
      {
      #pragma omp parallel for
      for(i=0;i<N;i++)
      {
        y[i]=y[i]+a*x[i];
      }
      }
    }
    

    然后,我重新编译一个安装并按如下方式运行脚本,希望获得分析信息:

    nvprof --print-gpu-trace --profile-child-processes --profile-from-start off -fo %p.nvprof python -m cProfile runDamBreak.py
    

    这将返回消息

    ==19444== Profiling application: orted --hnp --set-sid --report-uri 14 --singleton-died-pipe 15 -mca state_novm_select 1 -mca ess hnp -mca pmix ^s1,s2,cray,isolated
    ==19444== Profiling result:
    No kernels were profiled.
    

    总之,我知道编译程序可以理解pragmas,但是没有任何段发送到GPU。非常感谢任何关于如何进一步调试的提示。

    顺致敬意,

    塞巴斯蒂安


  • 共有1个答案

    晁国发
    2023-03-14

    大多数gcc/llvm/clang的二进制包都支持GPU的禁用,您需要编译自己的编译器来启用它。

    • clang:https://hpc-wiki.info/hpc/Building_LLVM/Clang_with_OpenMP_Offloading_to_NVIDIA_GPUs
    • gcc:https://kristerw.blogspot.com/2017/04/building-gcc-with-support-for-nvidia.html

    据我所知,gcc不能通过卸载产生共享库,所以如果你想为Python创建一个C扩展,你可能会被llvm卡住。

    然而,我面临着一个类似的问题:我使用llvm,卸载肯定启用。每当我试图在Cython生成的代码中使用OpenMP目标时,它根本找不到任何设备(omp_get_num_devices()返回0)。在普通的C程序中运行完全相同的代码确实工作得很好,即使在函数调用omp_get_num_devices()时显式地使用. so。这真的很奇怪。

     类似资料:
    • 扩展程序可以利用 Chrome DevTools 为网页提供的一样的调试优势,但它们具有独特的行为属性。成为主扩展调试器需要了解以下行为,扩展组件如何相互配合以及在哪里处理错误。本教程使开发人员对调试扩展有基本的了解。 找到日志 扩展由许多不同的组件组成,这些组件有各自的职责。在此处下载损坏的扩展程序,以开始查找不同扩展程序组件的错误日志。 后台脚本 Background Script 访问 ch

    • ============================================================= [Linux] AMH 7.1 https://amh.sh [lnmp-3.6 admin] [OK] lnmp-3.6 is already installed. pecl_imagick-3.7 [Linux] AMH 7.1 https://amh.sh [pecl_

    • 我有一个eclipse插件,创建了一个新的扩展点,所有设置都显示在链接中:http://www.vogella.com/tutorials/EclipseExtensionPoint/article.html 现在使用这个扩展点创建了一个带有扩展的新插件,也显示在上面的链接中。现在,当我在调试环境中运行它时,一切正常,但当我将这两个插件从Eclipse导出到插件jar文件,并将其用于我的应用程序时

    • 我正在尝试使用WSL在Windows中调试vscode扩展。似乎prelaunchtask正在使用cmd。exe参数,这会导致预启动任务在bash中失败。 执行任务:npm run watch /bin/bash: /d:没有这样的文件或目录终端进程终止与退出代码: 127 终端将被任务重复使用,按任意键关闭它。 有没有想过如何强制调试终端正确发出bash参数?

    • TiDB Scheduler 是 Kubernetes 调度器扩展 的 TiDB 实现。TiDB Scheduler 用于向 Kubernetes 添加新的调度规则。本文介绍 TiDB Scheduler 扩展调度器的工作原理。 TiDB 集群调度需求 TiDB 集群包括 PD,TiKV 以及 TiDB 三个核心组件,每个组件又是由多个节点组成,PD 是一个 Raft 集群,TiKV 是一个多 R

    • App Shell 模型 App Shell 架构是构建 PWA 应用的一种方式,它通常提供了一个最基本的 Web App 框架,包括应用的头部、底部、菜单栏等结构。顾名思义,我们可以把它理解成应用的一个「空壳」,这个「空壳」仅包含页面框架所需的最基本的 HTML 片段,CSS 和 javaScript,这样一来,用户重复打开应用时就能迅速地看到 Web App 的基本界面,只需要从网络中请求、加