实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

小编 23 0

只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

机器之心报道

机器之心编辑部

提高 GPU 利用率,就是这么简单。

AI 的快速发展,伴随而来的是大计算量。这就自然而然的引出了一个问题:如何减少 AI 对计算的需求,并提高现有 AI 计算效率。

为了回答这一问题,来自斯坦福的研究者在博客《GPUs Go Brrr》中给出了答案。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

博客地址:https://hazyresearch.stanford.edu/blog/2024-05-12-tk

文章主要专注于两个问题:一是硬件真正需要什么?二是如何满足硬件需求?

文章用大量篇幅讨论了如何让 GPU 更快的运行,并发布了一个库 ThunderKittens,用户可以很容易地在 CUDA 上编写快速的深度学习内核。其具有以下特点:

简单,ThunderKittens 写起来非常简单。可扩展性,如果用户需要 ThunderKittens 无法提供的功能,可以进行功能扩展。速度快。实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

GitHub 链接:https://github.com/HazyResearch/ThunderKittens

ThunderKittens 使得一些棘手的事情变得非常简单,从而在现代硬件上实现了非常高的利用率。项目中,作者用 ThunderKittens 编写了一个 RTX 4090 简单的 FlashAttention-2 内核,代码总共有 58 行代码(不包括空格),结果显示,ThunderKittens 在 RTX 4090 上实现了大约 122 TFLOP(理论最大值的 74%)。此外,内核程序只有 100 行的情况下,ThunderKittens 在 H100 上的性能比 FlashAttention-2 高出约 30%。

英伟达 H100 有些小怪癖

该研究重点关注 NVIDIA H100,不过所介绍的内容也适用于其他 GPU。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

H100 SXM GPU 包含:

80 GB HBM3,带宽为 3 TB/s(实际上带宽会少一些);50 MB 二级缓存,带宽 12 TB/s,在 GPU 上分成两个 25MB 的部分,通过 crossbar 连接;132 个流多处理器 (SM,streaming multiprocessors)。

除了上述这些,H100 SXM GPU 还有很多可关注的东西,例如内存控制器、指令缓存等。

研究者表示保持张量核心的运行流畅并不容易。他们发现了一些 AI 硬件上的怪癖,这些怪癖中的很多内容也适用于非 H100 GPU,但 H100 尤其棘手。(相比之下,RTX 4090 则非常容易使用),这些怪癖包括:

WGMMA 指令是必需的,但使用起来也非常令人恼火;共享内存实际上并没有那么快,并且需要非常小心;地址生成成本很高;占用率仍然有帮助,寄存器通常是关键资源。实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

文章进一步描述了 GPU 这些怪癖的具体内容。

WGMMA 指令令人恼火

H100 有一组新指令,称为「warp group matrix multiply accumulate,WGMMA」(PTX 中的 wgmma.mma_async,或 SASS 中的 HGMMA/IGMMA/QGMMA/BGMMA)。以前的 GPU 上可用的张量核心指令是 wmma.mma.sync 和 mma.sync 。通过这些指令,SM 单个象限上的 32 个线程将同步地将其数据块馈送到张量核心并等待结果。

不同的是,wgmma.mma_async 指令并非如此,128 个连续线程(分布在 SM 的所有象限中)协作同步,并直接从共享内存(也可以选择寄存器)异步启动矩阵乘法。

在基准测试中,研究团队发现这些指令对于提取 H100 的完整计算是必要的。如果没有它们,GPU 的峰值利用率似乎只能达到峰值利用率的 63% 左右。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

共享内存

共享内存的单次访问延迟约为 30 个周期,这听起来似乎不算多,但在这段时间内,SM 的张量核心几乎可以完成两个完整的 32x32 矩阵乘法运算。

共享内存处理起来有些棘手,因为它被存储(banked)在 32 个独立的内存存储中。如果不小心,这可能会导致所谓的 bank 冲突,即同一内存 bank 被要求同时提供多个不同的内存片段,导致请求被串行化,这可能会不成比例地减慢内核的速度 - 而 wgmma 和 mma 指令所需的寄存器布局会受到这些 bank 冲突的影响。解决方法是使用各种交错模式重新排列共享内存,以避免这些冲突。

地址生成

H100 其中一个特点是张量核心和内存都足够快,以至于仅仅生成用于获取数据的内存地址就占据了芯片资源的相当一部分。

NVIDIA 似乎已经意识到了这一点,因为他们赋予了 GPU 张量内存加速器(或称之为 TMA)。TMA 允许用户在全局和共享内存中指定多维张量布局,这节省了所有的地址生成成本,并且还使得构建 pipeline 更加容易。

研究团队还发现 TMA 和 wgmma.mma_async 一样,在实现 H100 的全部潜力方面是完全不可或缺的。

占用

在某些方面,与前几代硬件相比,H100 对占用率的依赖程度较低。NVIDIA 确实在设计 GPU 时考虑了占用率。虽然对于 H100 来说,占用率只能说有用,但作用不大。研究者发现在 A100 和 RTX 4090 上它变得越来越重要。

ThunderKittens

那么,如何才能更轻松地编写内核,同时仍兼具硬件的全部功能?

研究团队设计了一个嵌入 CUDA 中的 DSL,被命名为 ThunderKittens。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

ThunderKittens 旨在尽可能简单,并包含四种模板类型:

寄存器 tile—— 寄存器文件中的 2D 张量。寄存器向量 —— 寄存器文件中的 1D 张量。共享 tile—— 共享内存中的 2D 张量。共享向量 —— 共享内存中的 1D 张量。

tile 通过高度、宽度和布局进行参数化,寄存器向量由长度和布局参数化,共享向量仅由长度参数化。这样通常不会遭受 bank 冲突的困扰。

研究团队还提供了一些必要操作:

初始化,如将共享向量清零

一元运算,如 exp二元运算,如 mul行 / 列操作,如 row_sum

该研究给出了一个用 ThunderKittens 编写的,用于 RTX 4090 的简单前向 flash attention 内核:

#define NUM_WORKERS 16 // This kernel uses 16 workers in parallel per block, to help issue instructions more quickly.

using namespace kittens; // this kernel only handles headdim=64 for simplicity. Also n should be a multiple of 256 here.

__global__ void attend_ker64(int n, const bf16* __restrict__ __q__, const bf16* __restrict__ __k__, const bf16* __restrict__ __v__, bf16* __o__) {

auto warpid = kittens::warpid();

auto block_start = blockIdx.x*(n*64);

const bf16 *_q = __q__ + block_start, *_k = __k__ + block_start, *_v = __v__ + block_start;

bf16 *_o = __o__ + block_start;

extern __shared__ alignment_dummy __shm[]; // this is the CUDA shared memory

shared_allocator al((int*)&__shm[0]);

// K and V live in shared memory -- this is about all that will fit.

st_bf_1x4<ducks::st_layout::swizzle> (&k_smem)[NUM_WORKERS] = al.allocate<st_bf_1x4<ducks::st_layout::swizzle>, NUM_WORKERS>();

st_bf_1x4<ducks::st_layout::swizzle> (&v_smem)[NUM_WORKERS] = al.allocate<st_bf_1x4<ducks::st_layout::swizzle>, NUM_WORKERS>();

// Initialize all of the register tiles.

rt_bf_1x4<> q_reg, k_reg, v_reg; // v_reg need to be swapped into col_l

rt_fl_1x1<> att_block;

rt_bf_1x1<> att_block_mma;

rt_fl_1x4<> o_reg;

rt_fl_1x1<>::col_vec max_vec_last, max_vec; // these are column vectors for the attention block

rt_fl_1x1<>::col_vec norm_vec_last, norm_vec; // these are column vectors for the attention block

int qo_blocks = n / (q_reg.rows*NUM_WORKERS), kv_blocks = n / (q_reg.rows*NUM_WORKERS);

for(auto q_blk = 0; q_blk < qo_blocks; q_blk++) {

// each warp loads its own Q tile of 16x64, and then multiplies by 1/sqrt(d)

load(q_reg, _q + (q_blk*NUM_WORKERS + warpid)*q_reg.num_elements, q_reg.cols);

mul(q_reg, q_reg, __float2bfloat16(0.125f)); // temperature adjustment

// zero flash attention L, M, and O registers.

neg_infty(max_vec); // zero registers for the Q chunk

zero(norm_vec);

zero(o_reg);

// iterate over k, v for these q's that have been loaded

for(auto kv_idx = 0; kv_idx < kv_blocks; kv_idx++) {

// each warp loads its own chunk of k, v into shared memory

load(v_smem[warpid], _v + (kv_idx*NUM_WORKERS + warpid)*q_reg.num_elements, q_reg.cols);

load(k_smem[warpid], _k + (kv_idx*NUM_WORKERS + warpid)*q_reg.num_elements, q_reg.cols);

__syncthreads(); // we need to make sure all memory is loaded before we can begin the compute phase

// now each warp goes through all of the subtiles, loads them, and then does the flash attention internal alg.

for(int subtile = 0; subtile < NUM_WORKERS; subtile++) {

load(k_reg, k_smem[subtile]); // load k from shared into registers

zero(att_block); // zero 16x16 attention tile

mma_ABt(att_block, q_reg, k_reg, att_block); // Q@K.T

copy(norm_vec_last, norm_vec);

copy(max_vec_last, max_vec);

row_max(max_vec, att_block, max_vec); // accumulate onto the max_vec

sub_row(att_block, att_block, max_vec); // subtract max from attention -- now all <=0

exp(att_block, att_block); // exponentiate the block in-place.

sub(max_vec_last, max_vec_last, max_vec); // subtract new max from old max to find the new normalization.

exp(max_vec_last, max_vec_last); // exponentiate this vector -- this is what we need to normalize by.

mul(norm_vec, norm_vec, max_vec_last); // and the norm vec is now normalized.

row_sum(norm_vec, att_block, norm_vec); // accumulate the new attention block onto the now-rescaled norm_vec

div_row(att_block, att_block, norm_vec); // now the attention block is correctly normalized

mul(norm_vec_last, norm_vec_last, max_vec_last); // normalize the previous norm vec according to the new max

div(norm_vec_last, norm_vec_last, norm_vec); // normalize the previous norm vec according to the new norm

copy(att_block_mma, att_block); // convert to bf16 for mma_AB

load(v_reg, v_smem[subtile]); // load v from shared into registers.

rt_bf_1x4<ducks::rt_layout::col> &v_reg_col = swap_layout_inplace(v_reg); // this is a reference and the call has invalidated v_reg

mul_row(o_reg, o_reg, norm_vec_last); // normalize o_reg in advance of mma_AB'ing onto it

mma_AB(o_reg, att_block_mma, v_reg_col, o_reg); // mfma onto o_reg with the local attention@V matmul.

}

__syncthreads(); // we need to make sure all warps are done before we can start loading the next kv chunk

}

store(_o + (q_blk*NUM_WORKERS + warpid)*q_reg.num_elements, o_reg, q_reg.cols); // write out o. compiler has an issue with register usage if d is made constexpr q_reg.rows :/

}

}

总共大约有 60 行 CUDA 代码,硬件利用率为 75%,虽然非常密集,但大部分复杂性在于算法,而不是混合模式或寄存器布局。

TMA、WGMMA、swizzling 模式和描述符的复杂度又如何呢?如下是用 ThunderKittens 编写的, H100 的 FlashAttention-2 前向传递:

template<int D>

__global__ __launch_bounds__((NUM_WORKERS)*kittens::WARP_THREADS, 2)

void fwd_attend_ker_dim(int N, const CUtensorMap* tma_q, const CUtensorMap* tma_k, const CUtensorMap* tma_v, CUtensorMap* tma_o) {

extern __shared__ int __shm[]; // this is the CUDA shared memory

tma_swizzle_allocator al((int*)&__shm[0]);

constexpr int tile_width = fwd_attend_ker_tile_dims<D>::tile_width; // constants

constexpr int qo_height = fwd_attend_ker_tile_dims<D>::qo_height;

constexpr int kv_height = fwd_attend_ker_tile_dims<D>::kv_height;

st_bf<qo_height, tile_width, layout_q> (&q_smem) [NUM_WARPGROUPS] = al.allocate<st_bf<qo_height, tile_width, layout_q>, NUM_WARPGROUPS>();

st_bf<kv_height, tile_width, layout_k> (&k_smem)[2][NUM_WORKERS_KV] = al.allocate<st_bf<kv_height, tile_width, layout_k>, 2, NUM_WORKERS_KV>();

st_bf<kv_height, tile_width, layout_v> (&v_smem)[2][NUM_WORKERS_KV] = al.allocate<st_bf<kv_height, tile_width, layout_v>, 2, NUM_WORKERS_KV>();

int tic = 0, toc = 1;

rt_fl<1, kv_height> att_block;

rt_bf<1, kv_height> att_block_mma;

rt_fl<1, qo_height> o_prev;

col_vec<rt_fl<1, kv_height>> max_vec_last, max_vec;

col_vec<rt_fl<1, kv_height>> norm_vec_last, norm_vec;

int warpid = kittens::warpid();

int warpgroupid = warpid/kittens::WARPGROUP_WARPS;

int kv_blocks = N / (NUM_WORKERS_KV*k_smem[0][0].rows);

__shared__ uint64_t qsmem_barrier, kvsmem_barrier;//, vsmem_barrier;

int q_phasebit = 0;

int kv_phasebit = 0;

if (threadIdx.x == 0) {

tma::init_barrier<st_bf<qo_height, tile_width, layout_q>, NUM_WARPGROUPS>(qsmem_barrier, 1);

tma::init_barrier<st_bf<kv_height, tile_width, layout_k>, NUM_WORKERS_KV*2>(kvsmem_barrier, 1);

}

if (warpid == 0) {

for (int wg = 0; wg < NUM_WORKERS/kittens::WARPGROUP_WARPS; wg++) { // load q

int tile_idx = (blockIdx.y * NUM_WARPGROUPS * gridDim.x) + (blockIdx.x * NUM_WARPGROUPS) + wg;

tma::load_async((q_smem[wg]), tma_q, qsmem_barrier, tile_idx);

}

for (int w = 0; w < NUM_WORKERS_KV; w++) { // load k, v

int tile_idx = (blockIdx.y * NUM_WORKERS_KV * kv_blocks) + (0 * NUM_WORKERS_KV) + w;

tma::load_async((k_smem[tic][w]), tma_k, kvsmem_barrier, tile_idx);

tma::load_async((v_smem[tic][w]), tma_v, kvsmem_barrier, tile_idx);

}

}

neg_infty(max_vec); // zero registers for the Q chunk

zero(norm_vec);

zero(o_prev);

__syncthreads();

tma::arrive_and_wait(qsmem_barrier, q_phasebit);

q_phasebit ^= 1;

if constexpr (D == 64) { warpgroup::mul(q_smem[warpgroupid], q_smem[warpgroupid], __float2bfloat16(0.125f)); }

else { warpgroup::mul(q_smem[warpgroupid], q_smem[warpgroupid], __float2bfloat16(0.08838834764f)); }

for (auto kv_idx = 0; kv_idx < kv_blocks; kv_idx++, tic ^= 1, toc ^= 1) {

tma::arrive_and_wait(kvsmem_barrier, kv_phasebit);

kv_phasebit ^= 1;

__syncthreads();

if (warpid == 0) {

tma::set_bytes(kvsmem_barrier, 2 * NUM_WORKERS_KV * k_smem[0][0].num_elements * sizeof(bf16));

if (kv_idx + 1 < kv_blocks) {

for (int w = 0; w < NUM_WORKERS_KV; w++) {

int tile_idx = (blockIdx.y * NUM_WORKERS_KV * kv_blocks) + ((kv_idx + 1) * NUM_WORKERS_KV) + w;

tma::load_async((k_smem[toc][w]), tma_k, kvsmem_barrier, tile_idx);

tma::load_async((v_smem[toc][w]), tma_v, kvsmem_barrier, tile_idx);

}

}

}

warpgroup::mma_fence(att_block);

warpgroup::mm_ABt(att_block, q_smem[warpgroupid], k_smem[tic][0]);

warpgroup::mma_commit_group();

copy(norm_vec_last, norm_vec);

copy(max_vec_last, max_vec);

warpgroup::mma_async_wait();

row_max(max_vec, att_block, max_vec); // accumulate onto the max_vec

sub_row(att_block, att_block, max_vec);

exp(att_block, att_block);

sub(max_vec_last, max_vec_last, max_vec);

exp(max_vec_last, max_vec_last);

mul(norm_vec, norm_vec, max_vec_last);

row_sum(norm_vec, att_block, norm_vec); // accumulate onto the norm_vec

div_row(att_block, att_block, norm_vec);

mul(norm_vec_last, norm_vec_last, max_vec_last);

div(norm_vec_last, norm_vec_last, norm_vec);

copy(att_block_mma, att_block); // convert to bf16 for mma

mul_row(o_prev, o_prev, norm_vec_last); // normalize o_prev in advance of mma'ing onto it

warpgroup::mma_fence(o_prev);

warpgroup::mma_AB(o_prev, att_block_mma, v_smem[tic][0]);

warpgroup::mma_commit_group();

}

auto (*o_smem) = reinterpret_cast<st_bf<qo_height, tile_width, layout_o>(*)>(q_smem); // reuse q memory

warpgroup::store(o_smem[warpgroupid], o_prev);

__syncthreads();

if (warpid % 4 == 0) { // store o

int tile_idx = (blockIdx.y * NUM_WARPGROUPS * gridDim.x) + (blockIdx.x * NUM_WARPGROUPS) + warpgroupid;

tma::store_async(tma_o, (o_smem[warpgroupid]), tile_idx);

tma::store_commit_group();

}

tma::store_async_wait();

}

这个内核只有 100 行代码,它在 H100 上的性能比 FlashAttention-2 高出约 30%。ThunderKittens 负责 wrap up 布局和指令,并提供一个可以在 GPU 上使用的 mini-pytorch。

H100 SXM 上各种配置的 FlashAttention-2(Pytorch)与 ThunderKittens 的比较。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

此外,研究团队还发布了基于线性注意力的内核和其他架构。基于线性注意力内核的运行速度为 215 TFLOP(如果考虑算法中固有的重计算,则运行速度超过 300 TFLOP)。

虽然理论上线性注意力更高效,但从实践经验来看,线性注意力在硬件上的效率大大降低。因此,ThunderKittens 有望开辟广泛的高吞吐量应用。

使用 ThunderKittens 可以非常快地实现线性注意力。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

tile 看起来是个好点子

在研究团队看来,ThunderKittens 之所以运行良好,是因为它不会试图做所有事情。CUDA 确实比 ThunderKittens 更有表现力,而 ThunderKittens 又小又简单。

不过,ThunderKittens 具有很好的抽象能力,它具有小的 tile,这与 AI 和硬件的发展相匹配。ThunderKittens 不支持任何少于 16 的维数。但在研究团队看来,这一点并不重要,尤其对于硬件而言。如果你的矩阵乘法小于 16x16,你确定自己做的还是 AI 吗?

从哲学的视角来看,研究团队认为框架迁移是合理的。「寄存器」当然不应该像旧 CPU 那样的 32 位。CUDA 使用的 1024 位宽向量寄存器无疑朝着正确方向迈出了一步。但对研究团队而言,「寄存器」是 16x16 的数据 tile。他们认为 AI 想要这样,它仍然只是矩阵乘法、规约和重塑。当然硬件也想要这样,小的矩阵乘法寻求硬件支持,而不仅仅是 systolic mma。

实际上,从更广泛的视角来看,研究团队认为应该围绕硬件的良好映射来重新调整 AI 思路。比如,循环状态应该有多大?SM 能够容纳多大尺寸?计算密度是多少?这些都不亚于硬件的要求。

研究团队表示,这项工作未来的一个重要方向是利用他们对硬件的了解来帮助设计与硬件相匹配的 AI。

最后,AMD 硬件上适配的 ThunderKittens 也将很快推出。

重磅来袭:2024 款 iPhone 16 系列

2024 款 iPhone 16 系列

距离苹果推出 2023 款 iPhone 15 和 iPhone 15 Pro 机型仅过去了六个月,但正如典型的谣言一样,人们已经在寻找 2024 款 iPhone 16 系列。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

iPhone 16 将为 iPhone 产品线带来显着变化,预计苹果将把 iPhone 16 Pro 的尺寸增加到 6.3 英寸,将 iPhone 16 Pro Max 的尺寸增加到 6.9 英寸,这是几年来的首次尺寸升级。尺寸变化将仅限于 iPhone 16 Pro 机型,iPhone 16 机型将与 iPhone 15 机型保持相同尺寸。虽然 iPhone 16 机型不会变大,但由于额外的按钮,它们会得到一些小的设计调整,但在大多数情况下,标准 iPhone 16 机型和 Pro 机型看起来都像 iPhone 15 和 15 Pro 机型。

Apple 正在为 iPhone 16 系列设计新的 A 系列芯片,该芯片基于最新的 N3E 3 纳米节点构建。我们可以看到效率和性能的一些改进,但我们还没有听到我们可以期待的细节。iPhone 16 和 iPhone 16 Pro 可以使用不同的芯片,高端芯片仅限于 Pro 机型。

仅限于 iPhone 15 Pro 机型的 Action Button 将在 2024 年扩展到所有四款 iPhone 16 机型,据说 iPhone 16 系列还配备了一个新的“捕获按钮”,用于拍照和视频。“捕捉按钮”的工作方式类似于数码相机上的快门按钮,可检测多个级别的压力以进行对焦,然后捕获图像。

iPhone 15 与 iPhone 16:15+ 传闻升级比较iPhone 15 Pro 与 iPhone 16 Pro:25+ 传闻升级比较

对于 iPhone 16 机型,Apple 正在计划一种新的垂直摄像头镜头布置,这与之前的对角镜头设置不同。据推测,新方向将允许标准 iPhone 16 机型为 Vision Pro 头显捕捉空间视频。预计苹果还将为 iPhone 16 Pro 带来 Tetraprism 5 倍光学变焦镜头,因此今年可能不仅限于 iPhone 16 Pro Max。

这篇综述介绍了我们迄今为止听到的有关 iPhone 16 系列的所有谣言。距离发布还有几个月的时间,因此苹果有足够的时间改变其计划。

注意: 在本综述中发现错误或想要提供反馈?在这里给我们发电子邮件。

iPhone 16 设计

苹果为标准 iPhone 16 机型测试了几种设计,但最终决定采用带有药丸形摄像头凸起的垂直对齐相机系统。之前的iPhone使用方形相机凸起来容纳对角线镜头,但苹果能够通过新的镜头布置来缩小相机凸起。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

药丸形凸起装有独立的广角和超广角镜头。麦克风将位于镜头旁边,而相机闪光灯将位于凸起外的设备背面。

在 iPhone 的左侧,苹果计划用 Action 按钮替换静音开关,iPhone 16 机型将采用与 iPhone 15 Pro 机型相同的按钮。音量按钮将位于“操作”按钮下方。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

该设备的右侧将配备一个新的捕获按钮,该按钮将位于美国之前iPhone机型上的毫米波天线的位置。它位于一个位置,当 iPhone 处于横向时,可以轻松按下。苹果计划将毫米波天线移至 iPhone 16 的左下角。

除了新的垂直镜头布置和拍摄按钮外,iPhone 16 机型将具有与 iPhone 15 机型相同的总体设计,机身形状或尺寸没有明显变化。

颜色

iPhone 16 机型可能有七种颜色:蓝色、粉色、黄色、绿色、黑色、白色和紫色。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

预计 iPhone 16 机型将采用与 iPhone 15 机型相同的彩色后盖玻璃。后玻璃层将具有与主框架颜色形成鲜明对比的磨砂效果。

MagSafe的

iPhone 16 机型中的 MagSafe 对准磁铁可能比以前更薄,从而减小了兼容 MagSafe 保护壳所需的磁环尺寸。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

Dummy Models

Prior to the launch of new iPhone models, case makers source the leaked dimensions and specifications of the upcoming devices from Apple suppliers. The information is used to make dummy models for creating cases, and because there's a lot of money involved in being the first to come out with a case for a new device, dummy models are often accurate representations of what we can expect to see from new iPhones.

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

4 月份泄露的几个版本的 iPhone 16 假人型号清楚地展示了我们可以从 iPhone 16 系列中期待的尺寸差异。Pro 机型更高更宽,标准 iPhone 16 机型的摄像头切口经过重新设计,对于这些 iPhone 的双镜头相机系统来说,它是垂直的而不是对角线的。

iPhone 16 Pro 机型的外部摄像头设计几乎没有变化,苹果继续使用容纳三个镜头的方形摄像头凸起。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

假人模型的左侧显示了所有四个模型的动作按钮,这与传闻一致。右侧突出显示了新的捕获按钮,该按钮与设备侧面齐平,而不是像音量和电源按钮那样突出。

iPhone 16 Pro 的尺寸更改

据多个消息来源称,iPhone 16 Pro 和 iPhone 16 Pro Max 预计将具有更大的显示屏尺寸。iPhone 16 Pro 的显示屏尺寸为 6.27 英寸(四舍五入为 6.3),而 iPhone 16 Pro Max 的显示屏尺寸预计为 6.85 英寸(四舍五入为 6.9)。

随着显示屏尺寸的增加,iPhone机身的尺寸也会增加。预计这两款机型都将比 iPhone 15 Pro 机型更高更宽,虽然厚度保持不变,但由于尺寸较大,重量会略有增加。一般形状和设计不会更新。

iPhone 16 专业版

iPhone 16 专业版

iPhone 15 专业版

厚度

8.25 毫米

8.25 毫米

高度

149.6 毫米

146.6 毫米

宽度

71.45 毫米

70.60 毫米

显示

6.3英寸(159.31毫米)

6.1英寸(155.38毫米)

重量

194 克

187 克

iPhone 16 Pro Max

iPhone 16 Pro Max

iPhone 15 Pro Max

厚度

8.25 毫米

8.25 毫米

高度

163.0 毫米

159.9 毫米

宽度

77.58 毫米

76.70 毫米

显示

6.9英寸(174.06毫米)

6.7英寸(169.98毫米)

重量

225 克

221 克

我们预计 iPhone 16 和 iPhone 16 Plus 的尺寸不会发生变化,这些设备的尺寸将与 iPhone 15 和 iPhone 15 Plus 相同。

显示技术

iPhone 16 OLED 面板可以使用微透镜技术来提高亮度和降低功耗。微透镜阵列或MLA在面板内使用数十亿个透镜的统一图案来减少内部反射。反射光在不增加功耗的情况下增加感知亮度。

由于材料改进,iPhone 16 系列中使用的 OLED 显示屏将更加节能。

Apple 正在为部分 iPhone 16 机型使用边框缩减结构 (BRS) 技术,预计这将导致边框尺寸更小。BRS 允许显示器下方的电路布局更紧凑、更高效,从而在不影响显示器性能的情况下实现更薄的边框。

目前尚不清楚精简的边框是否仅限于 iPhone 16 Pro 机型,或者是否会在整个系列中实施更改。

按钮

苹果计划在 iPhone 16 和 iPhone 16 Plus 上增加两个新按钮,一个将取代静音开关,另一个是全新的。

操作按钮

iPhone 15 Pro 机型包括一个动作按钮,预计到 2024 年,动作按钮将扩展到标准 iPhone 16 机型。iPhone 16 系列中使用的操作按钮将与 iPhone 15 Pro 操作按钮相同。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

取代传统静音开关的操作按钮可以执行多种功能,例如激活手电筒、打开相机、启动快捷方式、启用或禁用对焦模式、使用平移、打开/关闭静音模式等。

“捕获”按钮

额外的捕获按钮 该按钮与电源按钮位于 iPhone 的同一侧,位于美国 5G 毫米波天线占用的空间中。

添加此按钮后,毫米波切口已重新定位到设备左侧的音量按钮下方。虽然该按钮预计是机械的而不是电容式的,但The Information表示它将能够对压力和触摸做出反应。iPhone 用户将能够通过在按钮上左右滑动来放大和缩小,轻按即可对焦,并通过更用力的按压激活录音。

拍摄按钮将在所有四款 iPhone 16 机型上提供,它将用于拍摄照片和视频。

A系列芯片

泄露的苹果芯片阵容技术信息表明,所有四款 iPhone 16 机型都将使用相同的 A18 芯片,但苹果仍可能将它们分为 A18 和 A18 Pro,并禁用或合并一些模块以区分它们。

计划用于 iPhone 16 Pro 机型的下一代 A18 芯片可能配备升级的神经网络引擎,具有“显着”更多的内核,从而提高 AI/机器学习性能,此外预计它还将具有更大的芯片尺寸。

散热改进

预计 iPhone 16 机型将采用新的散热设计,可防止过热。据说苹果正在为 iPhone 16 机型开发石墨烯散热系统,而 iPhone 16 Pro 机型还可能包括一个金属电池外壳,以改善散热。

石墨烯的导热性高于iPhone散热器中使用的铜。

RAM

标准的 iPhone 16 机型可以升级为 8GB RAM,高于 iPhone 15 机型的 6GB。这将使所有四款 iPhone 16 机型都提供 8GB RAM。

5G调制解调器芯片

iPhone 16 Pro 机型可能配备高通骁龙 X75 调制解调器,可实现更快、更高效的 5G 连接。据高通公司称,X75提供了改进的载波聚合,加上Sub-6Ghz和毫米波5G收发器的组合占用的电路板空间减少了25%,功耗降低了20%。

高通的 X75 支持“5G Advanced”标准,具有 AI 和机器学习增强功能,可实现 5G 改进,因此苹果可以将 iPhone 16 Pro 机型作为具有“5G Advanced”连接进行营销。

标准 iPhone 16 机型预计将使用高通的 X70 芯片,这是 iPhone 15 机型中已经使用的芯片。

苹果正在努力开发自己的调制解调器芯片和天线设置,以消除对高通的依赖,但苹果的调制解调器芯片预计不会准备好在 2024 年首次亮相。苹果分析师郭明錤认为,苹果设计的调制解调器芯片将在2025年问世。

无线网络连接 7

苹果分析师郭明錤认为,iPhone 16 Pro 机型可能会采用网络一代 WiFi 7 技术,预计该技术将提供“至少 30”吉比特/秒的速度,并可能达到 40Gb/s。

Wi-Fi 7 还能够使用 320MHz 信道,并支持 4K 正交幅度调制 (QAM) 技术,最终在相同数量的天线下提供比 Wi-Fi 6 快 2.4 倍的速度。Wi-Fi 7 最终将提供更快的最大传输速度、更低的延迟和更可靠的连接。

虽然 Wi-Fi 7 可能仅限于 iPhone 16 Pro 机型,但标准 iPhone 16 机型可以升级到支持 6GHz Wi-Fi 频段的 Wi-Fi 6E。目前,Wi-Fi 6E 仅限于 iPhone 15 Pro 机型。

USB-C 端口

苹果将在 iPhone 15 系列中过渡到 USB-C 技术,预计它还将用于 iPhone 16 机型。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

AI 能力

在 iOS 18 中,有传言称苹果将推出由大型语言模型提供支持的新 Siri 功能,一些尖端的生成式 AI 功能可能仅限于 iPhone 16 机型。

根据泄密者分享的细节,iOS 18 将为所有 iPhone 带来许多新的 LLM 功能,但设备上的 AI 功能可能仍然是 iPhone 16 独有的。iOS 18 更新的 AI 功能可能包括改进 Siri 和 Messages 应用程序之间的交互、自动生成的 Apple Music 播放列表、与生产力应用程序集成以创建 AI 辅助内容等等。

麦克风改进

预计 iPhone 16 机型将配备改进的麦克风,并伴随 AI 增强的 Siri 体验。苹果分析师郭明錤(Ming-Chi Kuo)表示,这款麦克风将具有更好的防水性和更好的信噪比,这将“显着改善Siri的体验”。

iPhone 16 相机技术

iPhone 16 Pro 机型可能包括改进的 4800 万像素超广角镜头,这将允许在较低的照明条件下改善图像。它可能像4800万像素的广角相机一样运行,它使用像素合并将四个像素的数据组合成一个“超级像素”,以获得更好的图像质量。

据报道,iPhone 16 Pro Max 中使用的 4800 万像素广角摄像头将配备一个八部分混合镜头,其中包含两个玻璃元件和六个塑料元件,以及长焦和超广角相机镜头的改进。

iPhone 16 Pro 和 iPhone 16 Pro Max 都可以在 2024 年配备 5 倍长焦镜头,而不是该技术仅限于更大的 Pro Max。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

相机布局

标准 iPhone 16 机型预计将采用类似于 iPhone 12 中使用的相机布局的垂直摄像头布局。苹果为 iPhone 13 和 iPhone 14 使用了对角线布局,但预计交换将允许使用超广角和广角摄像头进行空间视频录制。

泄露的 iPhone 16 相机机箱图像采用传闻中的垂直摄像头布局,似乎证实了 iPhone 16 的设计选择。泄露的 iPhone 16 手机壳模具具有相同的垂直摄像头布置。

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

超级潜望镜?

iPhone 16 Pro Max 可能配备超长焦潜望镜摄像头,可显着增加光学变焦。该信息来自一个微博帐户,该帐户过去曾提供过准确的信息,但尚未得到第二个可靠来源的支持。

“超级”或“超”长焦通常是指焦距超过 300mm 的相机。目前的长焦镜头相当于 77mm 镜头,因此如果准确,变焦能力可能会显着提高。

电池

有传言称 iPhone 16 Pro 机型将使用堆叠电池技术,这可以带来更高的容量和更长的使用寿命。堆叠电池在电动汽车和医疗设备中很常见,但对于智能手机来说却是一项新兴技术。

堆叠电池可以与更快的 40W 有线充电和 20W MagSafe 充电一起提供。

有传言称,大多数 iPhone 16 机型的电池寿命将略有增加。

iPhone 15 阵容 (2023)

iPhone 16 阵容 (2024)

涨跌幅

[标准]

3,349毫安

3,561毫安

+6%

4,383毫安

4,006毫安

-9%

专业版

3,274毫安

3,355毫安

+2.5

专业最大

4,422毫安

4,676毫安

+5%

没有 iPhone 16 Ultra

随着 iPhone 16 的推出,苹果可能会推出一款高端 iPhone 16“Ultra”,与 iPhone 16、iPhone 16 Plus、iPhone 16 Pro 和 iPhone 16 Pro Max 一起销售。该设备将被定位为顶级的iPhone产品,它可能具有额外的相机改进,更大的显示屏,甚至可能是无端口设计。

尽管有传言称 iPhone 16 Ultra 可能会出现,但在早期的 iOS 18 代码中没有出现此类设备的迹象。代码表明,苹果只有四款 iPhone 正在开发中,包括两款标准 iPhone 16 机型和两款“Pro”iPhone 16 机型。

定价

标准 iPhone 15 机型的组件价格创下历史新高,与 iPhone 14 机型相比上涨了 16%。苹果吸收了 iPhone 15 系列增加的生产成本,但苹果可能需要在 iPhone 16 发布时提高价格,以避免影响整体收入。

iPhone 16 发布日期

iPhone 16 机型预计将于 2024 年 9 月推出,并将紧随 2023 年 iPhone 15 机型。

未来的 iPhone 功能

ProMotion技术可为iPhone显示屏增加高达120Hz的刷新率,预计将于2025年开始应用于标准iPhone机型。直到 2025 年,ProMotion 将仅限于高端“Pro”iPhone。

将于 2025 年推出的 iPhone 17 Pro Max 可能配备 4800 万像素长焦镜头,该镜头针对 Vision Pro 耳机进行了优化。谣言来自分析师 Jeff Pu,他没有提供有关它如何与 Vision Pro 交互的细节。 Pu 还认为 iPhone 17 Pro 将包括苹果设计的 Wi-Fi 7 芯片。

有传言称 iPhone 16 Pro 机型可能会采用屏下 Face ID 技术,但最新信息表明,屏下 Face ID 要到 2025 年或更晚才会出现。在显示屏下,Face ID将允许更多可用的显示空间,因为不需要完整的Dynamic Island,但仍然会有一个摄像头切口。

预计 2025 年的 iPhone 17 将包括升级的 2400 万像素前置摄像头,这将显着提高图像质量和低光性能。

有传言称,iPhone 17 机型将配备比陶瓷盾牌更耐刮擦的防反射显示屏。据说它有一个“超级坚硬”的层,可以承受更多的滥用。

据报道,在 2026 年的 iPhone 18 中,苹果将同时拥有屏下 Face ID 和屏下前置摄像头技术,可能允许相机硬件没有切口的设计。这将标志着第一个全显示屏设计。

iPhone 16 综述更新日志

5 月 10 日 - 包括传闻中的新图形演示颜色。5 月 3 日 - 更新了有关 MagSafe 磁环更薄的谣言。5 月 1 日 - 更新了设计信息,并有后玻璃谣言。4 月 29 日 - 添加了新的虚拟模型图像。4 月 19 日 - 添加了关于颜色选项的谣言。4 月 9 日 - 更新了电池信息。4 月 4 日 - 添加了新的虚拟模型图像和显示技术信息。3 月 25 日 - 更新了 A18 Pro 芯片信息。3 月 21 日 - 添加了有关新显示技术的信息。3 月 15 日 - 更新了新视频。3 月 1 日 - 添加了新的 A18 芯片信息。

iPhone 16 时间线

五月2024

五月 16 iPhone 16 显示屏将于 6 月开始生产

实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

五月 6 传闻 iPhone 16 机型将采用这些颜色

五月 3 iPhone 16 系列可能配备更纤薄的 MagSafe 组件

四月2024

4月 30 有传言称 iPhone 16 将配备彩色后盖玻璃

4月 29 iPhone 16 系列傻瓜展示四种型号尺寸的比较

4月 22 苹果订购据称用于 iPhone 16 的电容式按钮组件

4月 19 iPhone 15 与 iPhone 16:15+ 传闻升级比较

4月 18 传闻中的六款 iPhone 16 相机将于今年升级

4月 16 所有 iPhone 16 机型均配备操作按钮,但实用性存在争议

4月 10 传闻 iPhone 16 Plus 将采用这 7 种颜色

4月 9 据称 iPhone 16 电池细节显示一种型号的容量较小

4月 4 传闻 iPhone 16 将配备更薄的边框

4月 4 iPhone 16 和 iPhone 16 Pro 设计由假人模型展示

三月2024

3月 29 首款 iPhone 16 手机壳勾勒出新的后置垂直摄像头凸起

3月 26 iPhone 16:配件制造商为全新的捕获按钮做准备

3月 26 iPhone 16 虚拟机型展示设计更改和新按钮

3月 20 iPhone 16 将采用超薄边框技术,最大化显示效果

3月 16 iPhone 14 与 iPhone 16:期待 30+ 次升级

3月 15 iPhone 16 即将进行的五项关键升级

3月 1 16 款即将推出的 Apple 设备的芯片细节揭晓

Github 2024-01-10 C开源项目日报 Top10

#文章首发挑战赛##头条讲真的##记录我的生活##冬日生活打卡季##来点儿干货##看见人间百态##记录我的2024#

根据Github Trendings的统计,今日(2024-01-10统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下:

开发语言

项目数量

C项目

10

C++项目

2

PLpgSQL项目

1

Assembly项目

1

LLaMA模型的C/C++移植

创建周期:306 天开发语言:C, C++协议类型:MIT LicenseStar数量:48490 个Fork数量:6881 次关注人数:48490 人贡献人数:470 人Open Issues数量:950 个Github地址:https://github.com/ggerganov/llama.cpp.git实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

该项目是将Facebook的LLaMA模型移植到C/C++,允许在纯C/C++中进行LLaMA模型的推断。

OpenSSL - 强大的开源加密工具包

创建周期:4012 天开发语言:C协议类型:Apache License 2.0Star数量:23449 个Fork数量:10244 次关注人数:23449 人贡献人数:364 人Open Issues数量:2414 个Github地址:https://github.com/openssl/openssl.git项目首页: https://www.openssl.org

OpenSSL是一个强大的、功能齐全的开源工具包,用于TLS、DTLS和QUIC协议。它包括了一个通用的加密库,一个用于加密任务的命令行工具,并且是由SSLeay库演变而来。该工具包可以作为生产使用的源代码tarballs进行下载,也可以在各种操作系统上获得预编译版本。官方的Git存储库和GitHub镜像也可用于测试和开发。提供了详细的构建和安装说明、文档、支持渠道以及有关贡献和法律事务的信息。

Dummy-Robot: 超迷你智能机械臂

创建周期:825 天开发语言:CStar数量:10746 个Fork数量:2428 次关注人数:10746 人贡献人数:2 人Open Issues数量:109 个Github地址:https://github.com/peng-zhihui/Dummy-Robot.git

Dummy-Robot是一个超迷你智能机械臂项目。该项目展示了一台自制的机械臂,如YouTube视频标题为“我从零开始制作了一个超迷你机械臂!

Citus 12.1: PostgreSQL的分布式扩展

创建周期:2900 天开发语言:C, PLpgSQL协议类型:GNU Affero General Public License v3.0Star数量:9315 个Fork数量:619 次关注人数:9315 人贡献人数:80 人Open Issues数量:980 个Github地址:https://github.com/citusdata/citus.git项目首页: https://www.citusdata.com

Citus是一个开源的分布式数据库,它扩展了PostgreSQL以实现跨多个节点的水平扩展。最新版本Citus 12.1带来了新的功能和改进。

PowerInfer: 利用消费级GPU实现高速大型语言模型服务

创建周期:26 天开发语言:C, C++协议类型:MIT LicenseStar数量:6113 个Fork数量:316 次关注人数:6113 人贡献人数:387 人Open Issues数量:48 个Github地址:https://github.com/SJTU-IPADS/PowerInfer.git实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

PowerInfer是一个旨在利用消费级GPU在个人电脑上实现高速大型语言模型服务的开源项目。

Iceman Fork - Proxmark3: RFID分析工具的最高水平

创建周期:1977 天开发语言:C协议类型:GNU General Public License v3.0Star数量:3184 个Fork数量:900 次关注人数:3184 人贡献人数:270 人Open Issues数量:87 个Github地址:https://github.com/RfidResearchGroup/proxmark3.git项目首页: http://www.icedev.se

Iceman Fork - Proxmark3是一款开源的RFID工具,为RFID分析、芯片识别、渗透测试和编程提供了广泛的功能和功能。 它被认为是RFID分析工具的最高水平,提供了便利的命令和LUA脚本以实现自动化。

FreeSWITCH: 软件定义的电信堆栈

创建周期:1904 天开发语言:C协议类型:OtherStar数量:2774 个Fork数量:1259 次关注人数:2774 人贡献人数:269 人Open Issues数量:858 个Github地址:https://github.com/signalwire/freeswitch.git项目首页: https://freeswitch.com/#getting-started

FreeSWITCH是一种软件定义的电信堆栈,可以实现从专有电信交换机到在任何通用硬件上运行的多功能软件实现的数字转型。它可以释放任何设备的电信潜力,从树莓派到多核服务器。结合托管的云平台SignalWire,FreeSWITCH可以与外部世界互连并实现任意规模的扩展。

open62541 - OPC UA开源实现

创建周期:3673 天开发语言:C协议类型:Mozilla Public License 2.0Star数量:2347 个Fork数量:1140 次关注人数:2347 人贡献人数:249 人Open Issues数量:872 个Github地址:https://github.com/open62541/open62541.git项目首页: http://open62541.org

open62541是OPC UA(OPC统一架构)即IEC 62541的开源实现,使用Mozilla Public License v2.0许可。

cc65 - 6502系统的C编译器

创建周期:3947 天开发语言:C, Assembly协议类型:zlib LicenseStar数量:2116 个Fork数量:458 次关注人数:2116 人贡献人数:103 人Open Issues数量:217 个Github地址:https://github.com/cc65/cc65.git项目首页: https://cc65.github.io

cc65是一款免费的用于6502系统的C编译器。它是一个完整的65(C)02系统的交叉开发套件,包括强大的宏汇编器、C编译器、链接器、存档工具和其他几个工具。cc65支持许多旧的6502机器的C和运行时库。

不再维护的代码合并到新的Serotonin分支

创建周期:42 天开发语言:CStar数量:113 个Fork数量:15 次关注人数:113 人贡献人数:4 人Open Issues数量:25 个Github地址:https://github.com/hrtowii/Serotonin.git实况足球2024 dummy 只需百行代码,让H100提速30%,斯坦福开源全新AI加速框架

该存储库中的代码已不再维护,并已合并到新的Serotonin分支与Mineek。