Data.table: Verwenden Sie gcc unter macOS als Standard-Compiler?

Erstellt am 31. Okt. 2019  ·  5Kommentare  ·  Quelle: Rdatatable/data.table

Nachdem ich die Compiler-Anweisungen für macOS gelesen und ausprobiert hatte, fragte ich mich, ob gcc von Homebrew eine bessere Alternative als llvm .

Wie im Wiki angegeben, verursacht ein OpenMP-fähiger Compiler Probleme mit anderen Paketen. Es ist ziemlich umständlich, den llvm-Compiler ständig zu kommentieren, wenn man andere Pakete kompilieren möchte.

Derzeit verwende ich das folgende Setup mit gcc das über brew install gcc installiert wurde. Bisher keine Probleme für Pakete.

CXX_STD = CXX14

CC=ccache /usr/local/bin/gcc-9
CC11=ccache /usr/local/bin/gcc-9
CC14=ccache /usr/local/bin/gcc-9
CXX=ccache /usr/local/bin/g++-9
CXX11=ccache /usr/local/bin/g++-9
CXX14=ccache /usr/local/bin/g++-9
## -O3 should be faster than -O2 (default) level optimisation ..
CFLAGS=-g -O3 -Wall -pedantic -std=gnu99 -mtune=native -pipe
CXXFLAGS=-g -O3 -Wall -pedantic -std=c++11 -mtune=native -pipe

Außerdem verwende ich ccache wie Sie sehen können. In Kombination mit den folgenden Einstellungen für ~/.ccache/ccache.conf ich ein robustes C-Compiler-Setup, das das Caching unterstützt.

max_size = 5.0G
# important for R CMD INSTALL *.tar.gz as tarballs are expanded freshly -> fresh ctime
sloppiness = include_file_ctime
# also important as the (temp.) directory name will differ
hash_dir = false

(Der ccache Teil stammt aus diesem Beitrag von Dirk.)

install platform-specific question

Hilfreichster Kommentar

Ich verwende den unter https://github.com/rmacoslib/r-macos-rtools vorgeschlagenen Ansatz. Ich verwende den clang7 bei vorgesehen https://cloud.r-project.org/bin/macosx/tools und haben nur die folgenden in angeben ~/.R/Makevars :

CC=/usr/local/clang7/bin/clang
CXX=/usr/local/clang7/bin/clang++
CXX1X=/usr/local/clang7/bin/clang++
CXX11=/usr/local/clang7/bin/clang++
CXX14=/usr/local/clang7/bin/clang++
CXX17=/usr/local/clang7/bin/clang++
LDFLAGS=-L/usr/local/clang7/lib

Und alles funktioniert reibungslos und konsequent.

Ich bin mir nicht sicher, warum die macOS-Anweisungen so kompliziert aussehen, was Anfängern, die macOS verwenden, leicht schwer fällt, selbst die neuesten data.table von der Quelle zu installieren.

Alle 5 Kommentare

Ich verwende den unter https://github.com/rmacoslib/r-macos-rtools vorgeschlagenen Ansatz. Ich verwende den clang7 bei vorgesehen https://cloud.r-project.org/bin/macosx/tools und haben nur die folgenden in angeben ~/.R/Makevars :

CC=/usr/local/clang7/bin/clang
CXX=/usr/local/clang7/bin/clang++
CXX1X=/usr/local/clang7/bin/clang++
CXX11=/usr/local/clang7/bin/clang++
CXX14=/usr/local/clang7/bin/clang++
CXX17=/usr/local/clang7/bin/clang++
LDFLAGS=-L/usr/local/clang7/lib

Und alles funktioniert reibungslos und konsequent.

Ich bin mir nicht sicher, warum die macOS-Anweisungen so kompliziert aussehen, was Anfängern, die macOS verwenden, leicht schwer fällt, selbst die neuesten data.table von der Quelle zu installieren.

Für mich ist der gcc -Ansatz der bisher schnellste und stabilste.
Ich bin mir jedoch nicht sicher, welche anderen Vorbehalte dies unter macOS einführen könnte. 🤔

@jangorecki Wer ist für den C-bezogenen Teil in {data.table} verantwortlich oder hat möglicherweise genauere Kenntnisse darüber, was sich hinter den Kulissen abspielt?

gcc wird der Compiler in allen wichtigen Linux-Distributionen verwendet. Gibt es irgendetwas, das ihn daran hindert, ihn unter MacOS als Standard festzulegen?

Es gibt keine einzelne Person, die für den C-Teil von DT verantwortlich ist. Matt und Arun haben die meisten C-Sachen geschrieben. AFAIR @arunsrinivasan ist auf macOS, daher könnten seine Ansichten zu diesem Thema sehr hilfreich sein.

Ich bevorzuge es, gcc auch selbst zu verwenden, aber es kommt vor, dass Clang unter MacOS die Standardeinstellung ist. Der Versuch, den Standard-Compiler für Mac-Benutzer global zu ändern, würde mehr Probleme verursachen als er löst. Ich denke also nicht, dass eine Änderung der Standardeinstellung der richtige Weg ist.
Nachdem https://github.com/Rdatatable/data.table/pull/4735 zusammengeführt wurde (und bereits als 1.13.2 in CRAN veröffentlicht wurde), sollten Benutzer in der Lage sein, ihren Build von data.table einfacher anzupassen. Daher sollte es Ihren Anwendungsfall ansprechen. Wenn nicht, lassen Sie es uns bitte wissen.

Hi @ pat-s. Vielen Dank für Ihre Eingabe hier. Ich möchte nur hinzufügen, dass es sehr willkommen wäre, wenn die MacOS-Anweisungen auf unserer Installationsseite vereinfacht werden könnten. Bitte nehmen Sie die Änderungen direkt im Wiki vor. Es sind keine Berechtigungen erforderlich, um das Wiki zu ändern. Genau aus diesem Grund haben wir es zu einem Wiki gemacht.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen