You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell与OpenACC混合二进制程序为何触发SEGV错误?

GCC+OpenACC混合程序正常运行,但Haskell+OpenACC混合程序触发SEGV错误

我最近碰到个棘手的问题:用GCC搭配OpenACC构建的混合二进制程序能正常跑起来,但换成Haskell和OpenACC组合的混合程序时,一运行就触发段错误(SEGV)。下面给大家梳理下两种场景的具体情况:

正常运行的GCC+OpenACC场景

这个场景下,构建和运行流程全程顺畅,没有任何异常:

  • 执行构建命令:
    $ make gcc
    main.c -ldl
    /opt/pgi/linux86-64/17.10/bin/pgcc -shared -fpic -fast -acc -ta=tesla,cc60 -o libtestacc.so acc.c
    
  • 运行程序的命令及输出:
    $ make run
    LD_LIBRARY_PATH=./ ACC_DEVICE_TYPE=NVIDIA ACC_DEVICE_NUM=1 PGI_ACC_NOTIFY=1 ./a.out
    *** acc_init called!
    

可以看到OpenACC初始化正常完成,程序没有崩溃。

触发SEGV的Haskell+OpenACC场景

但用Haskell与OpenACC构建的混合二进制程序,运行时直接触发段错误。目前我初步怀疑几个排查方向:

  • Haskell的FFI(Foreign Function Interface)在调用OpenACC共享库时,是否正确处理了OpenACC的运行时上下文初始化?
  • OpenACC运行时库在Haskell环境下的加载顺序,是否和GCC场景存在差异,导致初始化不完整?
  • Haskell的内存管理模型和OpenACC的设备内存交互是否存在冲突,比如内存释放时机不匹配?

有没有遇到过类似问题的朋友,能给点排查思路或者解决方案?

内容的提问来源于stack exchange,提问作者masterq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:47:24