随想录(在x86 linux上仿真多核cpu运行)
来源:互联网 发布:java crm项目介绍 编辑:程序博客网 时间:2024/05/22 08:09
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
搞过嵌入式开发的朋友都知道无论在实际环境还是在fpga上调试代码是一件非常辛苦,同时吃力不讨好的事情。一方面芯片的片上资源少,另外一方面就是除了软件之外你还要处理各种意外的硬件事故。好一点的公司可能还会提供虚拟机来调试,但很多时候虚拟机的稳定性也是一个问题。搞过skyeye的朋友应该比较有体会。
其实,如果调试驱动代码或者cpu boot代码,那么毫无疑问应该在实际环境上开发。但是如果开发的代码只是c的内容,其实在x86上仿真就可以了。x86的调试环境极其稳定,而且支持的功能也很多,另外x86对单核、多核的支持也是非常的好,这是很多开发板无法比拟的。
打个比方,在实际环境上调试多核是一件很累的事情。但是在x86上,尤其是多核x86上,你只需要起两个thread,分别绑定到不同的cpu就可以了。就是这么简单。下面给出一份简单的linux thread绑定代码。编译的方法是gcc start.c -g -o start -lpthread即可。原来的代码地址在http://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html。
#define _GNU_SOURCE#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#define handle_error_en(en, msg) \ do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)intmain(int argc, char *argv[]){ int s, j; cpu_set_t cpuset; pthread_t thread; thread = pthread_self(); /* Set affinity mask to include CPUs 0 to 4 */ CPU_ZERO(&cpuset); for (j = 0; j < 4; j++) CPU_SET(j, &cpuset); s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset); if (s != 0) handle_error_en(s, "pthread_setaffinity_np"); /* Check the actual affinity mask assigned to the thread */ s = pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset); if (s != 0) handle_error_en(s, "pthread_getaffinity_np"); printf("Set returned by pthread_getaffinity_np() contained:\n"); for (j = 0; j < CPU_SETSIZE; j++) if (CPU_ISSET(j, &cpuset)) printf(" CPU %d\n", j); exit(EXIT_SUCCESS);}
怎么看有没有绑定成功呢?你可以添加一段while(1); 代码。然后输入top命令,按下1,看看对应的cpu有没有使用率达到100%就可以了。
3 0
- 随想录(在x86 linux上仿真多核cpu运行)
- 随想录(qemu仿真linux kernel)
- 查看Apk 运行在多核cpu的那些核心上
- 随想录(skyeye中的soc仿真)
- Linux 进程在哪个CPU上运行
- 多核环境下绑定进程运行在指定的CPU核上
- Kivy A to Z -- 通过绑定进程运行CPU提高Python程序在多核CPU平台上的性能
- 随想录(risc cpu的那些事)
- 多核CPU运行模式
- 随想录(linux的四个维度)
- 随想录(linux的四个维度)
- 随想录(linux的四个维度)
- 多核处理器中,使线程运行在指定CPU核心
- linux下让进程运行在指定的cpu上
- linux下让进程运行在指定的cpu上
- linux下让进程运行在指定的cpu上
- linux下让进程运行在指定的cpu上
- 在SkyEye上仿真运行uClinux
- 客户端获取url返回的值
- SQL%BULK_ROWCOUNT 和SQL%ROWCOUNT的区别
- Line.h
- ERWIN导出SQL 附带注释
- thinkphp- CronRunBehavior.class.php如何使用?
- 随想录(在x86 linux上仿真多核cpu运行)
- java 线程同步:synchronized 关键字
- couldn't open file on client side trying server side
- 情感分析简述
- 今天遇到了Xcode Unknown Class问题
- Android 异步处理
- java猜数字,一个简单的游戏
- php,缓存数据流(标准输出)
- 使用bootstrap模板开发,网页打开很慢的解决办法