create date: 2014-8-12 19:37:34
作者:朝阳tony
声明:本文只用于学习交流使用,请勿用于其他商业用途,
转载请注明出处: http://blog.csdn.net/linzhaolover
此文请结合intel dpdk源码去阅读,基于dpdk-1.7 版本源码讲解,源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
今天有人在QQ群里提到了问题,说dpdk 1.7版本在自己的机器上编译不通过,编译时报sse4.2 错;后来查到原来是cpu不支持这个指令集;
dpdk1.7/lib/librte_acl/acl_bld.c:在函数'acl_calc_wildness'中错误:隐式声明函数'_mm_popcnt_u32'
gcc main.c -o main In file included from main.c:2: /usr/lib/gcc/x86_64-redhat-linux/4.4.7/include/nmmintrin.h:31:3: error: #error "SSE4.2 instruction set not enabled" make: *** [main] Error 1
# cat /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm arat epb dts tpr_shadow vnmi flexpriority ept vpid
加标志位在编译试试
# gcc -msse4.2 main.c -o main编译通过
3、编写测试code
我将我的测试code列在这儿,这code是在网上找的
源码出处,
http://msdn.microsoft.com/zh-cn/library/bb514083.aspx
main.c
#include <stdio.h>
#include <nmmintrin.h>
//http://msdn.microsoft.com/zh-cn/library/bb514083.aspx
//发出的流 SIMD 扩展 4 (SSE4) 命令 popcnt。 此命令计算设置为 1. 参数的位数
int main ()
{
unsigned int a = 0x2F63A150;
int res = _mm_popcnt_u32(a);
printf("Result res should be 14: %d\n", res);
return 0;
}
CC :=gcc
CFLAGS += -msse4.2
objects += main.o
Target := main
all: $(Target)
Target: $(objects)
$(CC) $(CFLAGS) -c -o $@
.PHONY:clean
clean:
$(RM) $(objects) $(Target)