IPP全名是Integrated Performance Primitives,有个中文译名,叫英特尔® 群集工具集, 名字颇为拗口,但其功能非常直接:提供程序处理中的优化功能。编程的时候,如果在一些很关键且耗用CPU的处理中进行优化处理,可以大幅度提高程序性能和 缩短执行时间。这些优化,除了对程序进行合理安排之外,就得使用一些高性能的汇编指令了。不过这么一来,程序变得复杂,而且难以维护,还有就是不同的 CPU(甚至包括尚未出现的)的对应也会成问题。对此,英特尔的IPP给出了比较完善的回答。
IPP可以从英特尔网站下载。其Linux版本是免费的,而Windows版可以免费得到评估版,如果你要使用Windows版作商业用途,则应该付199美元。
这里简单介绍一下IPP的用法。刚打开一个IPP的头文件,会觉得里面的函数名如同天书一般的复杂。其实根据其文档看,名字还是有规律的。
一般的IPP函数名如下:
ipp<data-domain><name>_<datatype>[_<descriptor>](<arguments> ) ;
这里的data-domain所谓的域,指的是该IPP函数所属的功能范围。s(signals)代表一维的信号处理;i(images/video)代表二维图像处理;m(matrices)代表矩阵处理。
datatype数据类型的定义是
这里u是无符号,s是有符号,f是浮点数,c是复数。
descriptor是描述符,描述要操作的数据。
A表示数据有Alpha色。
C加数字n表明图像数据有几个颜色频道,1|2|3|4。
I表示操作仅在此数据内存的范围内进行,不需要多余的内存空间。
R表示需要指定ROI即圈选范围。
以此来看最常用的申请内存的函数ippiMalloc。由开头的ippi可以知道这是用于二维图像的,所以需要指定宽和高,还有一个用于返回逐行字节长度的指针。
Ipp
看说明它有以下这些修饰符:
8u_C1 16u_C1 16s_C1 32s_C1 32f_C1 32sc_C1 32fc_C1
8u_C2 16u_C2 16s_C2 32s_C2 32f_C2 32sc_C2 32fc_C2
8u_C3 16u_C3 16s_C3 32s_C3 32f_C3 32sc_C3 32fc_C3
8u_C4 16u_C4 16s_C4 32s_C4 32f_C4 32sc_C4 32fc_C4
8u_AC4 16u_AC4 16s_AC4 32s_AC4 32f_AC4 32sc_AC4 32fc_AC4
因此就可以根据自己的不同需要来调用不同的ippiMalloc函数了。
最后给一个小例子。
HANDLE hFile;
DWORD szFile, dwBytes;
Ipp8u *bmpData, *data;
hFile = CreateFile("TEST.BMP", GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("Could not open file (error %d)n", GetLastError());
return;
}
szFile = GetFileSize(hFile, NULL);
data = (Ipp8u *)ippMalloc((int)szFile);
ReadFile(hFile, data, szFile, &dwBytes, NULL);
CloseHandle(hFile);
IppiSize iSize;
BITMAPINFOHEADER *header;
int lineStep;
header = (BITMAPINFOHEADER *)(data + sizeof(BITMAPFILEHEADER));
bmpData = data + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
iSize.width = header->biWidth;
iSize.height = header->biHeight;
lineStep = ((header->biWidth * 24 + 31) / 32) * 4;
ippiMirror_8u_C3IR(bmpData, lineStep, iSize, ippAxsHorizontal);
hFile = CreateFile("TEST1.BMP", GENERIC_WRITE, 0,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("Could not open file (error %d)n", GetLastError());
ippFree(data);
return;
}
WriteFile(hFile, data, szFile, &dwBytes, NULL);
CloseHandle(hFile);
ippFree(data);
这是段完整的程序,它所做的是读入一个RGB24位的BMP文件TEST.BMP,然后将图像进行水平翻转,写到一个叫TEST1.BMP的文件里。(这 里故意使用Win32的文件处理函数,喜欢Unix风格的就自己修改吧)用到的IPP函数是ippiMalloc,ippFree, ippiMirror_8u_C3IR。
1 条评论:
评论源自: 逸立
咋一见“英特尔”我还以为这位葛格要开唱《国际歌》呢···
06-04-24 @ 17:59
评论源自: casi
我有一种感觉叫做"晕"
06-04-25 @ 04:34
评论源自: 崴跛司机
代码优化,这可是一个狠大的题目哈
俺们写游戏engine,很大一部分工作就是做这个滴:针对目标平台作优化,尽可能把目标平台的硬件性能使用到极限,榨出每一滴“汁”,8过随着目标平台越来越复杂,大家也有点力不从心的感觉鸟
在俺们行业,目前为止,大家追求的终极目标就是:在保证足够帧率的情况下,进行尽可能多的计算(Physics, AI, Networkworking, etc.),提供更加高的分辨率,可以表现更加多图形元素,更加多的光影效果,更加逼真的音视频播放,等等等等
06-04-25 @ 11:54
评论源自: 逸立
王糊!!躲哪儿去了?!出来!回帖子!!!
06-04-25 @ 22:07
评论源自: WANGHU
逸立:“英特尔”我还以为这位葛格要开唱《国际歌》呢···王糊!!躲哪儿去了?!出来!回帖子!!!
---------------------------------------------
啧啧,老李在瓢虫那里呆的时间太长聊,怪不得FF说你像呢。 :p
06-04-26 @ 06:59
评论源自: WANGHU
casi:我有一种感觉叫做"晕"
----------------------------
是啊,做挨踢这行的一个很重要的开发平台奏是“晕”:晕酒屋,晕酒吧,晕迷,晕二钱,晕叉疲。
06-04-26 @ 07:01
评论源自: WANGHU
崴跛司机:代码优化,这可是一个狠大的题目哈
-------------------------------------------
偶怎么敢惹这么大的题目?不过是拿其中很小很小的一部分蜻蜓点水罢聊。
06-04-26 @ 07:02
评论源自: casi
说到这里要请教: 我特讨厌XP, 但是新硬件在2千以前又不支持; 我想用些老游戏, 2千以后又不支持, 怎摸半说?
BTW, 据说2千漏洞相对少些?
06-04-26 @ 19:06
评论源自: WANGHU
回casi,你可以在XP上安装虚拟机,就可以拥有自己想要的系统了,虽然速度慢,但老游戏应该是没问题的。
2000的版本是5.0,XP的版本是5.1,可见应该是XP补了不少2000的漏洞。
06-04-26 @ 19:44
评论源自: casi
虚拟鸡是怎么回事?
机器是P4HT, 好象是风扇很吵, 有没有办法能安静些?
06-04-27 @ 18:00
评论源自: WANGHU
虚拟鸡是Virtual PC。可以允许你在XP上建立虚拟的OS,共享现有的硬件。P4HT应该没有问题。
风扇吵,如果是最近才发生的而不是一直有的话就可能是摩擦的问题,可以打开机箱看看,看有无接线碍事,要不可以滴上一小滴机油。
06-04-27 @ 19:03
评论源自: casi
LINUX安全性如何? 是不是兼容不如瘟多司好?
最近老提不起看电影的兴致, 却想起两个老片, DISCLOSURE, 精彩的办公室斗争; COLLATERAL, 昏暗的人性. 我自己是不是就是生活里的办公室斗争中的昏暗人性? 或者只是喝多了没醒?
06-04-28 @ 06:31
评论源自: WANGHU
偶认为安全性是相对的。一个咚咚如果流行了,奏会变得不安全了。Windows也正因为它如此普及才会有这么多问题。Linux不能普及也是因为不如Windows好用。
微软的瘟虽然问题多多,却相对的来说是比较好的,奏像是民 主制度,非常糟糕,却找不到比它更好的。
Disclosure应该是女上司对男部下的性骚扰吧;另一部是阿汤第一次?演坏蛋,未免有些力不从心。
偶最近看的片子都不是大作:family stone, cavanosa, 恋爱地图。
06-04-28 @ 06:59
评论源自: casi
奏像是民 主制度,非常糟糕,却找不到比它更好的。
-------------------------------------------
都说出这么精练的话了, 怎摸又说 "Disclosure应该是女上司对男部下的性骚扰吧", 正常情况下, 有哪个部下敢骚扰上司? 所以骚扰骚扰, 实则是权力体现; 然后, 为伸摸说"阿汤第一次?演坏蛋,未免有些力不从心。", 客观说, 酱汤的技术应该算中等水准吧, 可能和FOX相比逊些, 但全片看下来我觉得没有明显漏洞, 在台词上很道地
06-04-28 @ 20:13
评论源自: WANGHU
这句精炼的话不是偶说的。
……不过要是抬杠的话……
如果上司没有魄力,反过来被部下骚扰也是有可能的;但那部片子,是一反通常男上司骚扰女部下的模式,才是偶说那句话的本意。
阿汤的演技一直是中等水准,可是因为他的名气,偶不得不对他严格要求一些。
06-04-29 @ 06:32
评论源自: casi
haa, 酱汤的定位应该是所谓偶像而非演技吧, 他的名气本不是从技术上来, 如果凭脸蛋就成为2M俱乐部一员, 还何必非钻研演技呢? 重要的是结果不是吗
跑提抬杠皆由我起, 惭愧惭愧
06-04-29 @ 07:35
评论源自: WANGHU
抬杠无所谓。TomCat(前一半)定位是偶像,但好莱坞的这些偶像都有一个梦想:成为演技派演员。阿汤对此付出了很大的努力,但,革命尚未成功。
06-04-29 @ 13:26
评论源自: Flora
请问IPP支持WinCE5.0操作系统吗?
06-06-07 @ 18:59
评论源自: WANGHU
Flora:请问IPP支持WinCE5.0操作系统吗?
-----------------------------------------
depends on what kind of CPU you are using.
06-06-07 @ 20:30
发表评论