小编Ell*_*sky的帖子

临时变量会减慢我的程序吗?

假设我有以下C代码:

int i = 5;
int j = 10;
int result = i + j;
Run Code Online (Sandbox Code Playgroud)

如果我多次循环,使用它会更快int result = 5 + 10吗?我经常创建临时变量以使我的代码更具可读性,例如,如果使用某个长表达式从某个数组中获取这两个变量来计算索引.这在C中是否表现不佳?其他语言怎么样?

c performance temporary

72
推荐指数
5
解决办法
5921
查看次数

在一个平衡群体财富的计划中不可能找到错误(UVA 10137,"旅行")

我为这个竞争性编程问题写了一个解决方案.它通过了所有测试用例,除了最后一个案例关闭了一个,我无法弄清楚原因.这个问题可以这样说:假设一个群体中每个人有多少便士,有多少钱可以转手,这样群体中的每个人都会在财富中彼此相差一分钱?

我的程序很简单.我修改它只是操作一个每个人有多少便士的数组:

def transfer(A):
    A.sort(key = lambda x:-x)
    extra = sum(A) % len(A)
    average = sum(A) // len(A)

    high = sum([abs(x - (average+1)) for x in A[:extra]])
    low = sum([abs(x - average) for x in A[extra:]])

    return (high+low)/2
Run Code Online (Sandbox Code Playgroud)

它失败的测试用例如下:

print(transfer([613, 944, 7845, 8908, 12312, 22378, 27877, 54757, 55476, 90707, 91289, 178189]))
Run Code Online (Sandbox Code Playgroud)

我的代码说答案是240710,而"正确"的答案是240709.我的虫子在哪里?

python algorithm debugging python-3.x onlinejudge

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

如何获取nim程序的c代码?

我跟着文档编译,nim compileToC helloworld.nim 但它只是吐出一个可执行文件.我怎样才能看到中间C表示?

gcc nim-lang

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

L2 软件预取可以触发 L2 硬件预取吗?

我对 Intel CPU 的总体理解是,对连续物理地址的需求加载会触发 L2 硬件流预取器,该预取器可以提前预取到页面边界。

我想触发这个机制而不污染L1。我的想法是使用 L2 软件预取连续的物理地址。有谁知道这是否会触发相同的机制?

optimization performance x86 cpu-architecture prefetch

7
推荐指数
0
解决办法
159
查看次数

找到三维矩阵(或n维)中最小元素的索引

我有一个矩阵D(i,j,k),我想找到i,j,k以尽量减少x:

x = D(i,j,k)
Run Code Online (Sandbox Code Playgroud)

例如:

D = rand(10,10,10);
min(min(min(D))) = 0.5123; %The smallest element in D
Run Code Online (Sandbox Code Playgroud)

我想知道的是D的指数给出0.5123

我怎样才能做到这一点?谢谢,艾略特

matlab matrix octave

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

与缓存预取提示相反

我是否可以在代码中添加提示,指示应从缓存中删除一行?与预取提示相反,这表明我将很快需要一条线.在我的情况下,我知道什么时候我不需要一条线,所以我希望能够摆脱它以释放我需要的线的空间.

performance x86 assembly caching x86-64

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

下等八度音程冻结

在emacs octave-mode中,当我键入Mx run-octave时,命令冻结,所以我做Cg逃脱.我可以用Cx b切换到*Inferior Octave*缓冲区,但没有提示,只有欢迎信息.Cc il也不起作用.

emacs octave

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

在python中检测交换

确定运行我的脚本的计算机是否正在使用交换内存的最佳方法是什么?它应该尽可能地跨平台。一种解决方案是像top子进程一样运行程序,但我希望有更好的方法。

python memory

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

是否可以用C++而不是C编写OpenCL内核?

我知道有一个openCL C++ API,但是我在编译内核时遇到了麻烦......内核是否必须用C语言编写?然后它只是允许用C++编写的主机代码?或者有没有办法在C++中编写我没有找到的内核?具体来说,我正在尝试使用pyopencl编译我的内核,它似乎失败了,因为它将它们编译为C代码.

c++ gpgpu opencl pyopencl

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

如果预取在加载之前没有完成,那么预取就没用了吗?

假设我们有这个伪代码,但它ptr不在任何 CPU 缓存中:

prefetch_to_L1 ptr
/* 20 cycles */
load ptr
Run Code Online (Sandbox Code Playgroud)

由于ptr在主存中,预取操作的延迟(从预取指令解码到ptr在L1高速缓存中可用)远大于20个周期。正在进行的预取是否会减少负载的延迟?或者预取除非在加载之前完成,否则就没用吗?

天真地(对内存系统如何工作没有太多了解)我可以看到它以两种方式工作:

  • 当 CPU 执行加载时,它会以某种方式识别出同一地址正在进行预取,并等待预取完成后再从 L1 加载。
  • CPU 发现该地址当前不在高速缓存中,并转到主内存,忽略并行执行的预取操作。

其中之一是正确的吗?还有我没有想到的第三种选择吗?我对 Skylake 特别感兴趣,但也只是想建立一些一般的直觉。

optimization performance intel cpu-architecture micro-architecture

5
推荐指数
0
解决办法
75
查看次数