相关疑难解决方法(0)

旋转位图.在代码中

是否有更快的方法将位图旋转90或270度而不是简单地使用倒置坐标进行嵌套循环?

位图是8bpp,通常是2048*2400*8bpp

目前我只是简单地使用参数反转进行复制(伪代码:

for x = 0 to 2048-1
  for y = 0 to 2048-1
    dest[x][y]=src[y][x];
Run Code Online (Sandbox Code Playgroud)

(实际上我是用指针做的,速度要快一点,但大小差不多)

对于大图像,GDI非常慢,纹理(GF7卡)的GPU加载/存储时间与当前CPU时间的大小相同.

任何提示,指针?就地算法甚至会更好,但速度比就地更重要.

Target是Delphi,但它更像是一个算法问题.SSE(2)矢量化没问题,对我来说,在汇编程序中编码它是一个很大的问题


跟进尼尔斯的回答

  • 图2048x2700 - > 2700x2048
  • 编译器Turbo Explorer 2006优化.
  • Windows:电源方案设置为"始终开启".(重要!!!!)
  • 机器:Core2 6600(2.4 GHz)

旧例程的时间:32ms(步骤1)

步长8:12ms的时间

步长16:10ms的时间

步长32+:9ms的时间

与此同时,我还在Athlon 64 X2(5200+ iirc)上进行了测试,其速度略高于四倍(80到19毫秒).

加速非常值得,谢谢.也许在夏季我会用SSE(2)版本折磨自己.但是我已经考虑过如何解决这个问题了,我想我会用完SSE2寄存器来实现直接实现:

for n:=0 to 7 do
  begin
    load r0, <source+n*rowsize> 
    shift byte from r0 into r1
    shift byte from r0 into r2
    ..
    shift byte from r0 into r8
  end; 
store r1, <target>   
store r2, <target+1*<rowsize> …
Run Code Online (Sandbox Code Playgroud)

delphi image-manipulation image-processing rotation

18
推荐指数
1
解决办法
1万
查看次数

循环提升仍然是C代码的有效手动优化吗?

使用最新的gcc编译器,我还需要考虑这些类型的手动循环优化,还是编译器会为我做好充分的处理?

c c++ optimization gcc

18
推荐指数
3
解决办法
3864
查看次数

C++函数指针与Switch

  • 什么是更快:功能指针或开关?

switch语句大约需要30 case秒,包括从0到30的被禁止的无符号整数.

我可以做以下事情:

class myType
{
    FunctionEnum func;
    string argv[123];
    int someOtherValue;
};
// In another file:
myType current;
// Iterate through a vector containing lots of myTypes
 // ... for ( i=0; i < myVecSize; i ++ )
    switch ( current.func )
    {
           case 1:
            //...
            break;
           // ........
           case 30:
             // blah
            break;
    }
Run Code Online (Sandbox Code Playgroud)

func每次都要通过开关.关于切换的好处还在于我的代码比30个函数更有条理.

或者我可以这样做(不太确定):

class myType
{
    myReturnType (*func)(int all, int of, int my, int args );
    string argv[123];
    int someOtherValue;
};
Run Code Online (Sandbox Code Playgroud)

我有30个不同的函数,在开始时,指向其中一个的指针被分配给myType. …

c++ performance

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

优化时保留代码可读性

我正在用Python和C编写一个带有一些复杂物理模拟算法的科学程序.在实现算法之后,我发现有很多可能的优化来提高性能.常见的是预先计算值,使计算超出周期,用更复杂的替代简单矩阵算法等.但是出现了一个问题.未经优化的算法要慢得多,但其逻辑和与理论的联系看起来更加清晰和可读.此外,扩展和修改优化算法更加困难.

所以,问题是 - 我应该使用哪些技术来提高可读性,同时提高性能?现在我试图保持快速和清晰的分支并且并行开发它们,但也许有更好的方法?

python algorithm optimization performance code-readability

18
推荐指数
1
解决办法
418
查看次数

C++代码分析器

任何人都可以为C++推荐一个好的代码分析器吗?

我遇到了Shiny - 有什么好处吗?http://sourceforge.net/projects/shinyprofiler/

c++ windows profiler visual-studio

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

函数式编程中的有效递归与不同范式中的低效递归

据我所知,递归非常优雅,但在OOP和程序编程方面效率不高(参见精彩的"High Order perl",Mark Jason Dominus).我有一些信息,在函数式编程递归中很快 - 保持其优雅和简洁.有人可以确认并可能放大这个吗?我正在考虑XSLT和Haskell(我的下一个语言学习列表的高位)

谢谢

丹尼尔

xslt optimization haskell functional-programming tail-recursion

17
推荐指数
3
解决办法
2790
查看次数

控制台应用程序运行速度比GUI应用程序快

我对编程世界相对较新.我有一些性能问题:

  1. 控制台应用程序比具有图形用户界面的应用程序运行得更快

  2. 像C和Pascal这样的语言比C++和Delphi这样的面向对象语言更快吗?我知道语言速度更多地依赖于编译器而不是语言本身,但是程序语言的编译器是否比OO编译器(包括可以生成C代码的C++编译器)产生更快的代码?

c c++ delphi performance pascal

16
推荐指数
2
解决办法
3578
查看次数

Java性能分析,性能调优和内存分析练习

我即将使用JProfilerEclipse Tptp进行java应用程序的研讨会分析,性能调优,内存分析,内存泄漏检测等. 我需要一些练习,我可以提供给参与者,他们可以:使用工具来分析发现问题:瓶颈,内存泄漏,次优代码等.我相信有丰富的经验和现实生活中的例子.

  • 解决问题并实现优化代码
  • 通过执行另一个分析会话来演示解决方案
  • 理想情况下,编写演示性能增益的单元测试

问题和解决方案不应过于复杂; 应该可以在几分钟内解决它们,最坏的情况是几小时.一些有趣的锻炼领域:

  • 解决内存泄漏问题
  • 优化循环
  • 优化对象创建和管理
  • 优化字符串操作
  • 解决因并发性和并发性瓶颈而加剧的问题

理想情况下,练习应包括样本未优化代码和解决方案代码.

java optimization performance profiling memory-leaks

15
推荐指数
1
解决办法
3767
查看次数

优化我的Backprop ANN

分析我的反向传播算法后,我了解到它负责占用我60%的计算时间.在我开始研究并行替代方案之前,我想看看我能做些什么.

activate(const double input[])功能仅被占用约5%的时间.该gradient(const double input)功能实现如下:

inline double gradient(const double input) { return (1 - (input * input)); }
Run Code Online (Sandbox Code Playgroud)

有问题的培训功能:

void train(const vector<double>& data, const vector<double>& desired, const double learn_rate, const double momentum) {
        this->activate(data);
        this->calculate_error(desired);

        // adjust weights for layers
        const auto n_layers = this->config.size();
        const auto adjustment = (1 - momentum) * learn_rate;

        for (size_t i = 1; i < n_layers; ++i) {
            const auto& inputs = i - 1 > 0 …
Run Code Online (Sandbox Code Playgroud)

c++ optimization const

15
推荐指数
1
解决办法
722
查看次数

什么是调试优化的C/C++程序的有效方法?

很多时候我使用优化代码(有时甚至涉及矢量化循环),其中包含错误等.如何调试这样的代码?我正在寻找任何类型的工具或技术.我使用以下(可能是过时的)工具,所以我想升级.

我使用以下内容:

  • 既然用ddd,就看不到代码了,我用gdb + dissambler命令查看生成的代码; 我不能真正使用它来完成程序.
  • ndisasm

谢谢

c c++ debugging disassembly

14
推荐指数
2
解决办法
4492
查看次数