[GO] Accélérer la compilation C / C ++ avec ccache

Go-sqlite3, ce qui est utile lorsqu'il s'agit de sqlite3 en langage Go, mais la partie pilote est écrite en langage C. Il n'y a pas de problème particulier avec Linux, mais pour une raison quelconque, la compilation sur Mac prend du temps, c'est donc un mémo que j'ai étudié si je pouvais accélérer la compilation.

Qu'est-ce que ccache

ccache est un outil qui met en cache les données de compilation C / C ++ pour accélérer la deuxième compilation et les suivantes.

introduction

Facile à installer avec divers gestionnaires de paquets

Pour Mac

$ brew install ccache

Pour Debian

$ sudo apt install ccache

Utilisation de base

Mettez simplement la commande ccache devant le compilateur que vous utilisez tout le temps

Utiliser avec gcc

$ ccache gcc sample.c

Utiliser avec clang

$ ccache clang sample.c

Utilisé avec g ++

$ ccache g++ sample.cpp

Utilisé avec clang ++

$ ccache clang++ sample.cpp

Essayez de l'utiliser pour la compilation du langage Go

Le compilateur C / C ++ utilisé dans go build peut être spécifié par les variables d'environnement $ CC et $ CXX. En utilisant cela, essayez d'utiliser ccache pour compiler C / C ++ utilisé dans les bibliothèques de langage Go.

Faire un dossier d'appel

Ce serait bien s'il pouvait être spécifié comme CC = 'ccache gcc', mais si cela reste tel quel, une erreur se produira, alors créez un fichier à appeler.

$ sudo echo '#!/bin/bash
exec ccache gcc $@' > /usr/local/bin/ccache-gcc
$ sudo chmod +x /usr/local/bin/ccache-gcc

Essayez de compiler

$ CC=ccache-gcc go build sample.go

Vérification

Ceci est un exemple qui importe simplement go-sqlite3

package main

import (
	"fmt"

	_ "github.com/mattn/go-sqlite3"
)

func main() {
	fmt.Println("hello, world.")
}

Comme c'est la deuxième fois et plus tard qu'il est mis en cache et que la compilation s'accélère, le résultat de la deuxième fois est publié.

Compiler avec gcc (sans ccache)

$ CC=gcc time go build sample.go

real	0m42.89s
user	0m39.95s
sys 	0m2.14s

Compiler avec clang (sans ccache)

$ CC=clang time go build sample.go

real	0m36.53s
user	0m32.93s
sys 	0m1.75s

Compiler avec gcc avec ccache

$ CC=ccache-gcc time go build sample.go

real	0m4.143s
user	0m2.942s
sys 	0m1.194s

Compiler avec clang avec ccache

$ CC=ccache-clang time go build sample.go

real	0m3.80s
user	0m2.10s
sys 	0m1.24s

Résumé

Vous pouvez être heureux si vous installez ccache et écrivez ʻexport CC = ccache-gcc` dans bashrc.

Recommended Posts

Accélérer la compilation C / C ++ avec ccache
Accélérez grossièrement Python avec numba
En forme de conteneur réalisé avec C # 1
Mémo de "Cython-Accélérer Python en fusionnant avec C"
La comparaison et l'optimisation des vitesses BASIC et C et assembleur jouent avec IchigoJam
Utilisation de X11 avec ubuntu18.04 (langage C)
Comparaison de vitesse de Python, Java, C ++
Essayez Google Mock avec C
Compilation Python avec pyqt deploy
Accélérez la commande netstat
Formater la source du langage C avec pycparser
Compilation facile de Python avec NUITKA-Utilities
N'écrivez pas Python si vous voulez l'accélérer avec Python
[Python] Hit Keras depuis TensorFlow et TensorFlow depuis c ++ pour accélérer l'exécution.
Accélérez le traitement en utilisant le vecteur C ++, unordered_map en interne en Cython