Gcc 在对象文件中忽略OMP parrallel
注意:我不太了解对象文件、链接或制作文件。我只懂运行一个程序 我正在做一个GPU加速版本的我以前的项目,工作没有问题。我目前正在测试一个用于其他CUDA程序的make文件的修改版本 文件:Gcc 在对象文件中忽略OMP parrallel,gcc,linker,openmp,object-files,Gcc,Linker,Openmp,Object Files,注意:我不太了解对象文件、链接或制作文件。我只懂运行一个程序 我正在做一个GPU加速版本的我以前的项目,工作没有问题。我目前正在测试一个用于其他CUDA程序的make文件的修改版本 文件: exe: main.o b.o gcc -fopenmp -L /usr/local/cuda/lib64 -o exe main.o b.o -lcudart -lglfw -lGL main: gcc -fopenmp -o main.o main.c -Ofast -march=
exe: main.o b.o
gcc -fopenmp -L /usr/local/cuda/lib64 -o exe main.o b.o -lcudart -lglfw -lGL
main:
gcc -fopenmp -o main.o main.c -Ofast -march=native -mtune=native -lglfw -lGL -I /usr/local/cuda/include
b.o: b.cu b.h
nvcc -Xcompiler -fPIC -ccbin clang-3.8 -c -o b.o b.cu
b、 cu是包含一些测试函数的CUDA文件;它还没有产生任何效果
当我运行编译后的程序时,它只使用一个内核,并且以1/4的帧速率运行(这是在4核cpu上所期望的)
我在谷歌上搜索了尽可能多的问题,但我没有找到任何适合我的结果
系统信息:
操作系统:Ubuntu 18.04仿生
CPU:AMD A8-3850
GPU:GeForce GTX 1060 6GB
内存:7974MiB
GCC:7.3.0请编辑您的问题,以使makefile的内容更加清晰。很重要的一点是,你必须弄清楚在哪里有空格(“”)、制表符(“\t”)和换行符(\n”)。StackOverflow编辑器使这一点变得非常困难,因为它对空白的处理有些令人惊讶,但您必须以某种方式避免对何处存在任何疑问。其他人,具有在此处引用make文件的最佳实践经验,请提出如何在此处有意义地、有帮助地显示make文件。我(希望)问一个多余的问题,但实际上您在非CUDA代码中使用了
OpenMP pragma
指令,对吗?不仅仅是因为你使用了OpenMP
compile flag,就希望你的代码能够在四个内核上完全并行运行?@Christian W是的,我使用了#pragma parralel、simd等。我有另一个版本可以在所有内核上运行,但是当我链接CUDA文件时,它就停止工作了。@Yunnosch我会尝试使这些eddits运行