Questions tagged «optimization»

优化是改进方法或设计的行为。在编程中,优化通常采取提高算法速度或减少所需资源的形式。优化的另一个含义是机器学习中使用的数值优化算法。

5
如何在不创建导致内存溢出的临时矩阵的情况下“复制”矩阵?
通过将矩阵分配到更大的已分配内存中,matlab将以某种方式在“复制”矩阵时对其进行复制,如果要复制的矩阵足够大,则会发生内存溢出。这是示例代码: main_mat=zeros(500,500,2000); n=500; slice_matrix=zeros(500,500,n); for k=1:4 parfor i=1:n slice_matrix(:,:,i)=gather(gpuArray(rand(500,500))); end main_mat(:,:,1+(k-1)*n:1+(k-1)*n+n-1)=slice_matrix; %This is where the memory will likely overflow end slice_matrix有main_mat没有什么方法可以将其“粉碎” 到没有开销的地方?提前致谢。 编辑: main_mat事先分配时发生溢出。如果main_mat使用main_mat=zeros(500,500,1);(较小的尺寸)初始化,则不会发生溢出,但是由于在分配矩阵之前未进行分配,因此溢出会变慢。随着范围的k增加,这将大大降低性能。

4
为什么C编译器会优化开关,以及是否有所不同
当我偶然发现一个奇怪的问题时,我正在从事一个个人项目。 在一个非常紧密的循环中,我有一个整数,其值在0到15之间。对于值0、1、8和9,我需要获取-1,对于值4、5、12和13,我需要获取1。 我转向godbolt检查一些选项,并惊讶于编译器似乎无法以与if链相同的方式优化switch语句。 链接在这里:https : //godbolt.org/z/WYVBFl 代码是: const int lookup[16] = {-1, -1, 0, 0, 1, 1, 0, 0, -1, -1, 0, 0, 1, 1, 0, 0}; int a(int num) { return lookup[num & 0xF]; } int b(int num) { num &= 0xF; if (num == 0 || num == …

3
list :: empty()多线程行为?
我有一个列表,希望不同的线程从中获取元素。为了避免在列表为空时锁定保护该列表的互斥锁,请empty()在锁定之前进行检查。 如果对电话的呼叫在list::empty()100%的时间内都不正确,则可以。我只想避免崩溃或中断并发list::push()和list::pop()调用。 我是否可以肯定地认为VC ++和Gnu GCC有时只会empty()出错并且没有比这更糟的了? if(list.empty() == false){ // unprotected by mutex, okay if incorrect sometimes mutex.lock(); if(list.empty() == false){ // check again while locked to be certain element = list.back(); list.pop_back(); } mutex.unlock(); }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.