Soumettre la recherche
Mettre en ligne
C++のビルド高速化について
•
Télécharger en tant que PPTX, PDF
•
5 j'aime
•
6,722 vues
A
AimingStudy
Suivre
Signaler
Partager
Signaler
Partager
1 sur 15
Télécharger maintenant
Recommandé
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
Marp Tutorial
Marp Tutorial
Rui Watanabe
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
Recommandé
C++ マルチスレッド 入門
C++ マルチスレッド 入門
京大 マイコンクラブ
Marp Tutorial
Marp Tutorial
Rui Watanabe
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
Satoshi Kodaira
中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
torisoup
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
こわくない Git
こわくない Git
Kota Saito
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
Sho Hosoda
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
京大 マイコンクラブ
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
GPU最適化入門
GPU最適化入門
Takahiro KOGUCHI
VerilatorとSystemC
VerilatorとSystemC
Mr. Vengineer
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
Unity Technologies Japan K.K.
An Introduction of DNN Compression Technology and Hardware Acceleration on FPGA
An Introduction of DNN Compression Technology and Hardware Acceleration on FPGA
LeapMind Inc
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
initramfsについて
initramfsについて
Kazuhiro Nishiyama
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
海外ゲーム技術勉強会#1 OGRE3D
海外ゲーム技術勉強会#1 OGRE3D
Kazuhisa Minato
マルチプラットフォーム開発導入
マルチプラットフォーム開発導入
Daisuke Nikura
Contenu connexe
Tendances
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
こわくない Git
こわくない Git
Kota Saito
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
Kohei Tokunaga
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
Sho Hosoda
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
Unity Technologies Japan K.K.
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
京大 マイコンクラブ
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
GPU最適化入門
GPU最適化入門
Takahiro KOGUCHI
VerilatorとSystemC
VerilatorとSystemC
Mr. Vengineer
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
Unity Technologies Japan K.K.
An Introduction of DNN Compression Technology and Hardware Acceleration on FPGA
An Introduction of DNN Compression Technology and Hardware Acceleration on FPGA
LeapMind Inc
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
initramfsについて
initramfsについて
Kazuhiro Nishiyama
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
Genya Murakami
マルチコアを用いた画像処理
マルチコアを用いた画像処理
Norishige Fukushima
Tendances
(20)
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
こわくない Git
こわくない Git
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
シェーダだけで世界を創る!three.jsによるレイマーチング
シェーダだけで世界を創る!three.jsによるレイマーチング
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
プログラムを高速化する話
プログラムを高速化する話
GPU最適化入門
GPU最適化入門
VerilatorとSystemC
VerilatorとSystemC
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
An Introduction of DNN Compression Technology and Hardware Acceleration on FPGA
An Introduction of DNN Compression Technology and Hardware Acceleration on FPGA
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
クロージャデザインパターン
クロージャデザインパターン
initramfsについて
initramfsについて
Constexpr 中3女子テクニック
Constexpr 中3女子テクニック
マルチコアを用いた画像処理
マルチコアを用いた画像処理
En vedette
海外ゲーム技術勉強会#1 OGRE3D
海外ゲーム技術勉強会#1 OGRE3D
Kazuhisa Minato
マルチプラットフォーム開発導入
マルチプラットフォーム開発導入
Daisuke Nikura
C++によるソート入門
C++によるソート入門
AimingStudy
音声合成ライブラリ「AquesTalk」の紹介
音声合成ライブラリ「AquesTalk」の紹介
K Moneto
Ogre3d 基礎
Ogre3d 基礎
kw
cocos2d-xの概要とこれまでの進化・これからの展開
cocos2d-xの概要とこれまでの進化・これからの展開
Tomoaki Shimizu
C++11とゲーム製作
C++11とゲーム製作
uchan_nos
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
DADA246
3D勉強会 第1回 3Dプログラミングのススメ
3D勉強会 第1回 3Dプログラミングのススメ
infinite_loop
[学内勉強会]C++11とdirectxライブラリ
[学内勉強会]C++11とdirectxライブラリ
Shota Homma
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
博文 斉藤
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
博文 斉藤
Direct xとopenglの隠蔽実装例
Direct xとopenglの隠蔽実装例
tecopark
3D描画基礎知識
3D描画基礎知識
AimingStudy
大人の分散レンダリング
大人の分散レンダリング
Monta Yashi
mruby を C# に 組み込んでみる
mruby を C# に 組み込んでみる
Ryosuke Akiyama
En vedette
(16)
海外ゲーム技術勉強会#1 OGRE3D
海外ゲーム技術勉強会#1 OGRE3D
マルチプラットフォーム開発導入
マルチプラットフォーム開発導入
C++によるソート入門
C++によるソート入門
音声合成ライブラリ「AquesTalk」の紹介
音声合成ライブラリ「AquesTalk」の紹介
Ogre3d 基礎
Ogre3d 基礎
cocos2d-xの概要とこれまでの進化・これからの展開
cocos2d-xの概要とこれまでの進化・これからの展開
C++11とゲーム製作
C++11とゲーム製作
shared_ptrとゲームプログラミングでのメモリ管理
shared_ptrとゲームプログラミングでのメモリ管理
3D勉強会 第1回 3Dプログラミングのススメ
3D勉強会 第1回 3Dプログラミングのススメ
[学内勉強会]C++11とdirectxライブラリ
[学内勉強会]C++11とdirectxライブラリ
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
Direct xとopenglの隠蔽実装例
Direct xとopenglの隠蔽実装例
3D描画基礎知識
3D描画基礎知識
大人の分散レンダリング
大人の分散レンダリング
mruby を C# に 組み込んでみる
mruby を C# に 組み込んでみる
Similaire à C++のビルド高速化について
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
Ransui Iso
OCaml でデータ分析
OCaml でデータ分析
Akinori Abe
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
Yosuke Onoue
C#勉強会
C#勉強会
hakugakucafe
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
洋史 東平
Cython intro prelerease
Cython intro prelerease
Shiqiao Du
第2回勉強会スライド
第2回勉強会スライド
koturn 0;
さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSP
NSaitoNmiri
コンテナ情報交換会2
コンテナ情報交換会2
Masahide Yamamoto
Objc lambda
Objc lambda
matuura_core
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
Shiqiao Du
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
Altanative macro
Altanative macro
Motohiro KOSAKI
pkgsrc とは何か? - よもやま話
pkgsrc とは何か? - よもやま話
Akio OBATA
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
Takahiro Harada
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
伸男 伊藤
Boost.Flyweight
Boost.Flyweight
gintenlabo
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルド
Toru Tamaki
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
5mingame2
OpenCLに触れてみよう
OpenCLに触れてみよう
You&I
Similaire à C++のビルド高速化について
(20)
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
OCaml でデータ分析
OCaml でデータ分析
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
C#勉強会
C#勉強会
Rubyの御先祖CLUのお話(原本)
Rubyの御先祖CLUのお話(原本)
Cython intro prelerease
Cython intro prelerease
第2回勉強会スライド
第2回勉強会スライド
さわってみようTOPPERS/SSP
さわってみようTOPPERS/SSP
コンテナ情報交換会2
コンテナ情報交換会2
Objc lambda
Objc lambda
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
Altanative macro
Altanative macro
pkgsrc とは何か? - よもやま話
pkgsrc とは何か? - よもやま話
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
Boost.Flyweight
Boost.Flyweight
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルド
どこでも動くゲームを作るためのベタープラクティス
どこでも動くゲームを作るためのベタープラクティス
OpenCLに触れてみよう
OpenCLに触れてみよう
Plus de AimingStudy
Kick Off Technical Artist & ShaderFx - テクニカルアーティストと ShaderFXのお話
Kick Off Technical Artist & ShaderFx - テクニカルアーティストと ShaderFXのお話
AimingStudy
デザイナーがMELスクリプトを書いて工数削減した話
デザイナーがMELスクリプトを書いて工数削減した話
AimingStudy
剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題
AimingStudy
ゲームエンジンとMVC
ゲームエンジンとMVC
AimingStudy
Unityと.NET
Unityと.NET
AimingStudy
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
AimingStudy
AWSではじめるお手軽オンラインゲーム開発
AWSではじめるお手軽オンラインゲーム開発
AimingStudy
SVN経験者のためのGIT入門
SVN経験者のためのGIT入門
AimingStudy
Flashをcocos2dxで再生
Flashをcocos2dxで再生
AimingStudy
1日で始めるglsl
1日で始めるglsl
AimingStudy
Adobe scoutの紹介
Adobe scoutの紹介
AimingStudy
Plus de AimingStudy
(11)
Kick Off Technical Artist & ShaderFx - テクニカルアーティストと ShaderFXのお話
Kick Off Technical Artist & ShaderFx - テクニカルアーティストと ShaderFXのお話
デザイナーがMELスクリプトを書いて工数削減した話
デザイナーがMELスクリプトを書いて工数削減した話
剣と魔法のログレス(PC版)の自慢と課題
剣と魔法のログレス(PC版)の自慢と課題
ゲームエンジンとMVC
ゲームエンジンとMVC
Unityと.NET
Unityと.NET
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
AWSではじめるお手軽オンラインゲーム開発
AWSではじめるお手軽オンラインゲーム開発
SVN経験者のためのGIT入門
SVN経験者のためのGIT入門
Flashをcocos2dxで再生
Flashをcocos2dxで再生
1日で始めるglsl
1日で始めるglsl
Adobe scoutの紹介
Adobe scoutの紹介
C++のビルド高速化について
1.
C++のビルド高速化
2013/04/08 Aiming大阪スタジオ 後藤 文典
2.
概要 • make、コンパイル、リンクのphaseを短くする為
のツールや小技、手法についてを解説していき ます
3.
• ※環境について –
以下の環境で測定しました(ccacheを除く) • Core i5 2500S • 2年前頃の2.5inchHDD • Windows8 & MinGW4.7.2 • VMWare & Ubuntu12.10 & gcc4.8.0
4.
make • 並列化オプション –
make –j[N] – ソースを並列にコンパイルする • ○CPUのコア数が多い程並列度を上げられる • 注)使用メモリがコンパイル数分必要になる – templateを駆使したソースだと結構メモリが必要
5.
コンパイル(1/3)(ccache) • コンパイル時のobjファイルをキャッシュする –
○リコンパイル時にコンパイルをスキップ – ○Makefileを汚さない • チーム開発中でも単独で導入できる – ○リビルド時に効果を発揮 – 注)キャッシュミス時は尐し遅くなる
6.
計測結果 • Gerritトリガビルドに導入したのはかなり効果あった
– max cache sizeは、総objサイズの4倍あれば良いと思う • 過去のソースをキャッシュしてもしょうがない • 全書き換えパターン & 複数ブランチ作業を考えて
7.
コンパイル(2/3)(プリコンパイル
ヘッダ) • プリコンパイル後のヘッダファイルをincludeする – ○単にincludeより速い – ○コンパイル時の使用メモリが減るので、並列度を上げや すい – ×プリコンパイルヘッダのプリコンパイル時間がプラス – 注)1つしか使用出来ない – 注)対象ヘッダはスリムに保つ必要がある • 余り大きいとプリコンパイルヘッダ自体が重くなる
8.
計測結果(使用メモリとコンパイル時
間) • STLやboostをincludeして計測 // hoge.cpp – メモリはtime #include “stdafx.h” 時間は/usr/bin/time –f “%M KB” 注)赤丸の箇所が一応の目安? // stdafx.h #include <vector> →STL一式とboostを1、2個includeした辺り #include <list> →あまり詰め込まず、主要ヘッダだけ ... プリコンパイル対象にするのが良さげ
9.
コンパイル(3/3)(PImplイディオム) • ヘッダの依存関係を減らす
10.
#include “stack.h“
#pragma once // 他ソースでStackを使う時vectorが要らな class Stack { い public: #include <vector> Stack(); class Stack::Impl { ~Stack(); public: void push(int n); void push(int n) { v.push_back(n); } int pop(); int pop() { int n = v.back(); private: v.pop_back(); class Impl; return n; Impl *impl; } }; private: std::vector<int> v; }; Stack::Stack() : impl(new Stack::Impl()) {} Stack::~Stack() { delete impl; } void Stack::push(int n) { impl->push(n); } int Stack::pop() { return impl->pop(); }
11.
リンク(Dynamic Link Library) •
リンク時間を減らす
12.
• フリーのゲームエンジンIrrlichtをリンクしてみた –
Windows8 & MinGW4.7.2 • StaticLib時のリンク時間7.8秒 → DynamicLib時の0.8秒 • g++ -shared –c mydll.cpp –o mydll.dll –Wl,--out-implib,libmydll.lib – Linux & gcc4.8環境 • StaticLib時のリンク時間2.2秒 → DynamicLib時の0.9秒 • g++ -shared –c mydll.cpp –o libmydll.so ※尐なくともGCCではdeclspec(dllexport | dllimport) _stdcall要らなかった • Makefileの書き換えだけでStaticLib、DynamicLibを切り替えられた 注)dll地獄に注意
13.
まとめ – ボトルネック解決案やツールは大抵出そろってる •
ボトルネックを探ればビルド時間減らせる – 枯れた部分はLibに追い出す • リンク時間減らせる ※環境一式をmakeするのも良いかもしれない
14.
参考URL • ccache
– http://ccache.samba.org/ • Irrlicht – http://irrlicht.sourceforge.net/
15.
ありがとうございました
Télécharger maintenant