tag 标签: Intel

相关帖子
相关博文
  • 热度 1
    2025-2-22 14:44
    232 次阅读|
    0 个评论
    ​​在这个万物互联的时代,无线通信技术已经成为嵌入式系统中不可或缺的一部分。其中,Wi-Fi模块作为连接设备与网络的重要桥梁,其性能与兼容性显得尤为关键。Intel的AX210NGW Wi-Fi 6E模块作为一款高性能的无线网络适配器,不仅支持最新的Wi-Fi 6E标准和蓝牙5.3,还具备出色的传输速度和兼容性,为嵌入式系统的无线连接提供了强有力的支持。 AX210NGW Wi-Fi 6E模块 为了更好地满足客户对高性能嵌入式主控的应用需求,本文将详细介绍在飞凌嵌入式OK3576-C开发板上适配AX210NGW Wi-Fi 6E模块(以下简称模块)的方法,帮助开发者快速上手并充分发挥性能优势。 注:目前暂未对Wi-Fi模块的蓝牙功能进行适配,本文只讲解Wi-Fi功能的适配方式。 OK3576-C开发板接口图 首先,需要将Wi-Fi模块连接到飞凌嵌入式OK3576-C开发板上(Wi-Fi模块使用的是M.2 key A+E接口,但通过接口图看到OK3576-C开发板没有此接口,这时使用M.2转PCIe双频无线网卡转接卡进行转接就可以)。 进入内核目录开始配置: forlinx @ubuntu20 :~/ 3576 $ cd kernel- 6.1 / forlinx @ubuntu20 :~/ 3576 /kernel- 6.1 $ make menuconfig ARCH =arm64 按如下顺序进行选择: Location: - Device Drivers - Network device support (NETDEVICES ) - Wireless LAN (WLAN ) - Intel devices (WLAN_VENDOR_INTEL ) - Intel Wireless WiFi Next Gen AGN - Wireless-N/Advanced-N/Ultimate-N (iwlwifi) (IWLWIFI ) - Intel Wireless WiFi MVM Firmware support (IWLMVM ) 进行编译: forlinx @ubuntu20 :~/ 3576 /kernel- 6.1 $ export CROSS_COMPILE = /home/forlinx /3576/prebuilts /gcc/linux -x86/aarch64/gcc-arm- 10.3 - 2021.07 -x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- forlinx @ubuntu20 :~/ 3576 /kernel- 6.1 $ export PATH = $PATH :/home/forlinx/ 3576 /prebuilts/gcc/linux-x86/aarch64/gcc-arm- 10.3 - 2021.07 -x86_64-aarch64-none-linux-gnu/bin/ forlinx @ubuntu20 :~/ 3576 /kernel- 6.1 $ make ARCH =arm64 rk3576-evb1-v10-linux.img 最后将编译好的模块自行拷贝到OK3576-C开发板中,我们这里是将模块拷贝到 /root目录中了。模块在内核源码中的路径: (1) drivers/net/wireless/intel/iwlwifi/iwlwifi.ko (2) drivers/net/wireless/intel/iwlwifi/mvm/iwlmvm.ko 除此之外,还需要将Wi-Fi固件和STA脚本拷贝到/root目录中备用。 root@rk3576-buildroot:/root# ls firmware.zip fltest_wifi.sh iwlmvm.ko iwlwifi.ko STA脚本可以参考以下内容,如自行创建脚本,记得要添加可执行权限。 #!/bin/sh cnt1=`ps aux | grep hostapd | grep -v grep | wc -l` if ; then killall hostapd /dev/null fi ifconfig uap0 down function usage () { echo "Usage: -i wifi -s ssid -p password" echo "eg: ./wifi.sh -i mlan0 -s bjforlinx -p 12345678 " echo "eg: ./wifi.sh -i mlan0 -s bjforlinx -p NONE " echo " -i : mlan0 or mlan1" echo " -s : wifi ssid" echo " -p : wifi password or NONE" } function parse_args () { while true ; do case " $1 " in -i ) wifi= $2 ; echo wifi $wifi ; shift 2 ;; -s ) ssid= $2 ; echo ssid $ssid ; shift 2 ;; -p ) pasw= $2 ; echo pasw $pasw ; shift 2 ;; -h ) usage; exit 1 ;; * ) break ;; esac done } if then usage; exit 1; fi parse_args $@ if then rm /etc/wpa_supplicant.conf fi echo \#PSK/TKIP /etc/wpa_supplicant.conf echo ctrl_interface=/var/run/wpa_supplicant /etc/wpa_supplicant.conf echo ctrl_interface_group=0 /etc/wpa_supplicant.conf echo update_config=1 /etc/wpa_supplicant.conf echo network={ /etc/wpa_supplicant.conf echo ssid=\" $ssid \" /etc/wpa_supplicant.conf echo scan_ssid=1 /etc/wpa_supplicant.conf if then echo key_mgmt=NONE /etc/wpa_supplicant.conf else echo psk=\" $pasw \" /etc/wpa_supplicant.conf echo key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE /etc/wpa_supplicant.conf # echo group=CCMP TKIP WEP104 WEP40 /etc/wpa_supplicant.conf fi echo } /etc/wpa_supplicant.conf ifconfig -a|grep mlan0 |grep -v grep /dev/null if then ifconfig mlan0 down /dev/null fi ifconfig -a|grep mlan1 |grep -v grep /dev/null if then ifconfig mlan1 down /dev/null fi ifconfig -a|grep eth0 |grep -v grep /dev/null if then ifconfig eth0 down /dev/null fi ifconfig -a|grep eth1 |grep -v grep /dev/null if then ifconfig eth1 down /dev/null fi ifconfig -a|grep usb0 |grep -v grep /dev/null if then ifconfig usb0 down /dev/null fi ps -fe|grep wpa_supplicant |grep -v grep /dev/null if then kill -9 $(pidof wpa_supplicant) fi sleep 1 ifconfig $wifi up /dev/null sleep 1 (wpa_supplicant -Dnl80211,wext -i $wifi -c/etc/wpa_supplicant.conf /dev/null) echo "waiting..." sleep 3 wpa_cli -i $wifi status |grep COMPLETED |grep -v grep /dev/null if then dhcpcd -i $wifi echo "Finshed!" else echo "try to connect again..." sleep 3 wpa_cli -i $wifi status |grep COMPLETED |grep -v grep /dev/null if then dhcpcd -i $wifi echo "nameserver 114.114.114.114" /etc/resolv.conf echo "Finshed!" else echo "************************************************" echo "connect faild,please check the passward and ssid" kill -9 $(pidof wpa_supplicant) exit 1 fi fi 接下来就需要将固件部署到板卡的/lib/firmware路径下: root@rk3576-buildroot:/root# unzip firmware.zip -d /lib/ root@rk3576-buildroot:/root# ls /lib/firmware/iwlwifi-ty-a0-gf-a0* /lib/firmware/iwlwifi-ty-a0-gf-a0-59.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-66.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-71.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-72.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-73.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-74.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-77.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-78.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-79.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-81.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-83.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-84.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-86.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0-89.ucode /lib/firmware/iwlwifi-ty-a0-gf-a0.pnvm 接下来就可以加载模块了: root@rk3576-buildroot:/root# insmod iwlwifi.ko Intel(R) Wireless WiFi driver for Linux iwlwifi 0000:01:00.0: api flags index 2 larger than supported by driver iwlwifi 0000:01:00.0: TLV_FW_FSEQ_VERSION: FSEQ Version: 0.0 .2 .36 iwlwifi 0000:01:00.0: loaded firmware version 72. a764baac.0 ty-a0-gf-a0-72.ucode op_mode iwlmvm root@rk3576-buildroot:/root# insmod iwlmvm.ko iwlwifi 0000:01:00.0: Detected Intel(R) Wi-Fi 6 AX210 160MHz, REV=0x420 thermal thermal_zone6: power_allocator: sustainable_power will be estimated thermal thermal_zone6: failed to read out thermal zone (-61) iwlwifi 0000:01:00.0: loaded PNVM version 35148b80 iwlwifi 0000:01:00.0: Detected RF GF, rfid=0x10d000 iwlwifi 0000:01:00.0: base HW address: 4c:49:6c:f0:99:7a iwlwifi 0000:01:00.0 wlp1s0: renamed from wlan0 如有上述信息,说明模块已经加载成功,即可看到网卡节点信息: root @rk 3576 -buildroot :/root# ifconfig wlp1s0 wlp1s0 Link encap :Ethernet HWaddr 4 C : 49 : 6 C :F0: 99 : 7 A BROADCAST MULTICAST MTU : 1500 Metric : 1 RX packets : 0 errors : 0 dropped : 0 overruns : 0 frame : 0 TX packets : 0 errors : 0 dropped : 0 overruns : 0 carrier : 0 collisions : 0 txqueuelen : 1000 RX bytes : 0 ( 0.0 B) TX bytes : 0 ( 0.0 B) 下面开始测试STA模式: root@rk3576-buildroot:/root# ./fltest_wifi.sh -i wlp1s0 -s forlinx-wlan -p fl03123102650 ifconfig: SIOCGIFFLAGS: No such device wifi wlp1s0 ssid forlinx-wlan pasw fl03123102650 rk_gmac-dwmac 2a220000.ethernet eth0: FPE workqueue stop waiting... try to connect again... wlp1s0: authenticate with ee:b9:70:81:7d:88 wlp1s0: send auth to ee:b9:70:81:7d:88 (try 1 /3) wlp1s0: send auth to ee:b9:70:81:7d:88 (try 2 /3) wlp1s0: send auth to ee:b9:70:81:7d:88 (try 3 /3) wlp1s0: authenticated wlp1s0: associate with ee:b9:70:81:7d:88 (try 1 /3) wlp1s0: RX AssocResp from ee:b9:70:81:7d:88 (capab=0x1931 status=0 aid=42) wlp1s0: associated IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready main: control_open: Connection refused dhcpcd-10.0.4 starting dev: loaded udev DUID 00 :01:00:01:c7:92:c8:aa:4c:49:6c:f0:99:7a wlp1s0: connected to Access Point: forlinx-wlan wlp1s0: IAID 6c:f0:99:7a wlp1s0: soliciting an IPv6 router wlp1s0: rebinding lease of 192.168 .81 .206 wlp1s0: NAK: from 192.168 .80 .1 wlp1s0: soliciting a DHCP lease wlp1s0: offered 192.168 .81 .206 from 192.168 .80 .1 wlp1s0: probing address 192.168 .81 .206 /23 wlp1s0: leased 192.168 .81 .206 for 28800 seconds wlp1s0: adding route to 192.168 .80 .0 /23 wlp1s0: adding default route via 192.168 .80 .1 forked to background, child pid 1185 dhcpcd_fork_cb: truncated read 0 (expected 4 ) Finshed! 测试ping到飞凌嵌入式官网,查看是否可以正常上网: root @rk 3576 -buildroot :/root# ifconfig wlp1s0 wlp1s0 Link encap :Ethernet HWaddr 4 C : 49 : 6 C :F0: 99 : 7 A inet addr : 192.168 . 81.206 Bcast : 192.168 . 81.255 Mask : 255.255 . 254.0 inet6 addr : fe80:: 4 e49: 6 cff :fef0: 997 a/ 64 Scope :Link UP BROADCAST RUNNING MULTICAST MTU : 1500 Metric : 1 RX packets : 1547 errors : 0 dropped : 93 overruns : 0 frame : 0 TX packets : 21 errors : 0 dropped : 0 overruns : 0 carrier : 0 collisions : 0 txqueuelen : 1000 RX bytes : 150462 ( 146.9 KiB) TX bytes : 3123 ( 3.0 KiB) root @rk 3576 -buildroot :/root# ping www.forlinx.com PING s- 526319 .gotocdn.com ( 211.149 . 226.120 ) 56 ( 84 ) bytes of data. 64 bytes from 211.149 . 226.120 ( 211.149 . 226.120 ): icmp_seq= 1 ttl= 54 time= 45.9 ms 64 bytes from 211.149 . 226.120 ( 211.149 . 226.120 ): icmp_seq= 2 ttl= 54 time= 40.1 ms 64 bytes from 211.149 . 226.120 ( 211.149 . 226.120 ): icmp_seq= 3 ttl= 54 time= 39.8 ms 64 bytes from 211.149 . 226.120 ( 211.149 . 226.120 ): icmp_seq= 4 ttl= 54 time= 40.8 ms 64 bytes from 211.149 . 226.120 ( 211.149 . 226.120 ): icmp_seq= 5 ttl= 54 time= 40.5 ms ^C --- s- 526319 .gotocdn.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4007ms rtt min/avg/max/mdev = 39.813 / 41.401 / 45.867 / 2.257 m 可以看到ping飞凌嵌入式官网是正常的,这样小编就把STA模式配置好了。 那么,AP模式如何开启?接下来,我们就介绍一下如何配置AP模式。 第一步还是需要编写AP模式脚本。小编 将脚本放在了/usr/bin/目录中,文件名称为fltest_hostapd.sh ,同样的也需要配置可执行权限。 #!/bin/sh cnt=`ps aux | grep wpa_supplicant | grep -v grep | wc -l` if ; then killall wpa_supplicant /dev/null fi cnt1=`ps aux | grep hostapd | grep -v grep | wc -l` if ; then killall hostapd /dev/null fi /etc/init.d/S80dnsmasq stop echo 1 /proc/sys/net/ipv4/ip_forward #iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sleep 1 ifconfig wlp1s0 192.168.2.1 hostapd /etc/hostapd-2.4g.conf #hostapd /etc/hostapd-5g.conf /etc/init.d/S80dnsmasq start 以上就是fltest_hostapd.sh脚本的全部内容。在fltest_hostapd.sh脚本中,还用到了/etc/hostapd-2.4g.conf配置文件,以下是文件的配置内容: interface =wlp1s0 driver =nl80211 channel = 9 hw_mode =g auth_algs = 1 ieee80211n = 1 wpa = 1 ssid =OK3576_WIFI_2. 4 G_AP //AP模式wifi名称 wpa_passphrase = 12345678 //AP模式WiFi密码 wpa_key_mgmt =WPA-PSK wpa_pairwise =TKIP rsn_pairwise =CCMP 下面还需要配置下dnsmasq.conf服务: root@rk3576-buildroot:/root# vi /etc/dnsmasq.conf interface=wlp1s0 bind-interfaces except-interface=lo dhcp-range= 192.168.2.100 , 192.168.2.254 , 12h dhcp-option= 3,192.168.2 . 1 dhcp-option= 6,192.168.2 . 1 有的朋友可能就要问了,在其他系统上使用的是udhcpd服务,为什么在这里使用的DNSmasq服务?下面就简单介绍一下这两个服务的区别: (1)udhcpd 是来自 BusyBox 工具集的 DHCP 服务器程序。主要的功能是为本地网络设备分配动态IP地址、子网掩码、网关等信息。DHCP服务本身是不包含DNS转发或其他的网络服务。 (2)DNSmasq 是一个轻量级的 DNS 转发器和 DHCP 服务器软件。 ① 可以将DNS查询的请求转发到上游DNS服务器,并缓存这些查询结果,目的是为了提高网络应用的响应速度。 ② 做DHCP服务器时与第一条udhcpd服务功能相同,这里就不做重复介绍了。 此外,应用场景也不同,DNSmasq主要用于小型网络环境。易于配置和管理,如家庭网络、小型办公室和路由器中;而udhpcd服务适合用于嵌入式系统或者资源有限的环境中。 扩展知识介绍完毕,下面就开启AP模式: root @rk 3576 -buildroot :/root# fltest_hostapd.sh wlp1s0: deauthenticating from ee :b9: 70 : 81 : 7 d : 88 by local choice ( Reason : 3 =DEAUTH_LEAVING) killall : hostapd : no process killed Stopping dnsmasq : FAIL Starting dnsmasq : OK IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready wlp1s0: interface state UNINITIALIZED-ENABLED wlp1s0: AP-ENABLED root @rk 3576 -buildroot :/root# ifconfig wlp1s0 wlp1s0 Link encap :Ethernet HWaddr 4 C : 49 : 6 C :F0: 99 : 7 A inet addr : 192.168 . 2.1 Bcast : 192.168 . 2.255 Mask : 255.255 . 255.0 UP BROADCAST RUNNING MULTICAST MTU : 1500 Metric : 1 RX packets : 50382 errors : 0 dropped : 2982 overruns : 0 frame : 0 TX packets : 261 errors : 0 dropped : 0 overruns : 0 carrier : 0 collisions : 0 txqueuelen : 1000 RX bytes : 4291281 ( 4.0 MiB) TX bytes : 27170 ( 26.5 KiB) 下面就是要使用手机连接飞凌嵌入式OK3576-C开发板的热点了。 root @rk3576 - buildroot: / root# ping 192.168 .2 .225 PING 192.168 .2 .225 ( 192.168 .2 .225 ) 56 ( 84 ) bytes of data. 64 bytes from 192.168 .2 .225 : icmp_seq = 1 ttl = 64 time = 142 ms 64 bytes from 192.168 .2 .225 : icmp_seq = 2 ttl = 64 time = 60.1 ms 64 bytes from 192.168 .2 .225 : icmp_seq = 3 ttl = 64 time = 88.2 ms 64 bytes from 192.168 .2 .225 : icmp_seq = 4 ttl = 64 time = 110 ms 64 bytes from 192.168 .2 .225 : icmp_seq = 5 ttl = 64 time = 69.9 ms ^ C --- 192.168.2.225 ping statistics --- 5 packets transmitted, 5 received, 0 % packet loss, time 4004 ms 到此,一个新的AX210NGW Wi-Fi 6E模块就已经适配完成了。小编在这里想告诉大家的是,PCIe Wi-Fi模块的适配思路都是一样的,如果有其他Wi-Fi模块,大家也可以参考此方法动手尝试。
  • 热度 6
    2024-10-29 10:34
    341 次阅读|
    0 个评论
    当前使用的QPP版本为23.4,工程在经过多次编译后,发现工程文件夹变得逐渐宏大,几天的时间,发现整个工程大小超过了2G字节。和以前老版本一样,工程建立后经过编译都会生成几个文件夹,其中有个文件夹用来存储数据库,之前版本产生的文件夹名称为”DB“。而最新的QPP会有一个名为DNI的文件夹来替换DB文件夹,存储数据库。 每次编译后,经过仔细研究,发现工程目录变大的根本原因就是DNI会逐渐变大。在Intel的论坛咨询,给出的回复是这是QPP23.3与23.4一个已知的问题,目前无法解决,可能会在未来版本中解决。当前可以通过定期手动方式删除DNI目录下的Sandbox文件夹。 查看DNI文件夹,发现果然在DNI下还有几个文件夹,而大部分容量大小都产生与整个Sandbox文件夹。 下述链接给出了该问题的答案。 https://www.intel.com/content/www/us/en/support/programmable/articles/000098118.html 手动删除,也可以通过TCL脚本来实现,创建一个TCL脚本文件,将下述命令放置在脚本文件中,用实际工程名替换”project_name“ project_open dni::delete_stale_sandboxes project_close 需要清除的时候,执行上述脚本。可以直接在命令行中通过命令“quartus_sh -t ”,或者在Quartus软件中TCL控制台执行此文件。
  • 热度 2
    2024-9-20 18:35
    750 次阅读|
    0 个评论
    有关Lunar Lake的少量信息更新...
    前两周写了一篇有关 Lunar Lake 如何实现低功耗的文章: 谈谈Lunar Lake的低功耗设计:听说x86做不了低功耗? 有读者一笔评论如上,感觉这个总结是比较到位的——虽然我在文章里也没直接提,不过在 ring 总线之外,本质应该也就是跟电源管理有关吧。 这里再给些补充资料,虽然感觉干货也不算多。Hot Chips 上, Chip and Cheese 采访了 Intel ,以下我摘取部分内容做了翻译,方括号里头的是我的屁话: Q:...Lion Cove 核心不带 SMT(超线程)。我们也从行业内的其他人那里听说,要在相同功耗下获得出色性能,SMT 并不是个好方法。所以为什么会取消 SMT,是否的确如他们所说? Arik Gihon:这种说法并不完全准确。SMT 对于扩展多线程是个不错的特性。相同的核心上跑 2 个线程,在不需要增加太多功耗的情况下,就能获得 nT 性能,所以以相似的模式就提升了性能。以前比现在的收益还多一点,以前大约 30% 额外的性能,现在大约 20% 左右。 现在情况发生了一些变化。我们在扩展多线程性能的高层级架构方面,增加了 E-core。这是扩展多线程更为高效的方式。所以现在,如果我们期望在核心上高效地跑单线程,方法之一就是去除(同时)多线程,并且构建更为有效的、能够以更低功耗提供 IPC 性能的核心。 Q:提到 Lunar Lake 上的 E-core,你们把所有 E-core 都放到了 ring 以外。以前在 Meteor Lake 上,E-core 放在 CPU tile 上,而 LP E-core 放在 SoC tile 上。这次你们将全部 E-core 都放到了低功耗岛上,原因是什么? Arik:是的,上一代我们将两个 LP E-core 放到了 ring 总线之外,不在 compute die 上。我们对其做了进一步优化,Lunar Lake 之上我们将 4 个 E-core 放到了 ring 以外,以提升效率。Ring 和 LLC 的确会在某些情况下带来收益,但有时代价也很大。 相较于 LLC 能够给到的额外 IPC,要让 Lunar Lake 具备低功耗特性,这么做带来了相当不错的收益,包括延迟、存储,以及功耗开销。 Q:从缓存架构角度来看,新的 P-core 有了新层级的 intermediate L1 cache。现在也就有了 4 级数据 cache 和 SLC cache,这对延迟敏感型程序会带来怎样的影响? Arik:很不错的问题。我不确定这是否会影响到延迟,的确会提升延迟表现(improving latency)...相较于原 L1 cache,可能改善了多个周期(several cycles)... Q:某些情况下能够帮助延迟方面的表现,因为让原本要放进 L2 的部分离核心更近了。 Arik:是的。我在演讲中展示了延迟数据,可以看到相较于上一代 Redwood Cove,在更低层级 buffer size 部分,大核心的延迟表现有提升... Q:Memory Side Cache 在 Lunar Lake 里头是个新东西... 内存操作减少程度如何? Arik:这主要取决于负载,和应用的 footprint;取决于多少东西能够放进 cache 里,情况会有差别。会有一些负载从中获益颇多,因为我们将更多东西分配进了 system cache... Q:谈到负载,这也会包含 iGPU 吗?iGPU 也会是 Memory Side Cache 的使用大户吗? Arik:No it's not due to the footprint . Q: iGPU 实际上无法真正从光追单元获得多少有效性能,为什么要增加完整光追单元的用料?是为了缩减验证时间吗 ? Arik:不是的。架构的某些部分能够更好地利用硬件资源,更好地利用光追单元,所以在 Lunar Lake 上就这么做了。 Q: Lunar Lake 上很多东西都重新整合到了同一片 die 上,为什么回到这种 monolithic 设计? Arik:这是种权衡(trade-off)... ...
  • 热度 7
    2024-7-4 13:40
    418 次阅读|
    0 个评论
    各大Logo更新汇报 | NEW 百佳泰为ISO/IEC17025实验室,亦获得国际协会授权,可提供超过30种标准认证测试,特为您整理2024年6月各大Logo的最新规格信息。 Bluetooth ▶Bluetooth SIG 董事会于6月11日批准了第三版QPRD,其中概述了新的蓝牙资格流程 ■ https://www.bluetooth.com/download/qprd-document/?tmstv=1718127803 Intel EVO (Project Athena) IAT Test ▶英特尔EVO系统设计规范第5版修订版1.0于2024年5月发布,适用于Lunar Lake和Arrow Lake平台。 Matter ▶CSA会员会议 – 华盛顿特区 ■ 2024年6月24-27日 ■ 华盛顿特区 USB ▶百佳泰台湾获准进行USB 3.2 Gen 2×2 主机及外围测试。 ▶若您的公司首次进行USB4认证,以下产品必须参加PIL认证。 ■ USB4 v1 芯片主机和集线器/扩展坞 Wi-Fi® ▶Wi-Fi CERTIFIED WPA3和Wi-Fi Enhanced Open Deployment Guide已发布。 ■ https://www.wi-fi.org/file-member/wpa3-and-wi-fi-enhanced-open-deployment-and-implementation-guide
  • 热度 4
    2022-7-31 15:37
    4526 次阅读|
    1 个评论
    从Imagination GPU聊起:当手机芯片,应用于服务器和超算
    说个挺有趣的推论啊。上周 参加 Imagination Technologies 的技术研讨会 ,这家公司当然就是要宣传自家的 TBDR 架构 GPU 嘛——对 GPU 架构比较熟的同学应该知道,这叫基于 tile 的延后渲染架构。 就不科普立即渲染(IMR)、TBR、TBDR 的差别了——不理解也没关系。从直觉来看——或者至少是我理解的,TBR / TBDR 这里面的 TB (tile-base),以及 D (deferred),最初都是面向移动设备的,或者说面向那些功耗敏感型设备的。 因为所谓的 tile-based,可以简单理解为把要渲染的东西切分成一块一块的。某种程度上,之所以要这么做是因为移动设备的功耗和带宽,上限都不可能放宽到桌面平台的水平。所以这么一切,GPU 就不需要频繁地跟内存做交互了。 Arm Mali、苹果 GPU、高通 Adreno 什么的都是这么搞的嘛。至于“D”的部分,那又是另一个话题。但核心就是移动 GPU 有针对带宽、功耗特别优化过的渲染管线。(至于很多人所说 Nvidia、AMD 的 GPU 也有 tile-based 这种设定,这一点有兴趣的可以自己去查资料,这个话题要展开有点过大) 补充:知乎有同学提到,TBDR 是在桌面端战不过竞争对手,所以才转而面向移动市场,而非天然针对移动设备。好吧,似乎的确是这么回事...那么姑且就以厂商后期的宣传来这么定义好了... 一 我们知道,现在 GPU 的地位跟以前不一样了,GPU 开始上天入地了 - 在手机、汽车、IoT、PC、数据中心里面的地位都越来越重要。做 GPU 芯片和 GPU IP 的公司,普遍在谈 GPU 架构的弹性扩展能力。 就是我设计一个基础单元,然后把这个基础单元复制粘贴两份,算力不就变高了吗?复制粘贴 4 份,可以用在手机上了;复制粘贴 20 份,可以用在电脑上了;复制粘贴 n 份,就能用在服务器上了......当然了,这个复制粘贴“基础单元”的设备形态会有变化,而且算力也不会线性提升;另外作为 GPU 嘛,还需要一些固定功能单元之类的搭配。 那就涉及到一个问题。比如 Imagination 做的 GPU IP,这个 IP 以前不就是给手机准备的吗?——前面说的 TBDR,功耗、带宽受限...那把这种架构的“基础单元”复制个几十份几百份,用在服务器上,真的合理吗? 这个事情呢,感觉好像也不怎么复杂。苹果 GPU 在架构上基本就是沿袭自 Imagination PowerVR,所以整体上也是 TBDR 的。这种设计最初用在 iPhone 上,后来用在 iPad 上,现在已经用在了 Mac 上,而且是工作站级别的计算机上——充分表示,好像这么复制粘贴问题也不是很大。所以起码在 PC 上用 TBDR 架构的 GPU 好像也挺好的(虽然现在也有相关这方面的讨论)... 二 这基于一个大前提,就是以前那些所谓“对功耗不敏感”的设备和场景,在这个时代背景下,考察其 KPI 的方法已经不一样了。你看以前我们说台式机,那肯定不是什么功耗敏感型设备——你说桌面 CPU、GPU 功耗高,再高,上限也高不过空调吧?不过多耗几度电的问题。 现在就不是这么回事了,媒体、评测机构对桌面 CPU/GPU 的功耗和效率都在意得不得了;苹果更是在发布会上带头说 Mac Studio 一年能节约多少电,保护多少地球......而更高算力和功耗需求的数据中心就更是如此了,一方面是节电能力涉及到总体成本问题——而且在规模很大的时候,电费和散热系统产生的费用还真的是一笔不小的开支。还有汽车,里程焦虑晓得伐? 所以这个时候,大量设备都变得“功耗敏感”了,“功耗敏感”就不仅限于手机、笔记本这种东西。这个时候像 TBDR 这种原本给手机的架构,又是 tile-based,又是各个环节数据压缩来缩减带宽的,是不是就突然在更大型的设备上变得很吃香了呢? 这其实也是 Imagination 在宣扬的事情。不过也不止于此。 三 另一点是周末跟朋友在聊天的时候说的一些感悟。就是你们看苹果 Mac 这一路的发展啊,还挺有意思。上古时代基于 68k 就不谈了。在 68k 以后,苹果开始给 Mac 电脑用 PowerPC 处理器——那是早在和 Intel 合作以前的故事。PowerPC 是苹果、IBM、摩托罗拉合作的东西。 要说 PowerPC 的血统,其实有很大一部分是大算力设备下放的(虽然好像并非全然如此);某一些是 IBM 搞 POWER 之余,下放给 PC 的。比较具有代表性的,末代 PowerPC G5 是脱胎于 IBM POWER4 服务器处理器。 在当时那个时代似乎是个很稀松平常的事情。而且周末还跟朋友聊到说,那些搞大东西的公司,起初是不怎么瞧得上消费电子市场的。而且当年听 IBM 说,越到后期,PowerPC 越成为他们开发的一个累赘。但这种“下放”的思路本身应该是有问题的。 抛开什么规模效应、芯片设计与制造脱钩之类的历史故事不谈,当时 Intel 能够脱颖而出的一个重要原因,我觉得是 Intel 起家就是给 PC 做处理器的,而不是给商用设备做了处理器、然后下放给个人电脑。血统、思路就有相当差异。 四 而随着时代发展,移动时代到来,智能手机成为一个大生意。Intel 没能抓住这个机遇是挺可惜的。其实最初 Intel 也是不怎么瞧得上这个市场的,像当年的故事重演吧? 不要说什么“下放”,现在的时代趋势,像开头说 TBDR 架构的 GPU 用到工作站、服务器上都没什么毛病了。真的就是大算力设备,已经普遍在用,原本那些专门面向“功耗敏感型”设备的处理器基础架构了。 比如亚马逊云服务器 Graviton 芯片,应用的那个 Arm Neoverse 架构,本质上是 Cortex A 系列的改款——这不就是手机处理器的架构吗?当然了,这个“改款”涉及的东西比较多,因为“复制粘贴”在规模做得很大以后,就没那么简单了。 还有现在 Nvidia 很红的 Grace CPU,面向的是 HPC AI - 真正的大算力应用场景。这个 Grace 也是基于 Arm Neoverse......苹果的 M1 Ultra 就更不用说了吧:应用于工作站的处理器芯片,其核心本质上也就是 A14 的规模扩大版——也就是 iPhone 12 上那个芯片和架构。挺有意思的吧? Arm 是靠什么起家的呢?低功耗~查 Acorn 的缘起,真的是妥妥的低功耗,当年他们应该都没想过还要上大算力设备。 这叫啥?如果以前“下放”的思路是常规,那现在就是“上放”的时代了吧。我们总结说:以前那些做大东西的有多瞧不上消费电子的小东西,现在做小东西的就有多瞧不上那些做大东西的。 当然了,这个故事还是说简单了,其中还是有很多细节问题的。 不过我想说的是,回看开头咱们在谈 Imagination 的 TBDR 架构要从手机,一路覆盖到服务器;不说 Imagination 能不能行,单就说这种思路,就是时代的主旋律了。(不过还有一种可能性,就是不同的时代,谁比较红,谁的架构就能一统天下...至于“需求”和“市场说辞”,那总是可以找得到的。 以上皆为瞎扯,下回书再见。
相关资源