检查机器cpu是否支持 Intel dpdk 1.7
create date: 2014-8-12 19:37:34
邮箱:linzhaolover@163.com
声明:本文只用于学习交流使用,请勿用于其他商业用途,
此文请结合intel dpdk源码去阅读,基于dpdk-1.7 版本源码讲解,源码可以去 网页中下载;更多官方文档请访问
intel DPDK交流群希望大家加入互相学习,QQ群号:289784125 intel DPDK交流群希望大家加入互相学习,QQ群号:289784125
摘要
1、编译时报的错误
dpdk1.7/lib/librte_acl/acl_bld.c:在函数acl_calc_wildness中错误:隐式声明函数_mm_popcnt_u32开始我以为是确少库,上网查了一下发限这是simd指令集,就上网找了段例程自己试一下,
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
2、查看cpu信息
# 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
注意,有的机器cpu是不支持sse4.1 和sse4.2这个指令集的,随着dpdk的版本升高,用到越来越新的指令集,希望大家在配置环境时,尽量用 新版本的机器或者系统;
加标志位在编译试试
# gcc -msse4.2 main.c -o main编译通过
3、编写测试code
我将我的测试code列在这儿,这code是在网上找的
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 ", res); return 0; }
Makefile
CC :=gcc CFLAGS += -msse4.2 objects += main.o Target := main all: $(Target) Target: $(objects) $(CC) $(CFLAGS) -c -o $@ .PHONY:clean clean: $(RM) $(objects) $(Target)
技术水平有待提高,如果文章有错误的地方希望读者指正,相互交流,互相学习;O(∩_∩)O~