标签: micro-optimization

在Perl中逐行读取文件时,我是否应该积极地释放内存?

我是否应该逐行读取文件时积极释放内存?一个例子:

while (<FILE>) {
  my $line = $_;
  <process line>
  undef($line);
}
Run Code Online (Sandbox Code Playgroud)

"Undefing"$ line变量是减少内存消耗的好选择吗?

perl memory-management micro-optimization

2
推荐指数
3
解决办法
328
查看次数

java中需要的时间

我想知道单独执行条件循环需要多长时间.就像我可以选择使用"if else","while","for"或"foreach"循环那么循环会更快地执行.我知道差异会非常小,大多数人会说它不会但是,如果我有一个可以访问数千个数据的程序,那么这一点就会出现.

我想知道我是否在java的开头声明了一个变量,如果我在使用它之前声明它将会有所不同.是否会减少所需的总时间?如果是,则实际使用哪一个(变量在开头声明或者它们刚被声明为b4的那个被使用)?

java micro-optimization

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

在C中,最好的方法是查看一个数字是否可以被另一个数除尽?

在C中,最好的方法是查看一个数字是否可以被另一个数除尽?我用这个:

if (!(a % x)) {
// this will be executed if a is divisible by x
}
Run Code Online (Sandbox Code Playgroud)

反正哪个更快?我知道这样做,即130%13将导致每10次做130/13.因此,只需要一个循环就有10个循环(我只想知道130是否可以被13整除).

谢谢!

c math optimization integer-division micro-optimization

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

C++这是一种微优化形式

这是微优化,还是优化呢?

void Renderer::SetCamera(FLOAT x, FLOAT y, FLOAT z) {
    // Checking for zero before doing addition?
    if (x != 0) camX += x;
    if (y != 0) camY += y;
    if (z != 0) camZ += z;

    // Checking if any of the three variables are not zero, and performing the code below.
    if (x != 0 | y != 0 | z != 0) {
        D3DXMatrixTranslation(&w, camX, camY, camZ);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用带有vector.size()的条件运行for循环会强制应用程序重新计算每个循环中向量中的元素吗?

std::vector<UINT> vect;

INT vectorSize = vect.size();
for …
Run Code Online (Sandbox Code Playgroud)

c++ micro-optimization

2
推荐指数
1
解决办法
261
查看次数

使用constant - imul或shl-add-combination进行乘法运算

这个问题是关于我们如何将整数与常数相乘.那么让我们看一个简单的函数:

int f(int x) {
    return 10*x;
}
Run Code Online (Sandbox Code Playgroud)

如何最佳地优化该功能,尤其是在内联到呼叫者时?

方法1(由大多数优化编译器生成(例如,在Godbolt上))

    lea    (%rdi,%rdi,4), %eax
    add    %eax, %eax
Run Code Online (Sandbox Code Playgroud)

方法2(使用clang3.6和更早版本,使用-O3生成)

    imul   $10, %edi, %eax
Run Code Online (Sandbox Code Playgroud)

方法3(使用g ++ 6.2生成,无需优化,删除存储/重新加载)

    mov    %edi, %eax
    sal    $2, %eax
    add    %edi, %eax
    add    %eax, %eax
Run Code Online (Sandbox Code Playgroud)

哪个版本最快,为什么?主要对英特尔Haswell感兴趣.

c++ x86 micro-optimization

2
推荐指数
1
解决办法
779
查看次数

C#字节操作优化:如何从byte []数组中获取dword

是否可以在一次操作中从byte []数组中获取4个字节?

这意味着代替:

var octet_a = bytes[i++];
var octet_b = bytes[i++];
var octet_c = bytes[i++];
var octet_d = bytes[i++];
Run Code Online (Sandbox Code Playgroud)

得到类似的东西

Int32 b4= Get4Bytes(i);
i=i+4;
Run Code Online (Sandbox Code Playgroud)

.net c# micro-optimization

2
推荐指数
1
解决办法
827
查看次数

对于 x86-64,imm64 或 m64 哪个更快?

经过大约100亿次测试,如果imm64m64AMD64快0.1纳秒,m64似乎更快,但我真的不明白。val_ptr以下代码中的地址本身不是立即数吗?

# Text section
.section __TEXT,__text,regular,pure_instructions
# 64-bit code
.code64
# Intel syntax
.intel_syntax noprefix
# Target macOS High Sierra
.macosx_version_min 10,13,0

# Make those two test functions global for the C measurer
.globl _test1
.globl _test2

# Test 1, imm64
_test1:
  # Move the immediate value 0xDEADBEEFFEEDFACE to RAX (return value)
  movabs rax, 0xDEADBEEFFEEDFACE
  ret
# Test 2, m64
_test2:
  # Move from the RAM (val_ptr) to RAX (return value)
  mov …
Run Code Online (Sandbox Code Playgroud)

optimization x86 assembly x86-64 micro-optimization

2
推荐指数
1
解决办法
863
查看次数

在C++中使用short(int16)进行饱和

我正在优化瓶颈代码:

int sum = ........
sum = (sum >> _bitShift);

if (sum > 32000)
    sum = 32000; //if we get an overflow, saturate output
else if (sum < -32000)
    sum = -32000; //if we get an underflow, saturate output

short result = static_cast<short>(sum);
Run Code Online (Sandbox Code Playgroud)

我想将饱和条件写为一个"if condition",或者甚至更好,没有"if condition"来使这段代码更快.我不需要精确饱和值为32000,任何类似的值如32768都是可以接受的.

根据此页面,ARM中有一个饱和指令.在x86/x64中有类似的东西吗?

c++ micro-optimization compiler-optimization

2
推荐指数
1
解决办法
448
查看次数

汇编 - 如何通过延迟和吞吐量对CPU指令进行评分

我正在寻找一种公式/方法来衡量一条指令的速度,或者更具体地说是通过CPU周期给出每条指令的"得分".

我们以下面的汇编程序为例,

nop                     
mov         eax,dword ptr [rbp+34h] 
inc         eax     
mov         dword ptr [rbp+34h],eax  
Run Code Online (Sandbox Code Playgroud)

以及英特尔Skylake的以下信息:

mov r,m:吞吐量= 0.5延迟= 2

mov m,r:吞吐量= 1延迟= 2

nop:吞吐量= 0.25延迟=非

inc:吞吐量= 0.25延迟= 1

我知道程序中指令的顺序在这里很重要,但我希望创建一些通用的东西,不需要"对单循环准确"

任何人都知道我该怎么做?

非常感谢

performance x86 assembly x86-64 micro-optimization

2
推荐指数
1
解决办法
490
查看次数

如何减少阶乘循环的执行时间和周期数?和/或代码大小?

基本上,我很难使执行时间比实际时间要短,并且要减少时钟周期和内存大小。有谁知道我该怎么做吗?代码工作正常,我只想稍作更改。

编写了有效的代码,但不想弄乱代码,但也不知道要进行哪些更改。

; Calculation of a factorial value using a simple loop

; set up the exception addresses
THUMB
AREA RESET, CODE, READONLY
EXPORT  __Vectors
EXPORT Reset_Handler
__Vectors 
DCD 0x00180000     ; top of the stack 
DCD Reset_Handler  ; reset vector - where the program starts

AREA 2a_Code, CODE, READONLY
Reset_Handler
ENTRY
start   
MOV r1,#0    ; count the number of multiplications performed 
MOV r2,#3    ; the final value in the factorial calculation
MOV r3,#1    ; the factorial result will be stored …
Run Code Online (Sandbox Code Playgroud)

assembly arm cortex-m3 execution-time micro-optimization

2
推荐指数
1
解决办法
228
查看次数