Tag: 优化

将任意三angular形打包成一个有限的盒子?

作为3D优化的一部分,我需要将三angular形合理地包装到一个盒子中(我正在将不同材质的片段填充到一个单独的纹理中,用于深度分类,所以纹理不会切换与每一个新的三) 有没有一个algorithm来做到这一点? 三angular形本身可以制作成可以(可变形为正确的angular度,有效地使这个盒子填充algorithm,而不是),但我想避免这一点,如果可能的话,因为它会扭曲底层的纹理艺术。

intXX_t和int_fastXX_t有什么区别?

我最近发现了标准最快types的存在,主要是int_fast32_t和int_fast64_t 。 我总是被告知,为了在主stream架构上正常使用,最好使用经典的int & long ,它应该总是适合处理器默认的读取能力,这样可以避免无用的数值转换。 在C99标准中,它在§7.18.1.3p2中说: “typedef名称int_fastN_t指定宽度至less为N的最快有符号整数types。typedef名称uint_fastN_t指定宽度至less为N的最快无符号整数types。 而且在§7.18.1.3p1中也有关于它的引用: “对于所有目的,指定types不保证是最快的;如果实现没有明确的select一种types的理由,它只会select一些符合签名和宽度要求的整数types。 我不清楚什么最快的真正意义。 我不明白什么时候应该使用这种types,什么时候不应该使用。 我在这个上搜了一下,发现一些开源 项目已经把它们的一些function改变了,但并不是全部。 他们并没有真正解释为什么他们改变了一部分代码,而只是代码的一部分。 你知道什么是int_fastXX_t 真的比经典的更快吗?

我如何编码的Java允许使用SSE和边界检查消除(或其他高级优化)?

情况: 我正在优化LZF压缩algorithm的纯Java实现,它涉及到大量的byte []访问和基本的intmath,用于哈希和比较。 性能真的很重要,因为压缩的目标是减lessI / O需求。 我不张贴代码,因为它尚未清理,并可能会重组。 问题: 我怎样才能编写我的代码,以允许它使用更快的SSE操作JIT编译为表单? 我怎样才能构造它,使编译器可以轻松消除数组边界检查? 是否有关于特定math运算相对速度的广泛参考(需要多less增量/减量才能达到正常的加/减,移位速度有多快?还是与数组访问有多快? 我怎样才能优化分支 – 有更多的条件陈述短身体,或一些长期的,或短嵌套条件? 使用当前的1.6 JVM,在System.arraycopy击败复制循环之前必须复制多less个元素? 我已经做了什么: 在我受到过早优化攻击之前:基本algorithm已经非常优秀,但是Java的实现速度还不到C的速度的2/3。我已经用System.arraycopyreplace了复制循环,并且优化了循环,并且删除了un需要的操作。 我大量地使用bit来转换和填充字节来performance性能,以及转换和屏蔽。 出于法律方面的原因,我不能看类似库中的实现,而现有的库有太多限制的许可条款可供使用。 良好(接受)答案的要求: 不可接受的答案: “这是更快”没有解释多less和为什么,OR还没有用JIT编译器testing过。 边界线答案:在Hotspot 1.4之前没有经过任何testing 基本的答案:将提供一个通用的规则和解释,为什么它在编译器级别更快,并且大概快了多less 很好的答案:包括几个代码示例来演示 优秀的答案:有JRE 1.5和1.6的基准 完美的答案:是由HotSpot编译器工作的人员,可以完全解释或引用要使用的优化的条件,以及它通常的速度。 可能包括由HotSpot生成的Java代码和样例汇编代码。 另外:如果有人有详细的热点优化和分支性能的内涵的链接,欢迎。 我对字节码有足够的了解,即一个分析字节码而不是源代码级别的性能的站点会有所帮助。 (编辑)部分答案:Bounds-Check Ellimination: 这是从提供的链接到HotSpot内部维基: https : //wikis.oracle.com/display/HotSpotInternals/RangeCheckElimination 在以下情况下,HotSpot将消除所有for循环中的边界检查: 数组是循环不变的(不在循环内重新分配) 索引variables有一个不断的步幅(按照常量增加/减less,如果可能的话,只有一个点) 数组由variables的线性函数索引。 例如: int val = array[index*2 + 5] OR: int val = array[index+9 […]

如何缩小JS或CSS的dynamic

如何在运行/运行时缩减JS和CSS,这样,如果在运行时/运行时将原始代码结构缩小,我就可以将原始代码结构保留在服务器中。

可能/不太可能等同于MSVC

GCC编译器支持用于定义可能的和不太可能的macros的__builtin_expect语句。 例如。 #define likely(expr) __builtin_expect(!(expr), 0) #define unlikely(expr) __builtin_expect((expr), 0) 是否有与Microsoft Visual C编译器等效的语句?

是否有一个java.lang.String的内存有效的替代?

在阅读了这篇测量几种对象types的内存消耗的旧文章之后,我很惊讶地看到在Java中使用了多less内存String : length: 0, {class java.lang.String} size = 40 bytes length: 7, {class java.lang.String} size = 56 bytes 虽然文章有一些技巧,以尽量减less这一点,我没有发现他们完全满意。 使用char[]存储数据似乎是浪费。 大多数西方语言的明显改进是使用byte[]和UTF-8编码,因为只需要一个字节来存储最常见的字符,而不是两个字节。 当然可以使用String.getBytes("UTF-8")和new String(bytes, "UTF-8") 。 即使String实例本身的开销也不见了。 但是,那么你失去了非常方便的方法,如equals() , hashCode() , length() ,… 据我所知,Sun在Strings的byte[]表示方面拥有专利 。 用于在Java编程环境中高效地表示string对象的框架 …这些技术可以实现创buildJavastring对象为适当的单字节字符数组… 但是我没有find该专利的API。 为什么我在乎 在大多数情况下,我不这样做。 但是我使用了大量caching的应用程序,包含大量的string,这些string可以更有效地使用内存。 有人知道这样的API吗? 还是有另一种方法来保持您的内存占用string很小,即使在CPU性能或更丑陋的API的代价? 请不要重复上述文章的build议: 自己的String.intern()的变体(可能与SoftReferences ) 存储一个char[]并利用当前的String.subString(.)实现来避免数据复制(讨厌的) 更新 我运行了Sun当前JVM(1.6.0_10)的文章中的代码。 它取得了与2002年相同的结果。

如何使用位操作有效地find64位值中唯一位的位置?

只要说我有一个值typesuint64_t看作八位字节序列(1八位字节= 8位)。 已知uint64_t值只包含MSB位置上的一个设定位 。 因此, uint64_t值可以是下列二进制表示之一: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 10000000 pos = 7 00000000 00000000 00000000 00000000 00000000 00000000 10000000 00000000 pos = 15 00000000 00000000 00000000 00000000 00000000 10000000 00000000 00000000 pos = 23 00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 pos = 31 00000000 00000000 00000000 10000000 00000000 […]

为什么很多网站会缩小CSS和JavaScript,而不是HTML?

可能重复: 为什么要削减资产而不是标记? 我看到很多网站使用缩小的CSS和JavaScript来增加网站响应时间,但我从来没有看到任何网站使用缩小的HTML。 为什么你不希望你的HTML被缩小?

读取文件为string

我需要在android中加载一个xml文件作为string,所以我可以加载到TBXML XMLparsing器库,并parsing它。 我现在读取文件为String的实现需要大约2秒,即使是一些非常小的一些KB文件。 有什么已知的快速方法,可以读取Java / Android中的string文件? 这是我现在的代码: public static String readFileAsString(String filePath) { String result = ""; File file = new File(filePath); if ( file.exists() ) { //byte[] buffer = new byte[(int) new File(filePath).length()]; FileInputStream fis = null; try { //f = new BufferedInputStream(new FileInputStream(filePath)); //f.read(buffer); fis = new FileInputStream(file); char current; while (fis.available() > […]

RVO(返回值优化)是否适用于所有对象?

RVO( 返回值优化 )是保证还是适用于C ++编译器(特别是GCC)中的所有对象和情况? 如果答案是“否”,那么这个类/对象的优化的条件是什么? 我如何强制或鼓励编译器对特定的返回值执行RVO?