openacc踩坑经验


用来得到GPU信息:

nvaccelinfo

用于统计花费时间

nvprof ./test

最终QT编译添加:

QMAKE_CXXFLAGS += -fopenacc -fcf-protection=none -fopt-info-optimized-omp -fno-stack-protector -foffload=-lm -lm -fno-fast-math -fno-associative-math
QMAKE_LFLAGS += -fopenacc -fcf-protection=none -fopt-info-optimized-omp -fno-stack-protector -foffload=-lm -lm -fno-fast-math -fno-associative-math

如果openacc 编译报错如下:

:-1: error: /tmp/ccg3hMuj.crtoffloadtable.o: warning: relocation against `__offload_func_table' in read-only section `.rodata'

不用理会

另外编译完成后 makefile里要去了O2、O3后, 随便修改openacccore部分的代码再编译,因为O2、O3会修改代码结构。


配环境可能用到的:

apt install nvptx-tools gcc-11-offload-nvptx

之前用到的一些编译指令:

nvc++ -acc other.cpp -o other -lpgmath -lgomp -lblas -lacchost -lpgm -lomp -lnvomp -lnvf -lnvhpcatm -laccdevice -lpgc -lnvc -lcudart
g++-11 testACC.cpp -fopenacc -fcf-protection=none -fopt-info-optimized-omp -o test -fno-stack-protector
g++-11 testACC.cpp -o test

可以输出汇编结果

export GOMP_DEBUG=1 

openacc经验:

最内层循环保证顺序,循环外不保证执行顺序

类成员变量不可以使用(不能传到显存),其他都可以

代码中被调用的函数需要在该行代码前面出现,应该避免递归

结构一般如下:

void init(){
	#pragma acc enter data create(...)
}
void update_device(){
	#pragma acc update device(...)
}
void update_host(){
	#pragma acc update self(...)
}
#pragma acc routine seq
void fun(){
}

#pragma acc routine seq
void fun1(){
	fun();
}

void fun2(){
...
	#pragma acc parallel num_gangs(256) num_workers (16) vector_length(32) present(...)
	{
		#pragma acc loop gang collapse(2) 
		for ...
		for ...
			#pragma acc loop worker
			for ...
				 #pragma acc loop vector collapse(2) 
				 for ...
				 for ...
				 {
				 	...
				 }
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧易风船长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值