View Issue Details

IDProjectCategoryView StatusLast Update
0001759OpenFOAM[All Projects] Bugpublic2015-06-23 11:28
Reporteruser1175Assigned Tohenry 
PrioritynormalSeveritymajorReproducibilityalways
Status resolvedResolutionfixed 
Platformppc64elOSUbuntu/DebianOS Version15.04
Product Version 
Fixed in Version 
Summary0001759: OpenFOAM does not build on ppc64le architecture
DescriptionPpc64le is the new ABI for POWER architecture. It now runs on little endian mode, as started to run on POWER8 processors. For more information about it, check [1].

Currently openFOAM does not build on this architecture, and says that ppc64le (from uname -m) architecture is not known.

I am adding a patch that adds initial support for this architecture.



[1] https://wiki.debian.org/ppc64el#ABI_Documentation
Steps To Reproduce# wmake all
Additional InformationIf you want access to a ppc64el machine, we are please to give you one.

Just ask it at http://openpower.ic.unicamp.br/minicloud/ and says that this is related to OpenFOAM porting.
TagsNo tags attached.

Activities

user1175

2015-06-22 21:21

 

enable_ppc64el_patch.patch (5,503 bytes)
Index: OpenFOAM-2.4.0/etc/config/settings.sh
===================================================================
--- OpenFOAM-2.4.0.orig/etc/config/settings.sh	2015-05-22 05:50:30.000000000 -0400
+++ OpenFOAM-2.4.0/etc/config/settings.sh	2015-06-22 16:05:15.443587651 -0400
@@ -135,6 +135,16 @@
         export WM_LDFLAGS='-m64'
         ;;
 
+    ppc64le)
+        WM_ARCH=linuxPPC64le
+        export WM_COMPILER_LIB_ARCH=64
+        export WM_CC='gcc'
+        export WM_CXX='g++'
+        export WM_CFLAGS='-m64 -fPIC'
+        export WM_CXXFLAGS='-m64 -fPIC'
+        export WM_LDFLAGS='-m64'
+        ;;
+
     *)
         echo Unknown processor type `uname -m` for Linux 1>&2
         ;;
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/X
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/X	2015-06-22 16:11:53.351656785 -0400
@@ -0,0 +1,3 @@
+XFLAGS     =
+XINC       = $(XFLAGS) -I/usr/X11R6/include
+XLIBS      = -L/usr/X11R6/lib64 -lXext -lX11
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c	2015-06-22 16:11:53.771656890 -0400
@@ -0,0 +1,16 @@
+.SUFFIXES: .c .h
+
+cWARN        = -Wall
+
+cc          = gcc -m64 -mcpu=power8
+
+include $(RULES)/c$(WM_COMPILE_OPTION)
+
+cFLAGS      = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC
+
+ctoo        = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $$SOURCE -o $@
+
+LINK_LIBS   = $(cDBUG)
+
+LINKLIBSO   = $(cc) -shared
+LINKEXE     = $(cc) -Xlinker --add-needed -Xlinker -z -Xlinker nodefs
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c++
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c++	2015-06-22 16:11:54.019656952 -0400
@@ -0,0 +1,21 @@
+.SUFFIXES: .C .cxx .cc .cpp
+
+c++WARN     = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast
+
+CC          = g++ -m64 -mcpu=power8
+
+include $(RULES)/c++$(WM_COMPILE_OPTION)
+
+ptFLAGS     = -DNoRepository -ftemplate-depth-100
+
+c++FLAGS    = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC
+
+Ctoo        = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $$SOURCE -o $@
+cxxtoo      = $(Ctoo)
+cctoo       = $(Ctoo)
+cpptoo      = $(Ctoo)
+
+LINK_LIBS   = $(c++DBUG)
+
+LINKLIBSO   = $(CC) $(c++FLAGS) -shared
+LINKEXE     = $(CC) $(c++FLAGS) -Xlinker --add-needed
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c++Debug
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c++Debug	2015-06-22 16:11:54.447657059 -0400
@@ -0,0 +1,2 @@
+c++DBUG    = -ggdb3 -DFULLDEBUG
+c++OPT      = -O0 -fdefault-inline
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c++Opt
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c++Opt	2015-06-22 16:11:54.735657131 -0400
@@ -0,0 +1,2 @@
+c++DBUG     =
+c++OPT      = -O3
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c++Prof
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/c++Prof	2015-06-22 16:11:55.123657228 -0400
@@ -0,0 +1,2 @@
+c++DBUG    = -pg
+c++OPT     = -O2
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/cDebug
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/cDebug	2015-06-22 16:11:55.515657326 -0400
@@ -0,0 +1,2 @@
+cDBUG       = -ggdb -DFULLDEBUG
+cOPT        = -O1 -fdefault-inline -finline-functions
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/cOpt
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/cOpt	2015-06-22 16:11:55.871657415 -0400
@@ -0,0 +1,2 @@
+cDBUG       =
+cOPT        = -O3
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/cProf
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/cProf	2015-06-22 16:11:56.207657499 -0400
@@ -0,0 +1,2 @@
+cDBUG       = -pg
+cOPT        = -O2
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/general
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/general	2015-06-22 16:11:56.367657539 -0400
@@ -0,0 +1,10 @@
+CPP        = cpp -traditional-cpp $(GFLAGS)
+LD         = ld -m elf64lppc
+
+PROJECT_LIBS = -l$(WM_PROJECT) -ldl
+
+include $(GENERAL_RULES)/standard
+
+include $(RULES)/X
+include $(RULES)/c
+include $(RULES)/c++
Index: OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/mplibHPMPI
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ OpenFOAM-2.4.0/wmake/rules/linuxPPC64leGcc/mplibHPMPI	2015-06-22 16:11:56.659657612 -0400
@@ -0,0 +1,3 @@
+PFLAGS     =
+PINC       = -I$(MPI_ARCH_PATH)/include -D_MPICC_H
+PLIBS      = -L$(MPI_ARCH_PATH)/lib/linux_amd64 -lmpi

henry

2015-06-22 21:32

manager   ~0004980

I am happy to include support for the ppc64le architecture. What is the performance of OpenFOAM like on POWER8 compared to Xeon for example?

henry

2015-06-23 11:28

manager   ~0004982

Resolved by commit a5a5397de5057899778f23081ed5eb5b76ed6842

Issue History

Date Modified Username Field Change
2015-06-22 21:21 user1175 New Issue
2015-06-22 21:21 user1175 File Added: enable_ppc64el_patch.patch
2015-06-22 21:32 henry Note Added: 0004980
2015-06-23 11:28 henry Note Added: 0004982
2015-06-23 11:28 henry Status new => resolved
2015-06-23 11:28 henry Resolution open => fixed
2015-06-23 11:28 henry Assigned To => henry