上一页 1 ··· 44 45 46 47 48 49 50 51 52 ··· 73 下一页
摘要: 本来自己写了一个,不过性能竟然和memcpy一样,一点提升都没有,所以有就去网上找了一个性能好的。下面的程序是对100MB数据进行内存拷贝.我测试了一下。直接调用memcpy时间为100ms左右,而asm中的程序能把时间能缩短到80ms左右。性能提高的还是很明显的。#include <iostream>#include <ctime>#define N 100*1024*256using namespace std;int main(int argc, char* argv[]){ float *a; float *b; a=(float*)malloc(N*sizeo 阅读全文
posted @ 2013-03-17 21:42 Dsp Tian 阅读(1045) 评论(0) 推荐(0) 编辑
摘要: 如果不是处理的灰度图像,那么最大值也就没什么意思了。彩色图也可以转成灰度图嘛。虽然用了汇编,不过没有使用多媒体指令。灰度图像的RGB都一样,没必要使用mmx寄存器了,直接对单个字节处理就行了。获得最小值和获得最大值原理一样,只需改一个指令,把ja改为jna就行了。Pix asmGetMaxGrayPix(BitmapData *data){ //处理的是灰度图像,所以RGB值都一样 //这里不需要用mmx指令也可以 UINT Height=data->Height; UINT Width=data->Width; Pix* p=(Pix*)data->Scan0;... 阅读全文
posted @ 2013-03-16 16:04 Dsp Tian 阅读(714) 评论(0) 推荐(0) 编辑
摘要: 权当练手了,效果不好,cpu没有提供pmulluw这样一个无符号字相乘指令。处理的效果和matlab明显不同,尤其是背景,我实在找不出问题在哪里,最可能就在寄存器符号上。灰度公式是:Gray = (R*76 + G*150 + B*30) >> 8有符号范围是[-32768-32767],无符号范围是[0-65536],前者显然不够存放255*150=38250的,所以就溢出了。提高了位宽模拟无符号相乘不行,减小运算精度也不行,开源节流都不行,让人很纠结。反正是初学,这指令还要多练才行。VOID asmARGB2Gray(BitmapData *data){ UINT Height 阅读全文
posted @ 2013-03-16 13:48 Dsp Tian 阅读(700) 评论(0) 推荐(0) 编辑
摘要: 主要用来学习多媒体指令的,要不我也不会这么麻烦的用win32 sdk编程。果然要只学习图像算法,还是推荐matlab。这里主要用了pcmpgtb指令格式 pcmpgtb mm0,mm1;解释:当 mm0 中对应字节大于 mm1对应字节时,mm0相应位置置0xff,否则置0x00。当然,相关还有pcmpgtw等。详见这里//本程序算是一个简单的框架了,可以用来处理图像//主要是用来学习多媒体指令mmx/sse相关的。#include <windows.h>#include <gdiplus.h>#pragma comment(lib, "gdiplus.lib& 阅读全文
posted @ 2013-03-14 22:01 Dsp Tian 阅读(1563) 评论(0) 推荐(0) 编辑
摘要: mmx指令:movq:移动8个字节。paddb:每1个字节作为一个整体单元相加。emms:mmx指令结束标志。#include <iostream>#include <windows.h>#include <gdiplus.h> //为将来使用GDI+处理图像做准备#pragma comment(lib, "gdiplus.lib")using namespace Gdiplus;using namespace std;typedef union{ ARGB Color; struct { BYTE Blue; BYTE Green; . 阅读全文
posted @ 2013-03-14 19:38 Dsp Tian 阅读(668) 评论(0) 推荐(0) 编辑
摘要: #include <iostream>using namespace std;int main(int argc, char* argv[]){ float a[8]={1,2,3,4,5,6,7,8}; float b[8]={1,2,3,4,5,6,7,8}; float c[8]; //两个数组相乘的结果 __asm { mov ebx,0; mov ecx,2; //循环两次 lp: movups xmm0,[a+ebx]; //一次存入xmm中... 阅读全文
posted @ 2013-03-14 15:03 Dsp Tian 阅读(655) 评论(0) 推荐(0) 编辑
摘要: 总是有些小技巧需要找个地方记录的。#include <iostream> #include <ctime> #include <Windows.h>using namespace std;int main() { clock_t start,finish; start=clock(); Sleep(500); finish=clock(); double time = finish-start; cout<<"过了"<<time<<"ms"<<endl; system(& 阅读全文
posted @ 2013-03-13 17:09 Dsp Tian 阅读(674) 评论(0) 推荐(0) 编辑
摘要: K最邻近密度估计技术是一种分类方法,不是聚类方法。不是最优方法,实践中比较流行。通俗但不一定易懂的规则是:1.计算待分类数据和不同类中每一个数据的距离(欧氏或马氏)。2.选出最小的前K数据个距离,这里用到选择排序法。3.对比这前K个距离,找出K个数据中包含最多的是那个类的数据,即为待分类数据所在的类。不通俗但严谨的规则是:给定一个位置特征向量x和一种距离测量方法,于是有:1.在N个训练向量外,不考虑类的标签来确定k邻近。在两类的情况下,k选为奇数,一般不是类M的倍数。2.在K个样本之外,确定属于wi,i=1,2,...M类的向量的个数ki,显然sum(ki)=k。3.x属于样本最大值ki的那一 阅读全文
posted @ 2013-03-06 16:11 Dsp Tian 阅读(41754) 评论(4) 推荐(6) 编辑
摘要: 在此作以记录。 代码如下: clear clc img=double(imread('lena.jpg')); matlabpool local 2 %设置核数 tic parfor i=1:1000 %多运行几次,注意不是for [s v d]=svd(img); end toc matlabpo 阅读全文
posted @ 2013-02-26 22:03 Dsp Tian 阅读(2179) 评论(1) 推荐(0) 编辑
摘要: 这里的环境是windows7+vs2010+matlabR2010b上一篇是通过engine来调用matlab中的语句,本篇是通过调用m文件编译成的h/lib/dll文件而实现的。首先写一个函数mysvd.m:function [s v d]=mysvd(a) [s v d]=svd(a);end在matlab终端输入mbuild -setup来选择要使用的编译器,按提示选择就可以了。选择好之后再输入mcc -W cpplib:libmysvd -T link:lib mysvd.m稍等片刻,当前目录下就会产生一大堆文件,不过我们只需要libmysvd.h、libmysvd.lib、li... 阅读全文
posted @ 2013-02-26 19:45 Dsp Tian 阅读(9964) 评论(5) 推荐(2) 编辑
上一页 1 ··· 44 45 46 47 48 49 50 51 52 ··· 73 下一页