是否有更快的方法将大位图旋转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)矢量化没问题,对我来说,在汇编程序中编码它是一个很大的问题
跟进尼尔斯的回答
旧例程的时间: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) 使用最新的gcc编译器,我还需要考虑这些类型的手动循环优化,还是编译器会为我做好充分的处理?
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. …
我正在用Python和C编写一个带有一些复杂物理模拟算法的科学程序.在实现算法之后,我发现有很多可能的优化来提高性能.常见的是预先计算值,使计算超出周期,用更复杂的替代简单矩阵算法等.但是出现了一个问题.未经优化的算法要慢得多,但其逻辑和与理论的联系看起来更加清晰和可读.此外,扩展和修改优化算法更加困难.
所以,问题是 - 我应该使用哪些技术来提高可读性,同时提高性能?现在我试图保持快速和清晰的分支并且并行开发它们,但也许有更好的方法?
任何人都可以为C++推荐一个好的代码分析器吗?
我遇到了Shiny - 有什么好处吗?http://sourceforge.net/projects/shinyprofiler/
据我所知,递归非常优雅,但在OOP和程序编程方面效率不高(参见精彩的"High Order perl",Mark Jason Dominus).我有一些信息,在函数式编程递归中很快 - 保持其优雅和简洁.有人可以确认并可能放大这个吗?我正在考虑XSLT和Haskell(我的下一个语言学习列表的高位)
谢谢
丹尼尔
xslt optimization haskell functional-programming tail-recursion
我对编程世界相对较新.我有一些性能问题:
控制台应用程序比具有图形用户界面的应用程序运行得更快
像C和Pascal这样的语言比C++和Delphi这样的面向对象语言更快吗?我知道语言速度更多地依赖于编译器而不是语言本身,但是程序语言的编译器是否比OO编译器(包括可以生成C代码的C++编译器)产生更快的代码?
我即将使用JProfiler和Eclipse Tptp进行java应用程序的研讨会分析,性能调优,内存分析,内存泄漏检测等. 我需要一些练习,我可以提供给参与者,他们可以:使用工具来分析发现问题:瓶颈,内存泄漏,次优代码等.我相信有丰富的经验和现实生活中的例子.
问题和解决方案不应过于复杂; 应该可以在几分钟内解决它们,最坏的情况是几小时.一些有趣的锻炼领域:
理想情况下,练习应包括样本未优化代码和解决方案代码.
在分析我的反向传播算法后,我了解到它负责占用我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++ ×6
optimization ×5
performance ×4
c ×3
delphi ×2
algorithm ×1
const ×1
debugging ×1
disassembly ×1
gcc ×1
haskell ×1
java ×1
memory-leaks ×1
pascal ×1
profiler ×1
profiling ×1
python ×1
rotation ×1
windows ×1
xslt ×1