标签: compilation-time

如何改进Visual C++编译时间?

我在每次提交时在buildbot中编译2个C++项目.两者都是大约1000个文件,一个是100 kloc,另一个是170 kloc.编译时间与gcc(4.4)到Visual C++(2008)有很大不同.

一个项目的Visual C++编译需要20分钟.他们无法利用多核,因为项目依赖于另一个.最后,在Debug和Release中对32和64位的两个项目进行完整的编译需要超过2 1/2小时.

一个项目的gcc汇编需要4分钟.它可以在4个核心上并行化,大约需要1分10秒.2个项目的4个版本(Debug/Release,32/64位)的所有8个版本都在不到10分钟的时间内编译完成.

Visual C++编译时发生了什么?它们基本上慢了5倍.

编译C++ kloc的平均时间是多少?我的是带有vc ++的7 s/kloc和带有gcc的1.4 s/kloc.

可以做任何事情来加快Visual C++上的编译时间吗?

c++ comparison gcc visual-c++ compilation-time

49
推荐指数
4
解决办法
2万
查看次数

如何加快MonoTouch编译时间?

这是众所周知的是

如果编译甚至需要15秒,程序员在编译器运行时会感到无聊并切换到读取Onion,这会吸引他们并消耗数小时的生产力.

我们的MonoTouch应用程序在调试/模拟器配置中需要40秒才能在Macbook Air上进行编译.

我们在解决方案中有大约10个组件.
我们还与一些本地库链接gcc_flags.

我确信有一些方法可以优化我不知道的编译时间,这可能与引用,链接器等有关.

我问这个问题,希望知识比我更好的人会编译(没有双关语)一系列提示和事项要检查以减少调试版本的MonoTouch编译时间.

不要建议与MonoTouch没有直接关系的硬件优化或优化.

c# xamarin.ios compilation-time xamarin

44
推荐指数
1
解决办法
5447
查看次数

在Clojure中输入安全性

我想问一下Clojure上有哪种类型的安全语言?

我现在已经多次读过Luke VanderHart和Stuart Sierra的'Practical Clojure',但我仍然有一个明显的印象,即Clojure(和其他lisps一样)不会非常认真地对编译时验证进行检查.类型安全只是一种(非常流行的)策略,用于对正确的语义进行编译时检查

我问这个问题,因为我很难被证明是错的; 什么样的设计模式可用于clojure(在编译时,而不是在运行时)验证期望字符串的函数不会被调用,例如,整数列表?

此外,我读过非常聪明的人,比如Paul Graham公开提倡lisp允许在它之上实现低级语言的所有内容(大多数人会说语言本身正在重新实现),所以如果那个断言这将是真的,然后像类型检查这样简单的东西应该是小菜一碟.所以你觉得在clojure或其他lisps中存在类型系统(或实现这种类型系统的能力),这使得程序员能够将验证检查从运行时间偏移到编译时,甚至更好,设计 - 时间?

static-analysis compiler-errors clojure type-safety compilation-time

18
推荐指数
2
解决办法
2590
查看次数

为什么Tex/Latex在后续运行中没有加速?

我真的很想知道,为什么即使最近的Tex/Latex系统也没有使用任何缓存来加速以后的运行.每次我修复一个逗号*时,调用Latex花费我大约相同的时间,因为它需要加载和转换每个图片文件.

(*我知道即使更改一个微小的逗号也会影响整个结构,但当然,一个编写良好的缓存格式可以看到它的影响.另外,可能会出现这样的情况:只要速度快,就不需要100%的正确性.)

Tex 的语言中是否存在使得复杂或不可能完成的事情,或者只是在Tex的原始实现中,没有必要这样做(因为在那些大型计算机上它本来会很慢)?

但另一方面,为什么这不会让其他人如此烦恼以至于他们已经启动了一个具有某种缓存的分支(或者将Tex文件透明地转换为更快解析的格式)?

有什么办法可以加快Latex的后续运行吗?除了将所有内容放入chapterXX.tex文件然后将它们评论出来之外?

latex tex pdflatex compilation-time

12
推荐指数
2
解决办法
4050
查看次数

Cuda在Visual Studio中生成并行代码

我在Visual Studio 2012解决方案中有几个C++项目.这些项目包含大量文件,我使用/ MP来加速代码生成.

我想知道是否有办法以类似的方式加速NVCC.在包含CUDA内核的项目中使用/ MP在编译时没有任何好处,我只能看到一个核心在工作.

所以问题是:如何使用我的多核PC来加速CUDA编译?

c++ cuda compilation visual-studio compilation-time

11
推荐指数
1
解决办法
2796
查看次数

加快GHC的编译速度

有没有选项,除了-O0可以加快编译时间?

如果生成的程序不会被优化,那也没关系.实际上我想经常快速地检查大型haskell包.

Flag -fno-code大大加快了编译速度,但由于此程序使用了TemplateHaskell,因此无法使用它.

haskell ghc compilation-time

9
推荐指数
1
解决办法
1679
查看次数

获取JAR编译时间

我试图获取从Eclipse导出的可运行JAR文件的编译时间.一种方法可能是获取META-INF/MANIFEST.MF文件的修改时间.不幸的是,我似乎无法找到一种方式来获得这些信息(我知道如何使用阅读清单本身getResourceAsStream("/META-INF/MANIFEST.MF"),但我似乎无法能够读取其修改时间).

有没有人知道如何做到这一点?

java jar manifest.mf compilation-time

7
推荐指数
2
解决办法
5366
查看次数

构建分析:CMake/ninja 能否为每个编译单元生成编译时间日志?

我正在尝试分析项目的构建时间,以便了解什么花费了最多的时间。这看起来应该很容易......如果我有一切clang在文件中列出了每个命令,我可以对每个命令进行计时并按时间排序以找到花费最长的编译,然后我可以进去看看哪些编译单位感到惊讶并试图找出为什么他们这么慢。

谷歌搜索对此一无所获。显然这是可能的并且很有用。

所以,要么:

  • 基本上执行此操作的选项是什么?

或者

  • 如何让 CMake/ninja 转储所有列表clang它想要运行的所有命令的列表?
  • 或者,也许方法是编写一个脚本来记录命令和所花费的时间,并将其用作CXX_COMPILER_LAUNCHER?

c++ profiling cmake compilation-time

6
推荐指数
1
解决办法
2426
查看次数

新的Delphi XE2自动生成的内部版本号是否链接到1.1.2000 00:00:00?

在Delphi XE2中,自动生成的构建号功能现在使用某种日期和时间生成的值,如下所示:

2.4.4386.838

每次构建时最后两个数字都会更改,并且基于当前日期和时间:

Major = 2 (user defined)
Minor = 4 (user defined)
Release = 4386 (number of days since Jan 1 2000)
Build = 838 (number of seconds since 00:00:00)
Run Code Online (Sandbox Code Playgroud)

我想这个发布和构建数字的新格式是从.NET实现中借用的,它实现了非常相似的功能.在.net中,最后一个数字(Build)等于自当地时间午夜以来的秒数除以2.有关.net实现的详细信息,请参阅此链接:艰难地确定构建日期

如果可以依靠这种方式保持这种方式,那么现在我们有更好的方法来确定编译时间而不是

  1. 使用IDE插件

  2. 使用PE Headers hacks

问题不在于如何返回旧的自动增量版本号功能.

问题 XE2是否确实使用了上面显示的日期和时间,从2010年1月1日开始,在Build和Release数字中添加了几天和几秒?

delphi parsing auto-versioning compilation-time delphi-xe2

5
推荐指数
1
解决办法
2366
查看次数

关于静态模板库的链接/编译时间

将源文件用于基于模板的类(STL和boost)以及将实现放入标头似乎是一种常见的惯例.我假设与头文件和源文件中的声明和实现之间的经典分离相比,这将增加编译包含头文件的源文件所需的时间.这样做的原因可能是因为您必须告诉源文件中的编译器使用哪些模板,这可能会导致文件膨胀.a文件.

假设链接器在库增长时也需要更多时间,那么编译包含库头的源文件所需的时间会更快?

1.不使用.cpp文件并将整个类(包括实现)放入标头中

//foo.hpp
template <class T>
class Foo
{
public:
    Foo(){};
    T bar()
    {
        T* t = NULL;
        //do stuff
        return *t;
    }
};
Run Code Online (Sandbox Code Playgroud)

要么

2.在库本身的源文件中显式编译各种类型的模板

//foo.h
template <class T>
class Foo
{
public:
    Foo(){};
    T bar();
};

//foo.cpp
template <class T>
T Foo<T>::bar()
{
    T* t = NULL;
    //do stuff
    return *t;
}

template class Foo<int>;
template class Foo<float>;
template class Foo<double>;
template class Foo<long long>;
Run Code Online (Sandbox Code Playgroud)

c++ templates header compilation-time explicit-instantiation

5
推荐指数
1
解决办法
2192
查看次数