GotoBLAS2编译,与openmp兼容性的解决方案

编译配置在makefile.rule里,在较新的机器上,首先要设置target和位宽,比如:
TARGET=NEHALEM
BINARY=64


然后,multi-threaded版本与openmp使用有潜在冲突:


1. 首先,必须禁用gotoblas2的cpu affinity选项,即设置
    NO_AFFINIY = 1
    否则,编译出的libgoto2,能在多核上并行运行,但是导致程序中其余使用openmp的并行段串行执行。实际的原因,是libgoto2运行时,重设了cpu affinity,影响其他openmp的线程全部绑定到一个cpu core上。


2. 多线程的libgoto2,不能开启GOMP_CPU_AFFINIY之类的环境变量。
    否则,libgoto2只能串行运行。即外部设置的cpu affinity同样影响gotoblas的线程,而且是负面的影响。
    
即使这样做,gotoblas和openmp可以同时正常工作,由于禁用了gotoblas的cpu affinity,gotoblas的性能相比设置这个选项,有20%以上的损失。可以说,这一块gotoblas的实现不友好,网上有直接把这个作为bug上报的。


目前推荐的做法:
设置 USE_THREAD = 0,强制关闭多线程,编译单线程gotoblas版本。然后在自己的应用程序中,按合适的方法划分负载,做并行化,调用gotoblas的kernel运算。目前看,这样做的性能和灵活性都有较大的优势。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值