preda / gpuowl

GPU Mersenne primality test.
GNU General Public License v3.0
176 stars 39 forks source link

Unable to build gpuowl with latest commit #186

Closed ghost closed 4 years ago

ghost commented 4 years ago

Config details: GPU: Radeon VII Driver: ROCm 3.5

Repo steps: git clone https://github.com/preda/gpuowl.git cd gpuowl sed -i 's/std\:\:filesystem/std\:\:experimental\:\:filesystem/g' common.h
sed -i 's//<experimental\/filesystem>/g' main.cpp sed -i 's/std\:\:filesystem/std\:\:experimental\:\:filesystem/g' main.cpp
sed -i 's//<experimental\/filesystem>/g' checkpoint.cpp sed -i 's/std\:\:filesystem/std\:\:experimental\:\:filesystem/g' checkpoint.cpp sed -i 's//<experimental\/filesystem>/g' File.h sed -i 's/std\:\:filesystem/std\:\:experimental\:\:filesystem/g' File.h
sed -i 's//<experimental\/filesystem>/g' common.cpp sed -i 's//<experimental\/filesystem>/g' ProofSet.h sed -i 's//<experimental\/filesystem>/g' Worktodo.cpp make

Observed error g++ -MT Worktodo.o -MMD -MP -MF .d/Worktodo.Td -Wall -O2 -std=c++17 -c -o Worktodo.o Worktodo.cpp In file included from Worktodo.cpp:3:0: Worktodo.h: In static member function ‘static Task Worktodo::makeVerify(Args&, std::__cxx11::string)’: Worktodo.h:26:95: sorry, unimplemented: non-trivial designated initializers not supported static Task makeVerify(Args& args, string path) { return Task{Task::VERIFY, .verifyPath=path}; } ^ Worktodo.cpp: In function ‘std::optional {anonymous}::parse(const string&)’: Worktodo.cpp:26:98: sorry, unimplemented: non-trivial designated initializers not supported if (sscanf(line.c_str(), "Verify=%255s", buf) == 1) { return Task{Task::VERIFY, .verifyPath=buf}; } ^ Makefile:30: recipe for target 'Worktodo.o' failed make: *** [Worktodo.o] Error 1

Regression details gpuowl commit ID --> 5c5dc666 --> Pass gpuowl commit ID --> efbbcbf4b --> Fail

Can someone help with this issue?

selroc commented 4 years ago

Which OS? and which g++ version?

ghost commented 4 years ago

siva@sponnusa:~$ g++ --version g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 Copyright (C) 2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

valeriob01 commented 4 years ago

Try updating to at least g++ version 8, version 9 is better.

poomaddu commented 4 years ago

@valeriob01 , We updated the g++ version to 9 and tried. We got below error.

echo \"git describe --long --dirty --always\" > version.new diff -q -N version.new version.inc >/dev/null || mv version.new version.inc echo Version: cat version.inc Version: "v6.11-366-gf887d6e-dirty" /usr/bin/g++-9 -MT Worktodo.o -MMD -MP -MF .d/Worktodo.Td -Wall -O2 -std=c++17 -c -o Worktodo.o Worktodo.cpp In file included from Worktodo.h:6, from Worktodo.cpp:3: Args.h:11:31: error: ‘namespace fs = std::std::filesystem;’ conflicts with a previous declaration 11 | namespace fs = std::filesystem; | ^ In file included from Args.h:5, from Worktodo.h:6, from Worktodo.cpp:3: common.h:30:45: note: previous declaration ‘namespace fs = std::experimental::std::experimental::filesystem;’ 30 | namespace fs = std::experimental::filesystem; | ^ In file included from Worktodo.h:6, from Worktodo.cpp:3: Args.h:43:7: error: ‘path’ in namespace ‘fs’ does not name a type 43 | fs::path resultsFile = "results.txt"; | ^~~~ Args.h:44:7: error: ‘path’ in namespace ‘fs’ does not name a type 44 | fs::path masterDir; | ^~~~ Args.h:45:7: error: ‘path’ in namespace ‘fs’ does not name a type 45 | fs::path tmpDir = "."; | ^~~~ Args.h:46:7: error: ‘path’ in namespace ‘fs’ does not name a type 46 | fs::path proofResultDir = "proof"; | ^~~~ Worktodo.cpp: In static member function ‘static std::optional Worktodo::getTask(Args&)’: Worktodo.cpp:118:13: error: ‘class Args’ has no member named ‘masterDir’ 118 | if (!args.masterDir.empty()) { | ^~~~~ Worktodo.cpp:119:36: error: ‘class Args’ has no member named ‘masterDir’ 119 | fs::path globalWorktodo = args.masterDir / worktodoTxt; | ^~~~~ Makefile:30: recipe for target 'Worktodo.o' failed make: *** [Worktodo.o] Error 1

valeriob01 commented 4 years ago

But I see in your previous post that you have local modifications:

sed -i 's/std::filesystem/std::experimental::filesystem/g' common.h
sed -i 's//<experimental/filesystem>/g' main.cpp
sed -i 's/std::filesystem/std::experimental::filesystem/g' main.cpp
sed -i 's//<experimental/filesystem>/g' checkpoint.cpp
sed -i 's/std::filesystem/std::experimental::filesystem/g' checkpoint.cpp
sed -i 's//<experimental/filesystem>/g' File.h
sed -i 's/std::filesystem/std::experimental::filesystem/g' File.h
sed -i 's//<experimental/filesystem>/g' common.cpp
sed -i 's//<experimental/filesystem>/g' ProofSet.h
sed -i 's//<experimental/filesystem>/g' Worktodo.cpp

that's why your version is marked as -dirty, try removing the modifications or re-clone from repository.

valeriob01 commented 4 years ago

It is also possible that your OS lacks the the libstdc++ library.

valeriob01 commented 4 years ago

https://packages.ubuntu.com/bionic/libstdc++-4.8-dev

ghost commented 4 years ago

Hi @valeriob01, After upgrading the g++ version I'm able to build and run without any modifications with ROCm 3.3 driver.

ghost commented 4 years ago

But with ROCm 3.5 driver I'm observing the below issue

/usr/bin/g++-9 -o gpuowl Pm1Plan.o GmpUtil.o Worktodo.o common.o main.o Gpu.o clwrap.o Task.o checkpoint.o timeutil.o Args.o state.o Signal.o FFTConfig.o AllocTrac.o gpuowl-wrap.o sha3.o md5.o -lstdc++fs -lOpenCL -lgmp -pthread -L/opt/rocm-3.3.0/opencl/lib/x86_64 -L/opt/rocm-3.1.0/opencl/lib/x86_64 -L/opt/rocm/opencl/lib/x86_64 -L/opt/amdgpu-pro/lib/x86_64-linux-gnu -L. /usr/bin/ld: cannot find -lOpenCL collect2: error: ld returned 1 exit status Makefile:19: recipe for target 'gpuowl' failed make: *** [gpuowl] Error 1

valeriob01 commented 4 years ago

You have to modify your Makefile to include ROCm 3.5 path: -L/opt/rocm-3.5.0/opencl/lib/x86_64

ghost commented 4 years ago

Okay but from ROCm 3.5 opencl .so files are present in /opt/rocm/opencl/lib not in /opt/rocm/opencl/lib/x86_64

I modified the make file accordingly and it is working fine now.

Closing this issue.

valeriob01 commented 4 years ago

Ok, I am still running ROCm 3.3