小编ero*_*gol的帖子

何我在matlab中使这段代码更快?

function [D] = distChiSq( W, X )
%%% find the  Chi2Dist distance between each weight vector and X
% W is nxd
m = size(W,1);  n = size(X,1);
k = size(W,2);
mOnes = ones(1,m); D = zeros(m,n);
for i=1:n
    Xi = X(i,:);  XiRep = Xi( mOnes, : );
    s = XiRep + W;                        /************/
    d = XiRep - W;                        /************/
    D(:,i) = sum( d.^2 ./ (s+eps), 2 );   /************/
end
D = D/2;
Run Code Online (Sandbox Code Playgroud)

这是权重矩阵和数据之间的Chi2距离计算的一部分.标记的行是所有代码中消耗最多的行.有没有办法在MATLAB中更快地完成它?

如果数据是nxm s = nxm, d = …

optimization performance matlab

0
推荐指数
1
解决办法
135
查看次数

如何计算整个CUDA内核执行的执行线程数?

我想逐渐计算整个内核执行的线程执行次数.是否有本地计数器或有没有其他方法可以做到这一点?我知道保留一个全局变量并且每个线程的增量都不会起作用,因为全局内存中的变量不保证线程的同步访问.

cuda

-1
推荐指数
1
解决办法
2163
查看次数

-1
推荐指数
1
解决办法
2306
查看次数

转换成Mat后我是否需要释放IplImage?

我在代码中的几个地方执行以下操作;

cv::Mat cv_proc_image = ...
IplImage ipl_img = cv_proc_image;
cvSmooth(&ipl_img, &ipl_img, smooth_type, smooth_param1);
cv_proc_image = cv::cvarrToMat(&ipl_img);
Run Code Online (Sandbox Code Playgroud)

在观察到此操作的变化后,我观察到内存膨胀.你认为,我应该在最后一次分配后释放IplImages分配的内存吗?

c++ opencv memory-leaks memory-management

-1
推荐指数
1
解决办法
455
查看次数

查找数组的最大值和最小值时,推力是如此之慢?

这是我的内核调用代码

inline void find_min_max(thrust::device_vector<Npp8u> dev_vec, Npp8u *min, Npp8u *max){
    thrust::pair<thrust::device_vector<Npp8u>::iterator,thrust::device_vector<Npp8u>::iterator> tuple;
    tuple = thrust::minmax_element(dev_vec.begin(),dev_vec.end());
    *min = *(tuple.first);
    *max = *tuple.second;
}
Run Code Online (Sandbox Code Playgroud)

我还使用map-reduce范例和简单的CPU代码,用我的原始CUDA内核实现相同的算法.作为测量的结果,我看到推力是最慢的.

为简洁起见,我使用事件来测量原始CUDA和推力代码.如果事件适用于推力基准测试,我很确定我能正确测量执行时间.

这是测量部分;

    ....
    cudaEvent_t start, stop;
    cudaEventCreate(&start);
    cudaEventCreate(&stop);
    cudaEventRecord(start, 0);
    thrust::device_vector<Npp8u> image_dev(imageHost, imageHost+N);

    // Device vector allocation
    find_min_max(image_dev,&min,&max);

    cudaEventRecord(stop, 0);
    cudaEventSynchronize(stop);
    float elapsedTime1;
    cudaEventElapsedTime(&elapsedTime1, start, stop);
    cudaEventDestroy(start);
    cudaEventDestroy(stop);
    totalTime1 = elapsedTime1/1000
....
Run Code Online (Sandbox Code Playgroud)

我真正的问题是,除了推力中的简单minmax_element函数之外,是否还有可能采用更好的方法?

我的机器规格:这是华硕k55v笔记本电脑与GeForce 635M和i7处理器.

以及Thrust 代码和CPU 代码的所有代码

cuda thrust

-3
推荐指数
1
解决办法
2908
查看次数

sizeof在创建数组后在c ++中运行异常

可能重复:
如何查找sizeof(指向数组的指针)

我正在使用以下代码创建一个数组

float *A;
A = (float *) malloc(100*sizeof(float));
float *B;
B = (float *) malloc(100*sizeof(float));
Run Code Online (Sandbox Code Playgroud)

但在这些之后,当我按下面的方式键入A和B的大小时,我得到2,因为我希望看到100.

sizeof(A)/sizeof(float)
Run Code Online (Sandbox Code Playgroud)

c++ arrays sizeof

-7
推荐指数
1
解决办法
168
查看次数