Performance Engineering of Software Systems (四) ——工具使用

Mythos模型:从漏洞挖掘到攻击链构建的AI安全范式跃迁 大语言模型在网络安全领域的应用正经历从‘辅助分析’到‘自主攻防’的关键演进。以Mythos为代表的新型AI系统,已突破传统代码补全与模式识别局限,具备跨文件符号追踪、多跳推理建模和工具链动态编排能力,本质是将红队专家的‘侦探式思维’工程化。其技术价值在于将漏洞发现周期从‘人天’压缩至‘人分钟’,显著降低安全左移门槛;典型应用场景覆盖遗留系统审计、零日预测性防御及CI/CD安全门禁。本文聚焦Mythos在真实攻防闭环中的能力边界、沙箱约束机制与三层意图提示法等核心实践要素。 阅读详情

目录

一、概述

二、perf

2.2 perf stat

2.3 perf top

2.4 perf annotate

2.5 perf record

2.6 perf report

三、intel vtune

四、case study——矩阵乘法

五、参考


一、概述

对应于

lecture-1-matrix-multiply-a-case-study

lecture-4-computer-architecture-and-performance-engineering

二、perf

  • ‐e r[UMask:EventSelect]
  •  -e cpu/event=0x0e,umask=0x01,inv,cmask=0x01/ 

2.2 perf stat

用于查看程序整体性能,

Usage: perf stat [<options>] [<command>]

  • -e, --event <event>   event selector. use 'perf list' to list available events
  • -p, --pid <pid>       stat events on existing process id
  • -t, --tid <tid>       stat events on existing thread id
  •  -d, --detailed        detailed run - start a lot of events
  • -r N, --repeat <n>      repeat command and print average + stddev (max: 100, forever: 0)

2.3 perf top

实时显示系统 / 进程的性能统计信息

  • -e/-p/-t
  •  -C, --cpu <cpu>       list of cpus to monitor
  •  -c, --count <n>       event period to sample
  •  -E, --entries <n>     display this many functions
  •  -d, --delay <n>       number of seconds to delay between refreshes
  •  -k, --vmlinux <file>  vmlinux pathname
  •  -K, --hide_kernel_symbols   hide kernel symbols
  •  -U, --hide_user_symbols   hide user symbols

2.4 perf annotate

指令级分析

2.5 perf record

记录一段时间内系统 / 进程的性能事件

Usage: perf record [<options>] [<command>]

  • -e/-p/-t/-c
  •  -g                    enables call-graph recording
  • -o, --output <file>   output file name
  •  -u, --uid <user>      user to profile

2.6 perf report

读取 perf record 生成的 perf.data 文件,并显示分析数据
perf report [-i <file> | --input=file]

  •  -d, --dsos <dso[,dso...]>                           only consider symbols in these dsos
  •  -i, --input <file>    input file name
  • -v, --verbose         be more verbose (show symbol address, etc)
  •  -n, --show-nr-samples                        Show a column with the number of samples
  •  -S, --symbols <symbol[,symbol...]>     only consider these symbols
  •  -U, --hide-unresolved                           Only display entries resolved to a symbol

三、intel vtune

内容较多,参见Performance Engineering of Software Systems (四) ——工具使用之二

四、case study——矩阵乘法

一个比较经典的程序优化,在很多课程都提到,本文程序对应于公开课 prj0,可以按照说明的文档运行。矩阵相乘核心逻辑:

int matrix_multiply_run(const matrix* A, const matrix* B, matrix* C)
{
  int i, j, k;

  for (i = 0; i < A->rows; i++) {
    for (j = 0; j < B->cols; j++) {
      for (k = 0; k < A->cols; k++) {
        C->values[i][j] += A->values[i][k] * B->values[k][j];
      }
    }
  }

  return 0;
}

优化级别-o0(原始程序make DEBUG=1),先用perf stat找下hotspot

 Performance counter stats for './matrix_multiply':

      12173.825981      task-clock (msec)         #    1.000 CPUs utilized          
                32      context-switches          #    0.003 K/sec                  
                 0      cpu-migrations            #    0.000 K/sec                  
             3,131      page-faults               #    0.257 K/sec                  
    29,771,471,841      cycles                    #    2.446 GHz                    
    15,720,682,522      stalled-cycles-frontend   #   52.80% frontend cycles idle   
    55,116,192,335      instructions              #    1.85  insn per cycle         
                                                  #    0.29  stalled cycles per insn
     1,015,253,855      branches                  #   83.396 M/sec                  
         1,192,398      branch-misses             #    0.12% of all branches        

      12.174698897 seconds time elapsed

 程序运行时间12.17s,IPC=1.85,看起来不是内存的问题,显示hotspot在 stalled-cycles-frontend 52.80%这个结果和IPC结果一致。我们知道frontend bound的原因是可能在IF(L1 icache miss, iTLB miss),也可能是branch miss或者译码慢,上图显示branch-misses 为0.12%显然不是原因,那看下icache miss情况

perf stat -e iTLB-loads-misses,iTLB-loads  -e L1-icache-loads-misses,instructions ./matrix_multiply

Elapsed execution time: 12.198415 sec

 Performance counter stats for './matrix_multiply':

            28,394      iTLB-loads-misses         #  595.26% of all iTLB cache hits 
             4,770      iTLB-loads                                                  
           208,254      L1-icache-loads-misses                                      
    55,115,704,337      instructions                                                                                   

      12.221857999 seconds time elapsed

TIPS:我用的 E5-2640 基于IvyBridge,perflist中没有L1-icache-loads,我搜到【3】这个课程(一些notes很不错),在它的一次作业中http://web.eece.maine.edu/~vweaver/classes/ece571_2014f/ece571_hw4.pdf我发现:

(a) Measure and report the L1 instruction cache miss rate.

Use instructions:u and L1-icache-load-misses:u for the events.

他们用的机器是SandyBridge,好像也没有L1-icache-loads,作业中针对icache miss测量有一个问题写到:

For the L1-icache-misses event, the Linux kernel uses ICACHE:MISSES while PAPI uses L2_TRANS:CODE_RD Look at the intel vol3b developer manual. Look at the descriptions for these two events. Do these match the behavior you’d expect with L1-icache-misses? Do you think you get the same results using these two events?

我也不清楚有什么区别,既然他们用instructions这个代替L1-icache-loads,那我也姑且这么用吧,这里记录一下后续挖掘一下。没办法,性能调优的时候遇到问题总得找个说服自己的理由。按照这种测量方式icache miss很低

至于上述iTLB-loads-misses比iTLB-loads还大,我也不知道如何分析这个结果。

那么接下来如何分析呢?毕竟有一个指标无法解释,我先看了一下哪个语句耗时比较多(perf record + perf annotate):

         :	        C->values[i][j] += A->values[i][k] * B->values[k][j];
    0.12 :	  400ec6:       mov    -0x28(%rbp),%rax
    0.01 :	  400eca:       mov    0x8(%rax),%rax
    8.09 :	  400ece:       mov    -0x4(%rbp),%edx
    1.06 :	  400ed1:       movslq %edx,%rdx
    0.16 :	  400ed4:       shl    $0x3,%rdx
    0.01 :	  400ed8:       add    %rdx,%rax
    6.04 :	  400edb:       mov    (%rax),%rax
    0.66 :	  400ede:       mov    -0x8(%rbp),%edx
    0.19 :	  400ee1:       movslq %edx,%rdx
    0.00 :	  400ee4:       shl    $0x2,%rdx
    5.56 :	  400ee8:       add    %rax,%rdx
    0.66 :	  400eeb:       mov    -0x28(%rbp),%rax
    0.09 :	  400eef:       mov    0x8(%rax),%rax
    0.00 :	  400ef3:       mov    -0x4(%rbp),%ecx
    5.19 :	  400ef6:       movslq %ecx,%rcx
    0.79 :	  400ef9:       shl    $0x3,%rcx
    0.13 :	  400efd:       add    %rcx,%rax
    0.03 :	  400f00:       mov    (%rax),%rax
    5.44 :	  400f03:       mov    -0x8(%rbp),%ecx
    0.81 :	  400f06:       movslq %ecx,%rcx
    0.12 :	  400f09:       shl    $0x2,%rcx
    0.01 :	  400f0d:       add    %rcx,%rax
    9.66 :	  400f10:       mov    (%rax),%ecx
    0.62 :	  400f12:       mov    -0x18(%rbp),%rax
    0.01 :	  400f16:       mov    0x8(%rax),%rax
    0.00 :	  400f1a:       mov    -0x4(%rbp),%esi
    6.68 :	  400f1d:       movslq %esi,%rsi
    0.29 :	  400f20:       shl    $0x3,%rsi
    0.01 :	  400f24:       add    %rsi,%rax
    0.00 :	  400f27:       mov    (%rax),%rax
    6.04 :	  400f2a:       mov    -0xc(%rbp),%esi
    0.16 :	  400f2d:       movslq %esi,%rsi
    0.00 :	  400f30:       shl    $0x2,%rsi
    0.01 :	  400f34:       add    %rsi,%rax
    6.20 :	  400f37:       mov    (%rax),%esi
    0.21 :	  400f39:       mov    -0x20(%rbp),%rax
    0.00 :	  400f3d:       mov    0x8(%rax),%rax
    0.00 :	  400f41:       mov    -0xc(%rbp),%edi
    7.17 :	  400f44:       movslq %edi,%rdi
    0.21 :	  400f47:       shl    $0x3,%rdi
    0.00 :	  400f4b:       add    %rdi,%rax
    0.03 :	  400f4e:       mov    (%rax),%rax
    6.11 :	  400f51:       mov    -0x8(%rbp),%edi
    0.09 :	  400f54:       movslq %edi,%rdi
    0.00 :	  400f57:       shl    $0x2,%rdi
    0.03 :	  400f5b:       add    %rdi,%rax
    7.87 :	  400f5e:       mov    (%rax),%eax
    2.54 :	  400f60:       imul   %esi,%eax
    1.83 :	  400f63:       add    %ecx,%eax
    2.05 :	  400f65:       mov    %eax,(%rdx)

 由于是o0,翻译的代码很原始,也和我们所料 C->values[i][j] += A->values[i][k] * B->values[k][j];这句代码占了很大一部分,上述代码分别计算 C->values[i][j]  A->values[i][k]  B->values[k][j] 并将他们加起来。另外就是这个C语句看到翻译的指令数非常多,比较耗时的指令有一些符号扩展的汇编指令,我们可以通过将循环变量i,j,k改成unsigned long避免。这样修改完成后再看一下:

[root@localhost matrix_multiply]# perf stat ./matrix_multiply
 Performance counter stats for './matrix_multiply':

      11991.752951      task-clock (msec)         #    1.000 CPUs utilized          
                33      context-switches          #    0.003 K/sec                  
                 0      cpu-migrations            #    0.000 K/sec                  
             3,131      page-faults               #    0.261 K/sec                  
    28,623,436,554      cycles                    #    2.387 GHz                    
    16,565,912,968      stalled-cycles-frontend   #   57.88% frontend cycles idle   
    48,117,925,442      instructions              #    1.68  insn per cycle         
                                                  #    0.34  stalled cycles per insn
     1,015,235,495      branches                  #   84.661 M/sec                  
         1,191,762      branch-misses             #    0.12% of all branches        

      11.993037012 seconds time elapsed

运行时间只有小幅降低,stalled-cycles-frontend还有所升高,这时候再看一下汇编代码:

         :	        C->values[i][j] += A->values[i][k] * B->values[k][j];
   11.01 :	  400ecd:       mov    0x8(%rax),%rax

    7.04 :	  400eea:       mov    -0x38(%rbp),%rax

   10.59 :	  400f15:       mov    -0x8(%rbp),%rsi
   
    8.19 :	  400f30:       mov    -0x30(%rbp),%rax

    6.19 :	  400f40:       add    %rdi,%rax

    6.50 :	  400f4e:       add    %rdi,%rax
    4.18 :	  400f51:       mov    (%rax),%eax
    2.50 :	  400f53:       imul   %esi,%eax
    2.07 :	  400f56:       add    %ecx,%eax
    3.32 :	  400f58:       mov    %eax,(%rdx)

只把耗时多的列出来了,可以看见从栈中取数据的指令消耗的较多的时间(A,B,C矩阵地址和i,j,k),明明问题显示frontend bound,为什么耗时的指令会表现在访问内存呢?

【2】中是对一个循环的分析和我们的情况比较类似,它也是看到了stalled-cycles-frontend很高,但是影响frontend的那些指标测量出来都不高(文中没有给出这些指标的结果,不知道和我这里情况相比如何)。作者先是分析了stalled-cycles-frontend的来源,通过:

more /sys/devices/cpu/events/stalled-cycles-frontend
event=0x0e,umask=0x01,inv,cmask=0x01

再通过intel手册3B 19.7

确认是UOPS_ISSUED.ANY这个指标,接下来作者通过自己的hack,测量了导致stall的指标,发现RESOURCE_STALLS.ANY计数和UOPS_ISSUED.ANY很接近,而resouce stall可以通过下图的事件进一步测量:

作者发现RESOURCE_STALLS.RS和RESOURCE_STALLS.ANY计数接近,说明导致stalled-cycles-frontend正是RESOURCE_STALLS.RS

最终作者的结论是:

可以发现在-O0编译条件下,CPU stall的原因仍然是由于Reservation Station没有可用资源导致的。

但是这个RS没有资源明明是endfront bound啊,是perf给错了原因了吗?

我们的矩阵乘法测量RESOURCE_STALLS.ANY和UOPS_ISSUED.ANY是相似的,但是去测量RS,SB,ROB都和RESOURCE_STALLS.ANY的值相差很远。

 Performance counter stats for './matrix_multiply':

    16,339,747,905      cpu/event=0x0e,umask=0x01,inv,cmask=0x01/                                   
    16,169,392,859      cpu/event=0xa2,umask=0x01/ 
     1,567,045,235      cpu/event=0xa2,umask=0x04/                                   
        18,976,264      cpu/event=0xa2,umask=0x08/                                   
         2,876,878      cpu/event=0xa2,umask=0x10/                                  

      11.611535574 seconds time elapsed

可以看到perf指示的stalled-cycles-frontend和RESOURCE_STALLS.ANY是接近的,但是按照手册测量其他resource stall完全不能反映stall的resource在哪?事情到这再次陷入难以自圆其说的地步。

我们用vtune试一下,看一下intel自家的产品怎么样:

vtune根据自顶向下的方法将所有的指标都给出了,并将需要调优的标红,vtune指出瓶颈在back-end bound,我们先不去管它,看具体的指标,DTLB Overhead和Cycles of 0 Ports Utilized。前面说到Cycles of 0 Ports Utilized 一段时间内,所有port一个uops也不执行,可以由编译器动态调度提高指令并行性,我们试着将gcc优化等级由o0调整为o3。

程序运行时间降低为9.7s,性能得到提高

再看,此时Cycles of 1 Ports Utilized和L1 Bound中的DTLB_overhead,说明有L1 dcahe miss,我们回来看下perf统计

perf stat -e cycles,instructions -e L1-dcache-load-misses,L1-dcache-loads ./matrix_multiply

 Performance counter stats for './matrix_multiply':

    23,144,046,051      cycles                                                        (50.00%)
    10,086,518,752      instructions              #    0.44  insn per cycle                        
     1,322,477,777      L1-dcache-load-misses     #   32.84% of all L1-dcache hits    
     4,027,373,682      L1-dcache-loads                                               (75.00%)

       9.553961833 seconds time elapsed

同之前相比一个重要的指标instruction数量从55,116,192,335降低为10,086,518,752,指令数降低了86.7%,这说明编译器为我们做了很有效的工作!事实上,现代处理器优化能力非常强,我们优化是信任编译器,尽量将代码写成使编译器能产生高效的代码形式,配合编译器的工作。

编译器优化后,可以看到IPC=0.44,这说明存在backend bound,一般就是memory bound(因为高优化级别下编译器提高了ILP,消除core bound,vtune统计也可以看到),在上图中,perf终于提供了没有令人困惑的数据——32.85% L1 dcache miss,这和lecture-4-computer-architecture-and-performance-engineering中的演示结果也是一样的,也和我们通过IPC分析是一致的。那么这个dcache miss如何解决呢我们分析下矩阵乘法的步骤,矩阵相乘A x B是用A每一个行向量i,乘以B中每一个列向量j,得到矩阵C中i行j列的元素C(i, j),知道了执行步骤,再来分析一下内存,本文矩阵存储类似于二维数组,因此A按行存/取是满足了空间局部性的,而B,C都是按列存取的,我们的矩阵元素是int,1024x1024的,那么如果按照列来存取的话,每次都会跳4K大小——刚好是一个页面大小,那么出现DTLB overhead就不足为奇了。那么如何改进呢,我们看一下代码,由于我们的数组的随机存储的,因此我们没有必要按照矩阵乘法的规则操作,在三趟循环中,只要保证每个矩阵都是按先行后列来依次访问,就能得到比较好的空间局部性,怎么修改呢?只要将循环中j和k所在的行互换就可以了,我们来验证一下这个想法。

修改后先用perf看一下:

perf stat -e cycles,instructions -e L1-dcache-load-misses,L1-dcache-loads ./matrix_multiply

     3,113,446,879      cycles                                                        
     8,046,096,783      instructions              #    2.58  insn per cycle                              
        64,013,257      L1-dcache-load-misses     #    1.59% of all L1-dcache hits    (75.02%)
     4,020,120,092      L1-dcache-loads                                               (74.96%)

       1.414174745 seconds time elapsed

执行时间1.41s,L1 dcache miss 也降为1.59%。再附一张此时的vtune的统计:

可以看到前面的指标都消除了,上面依然提示Core Bound,还又没有解决方法呢,我们先试着使用循环展开:

  for (i = 0; i < A->rows; i++) {
    for (k = 0; k < A->cols; k++) {
      for (j = 0; j < B->cols; j+=j+4) {
        C->values[i][j] += A->values[i][k] * B->values[k][j];
        C->values[i][j + 1] += A->values[i][k] * B->values[k][j + 1];
        C->values[i][j + 2] += A->values[i][k] * B->values[k][j + 2];
        C->values[i][j + 3] += A->values[i][k] * B->values[k][j + 3];
      }
    }
  }
 Performance counter stats for './matrix_multiply':

        878.638267      task-clock (msec)         #    0.999 CPUs utilized          
                 6      context-switches          #    0.007 K/sec                  
                 1      cpu-migrations            #    0.001 K/sec                  
             3,129      page-faults               #    0.004 M/sec                  
     1,858,778,119      cycles                    #    2.116 GHz                    
       353,663,839      stalled-cycles-frontend   #   19.03% frontend cycles idle   
     4,547,721,126      instructions              #    2.45  insn per cycle         
                                                  #    0.08  stalled cycles per insn
       256,831,666      branches                  #  292.306 M/sec                  
         1,034,929      branch-misses             #    0.40% of all branches        

       0.879095850 seconds time elapsed

当然还有SIMD等优化方式,这里先不展开了。

五、参考

【1】Linux kernel profiling with perf

【2】x86高性能编程笺注(5)-循环(下)

【3】ECE571: Advanced Microprocessor-Based Design

Performance Engineering of Software Systems Performance Engineering of Software Systems,MIT-6-172-fall-2009课程. 立即下载

相关推荐

Oracle迁移至华为GaussDB SQL语法和存储过程转换

在将Oracle数据库迁移至GaussDB时,SQL语法和存储过程的转换是确保应用程序正常运行和数据完整性的关键环节。由于两者在数据类型、函数、过程语言等方面存在差异,必须系统化地进行转换和测试。正则表达式脚本:批量替换常见的语法差异。SQL解析工具:解析SQL脚本,生成GaussDB兼容的语法。代码审查工具:自动检查转换后的代码,确保语法和逻辑正确。将Oracle迁移至GaussDB涉及到SQL语法和存储过程的全面转换。通过系统化的转换步骤、使用合适的工具并结合手动调整,可以确保迁移过程的顺利进行。

weixin_38428874的博客 2395

Performance Engineering of Software Systems (一)——准备工作

目录 一、概述 二、vtune 2.1 安装 2.2 使用 三、总结   一、概述 一直都想系统的学习一下代码优化,这几天无意从豆瓣上发现有一门叫做Performance Engineering of Software Systems的MIT公开课,简单看了下简介感觉无比汗颜——居然是本科生的课程。感慨有个好的引导真是重要。静下心来,觉得还是少发牢骚,研究一下一直感兴趣的东西吧。 ...

whenloce的专栏 1432

Agentic RAG:RAG从静态到具有理解、推理、决策的Agentic RAG

RAG技术演进:从静态检索到智能代理 RAG(检索增强生成)技术经历了五个关键发展阶段:基础RAG(关键词检索)、高级RAG(语义理解)、模块化RAG(灵活架构)、图RAG(知识图谱)和最新的Agentic RAG(智能代理)。Agentic RAG通过引入自主AI代理,具备反思、规划、工具使用和多代理协作能力,实现了动态决策和自适应工作流。相比传统RAG的静态检索流程,Agentic RAG能处理复杂多步推理任务,通过自我改进机制提高输出质量,并支持多专业代理协作,显著提升了RAG系统在复杂场景下的表现。

2529

Get Started with Intel VTune Profiler(summary)

表示可用逻辑处理器的“已用时间”和使用率级别,并提供在应用程序执行期间使用了多少个逻辑处理器的图形视图。:性能快照提供了其他分析类型,这些分析类型可能有助于更深入地调查应用程序中发现的性能问题。与在应用程序中检测到的性能问题相关的分析类型以。单独约束的事实表明,应用程序受频繁但很小的内存请求的约束,而不是受饱和的物理 DRAM 带宽的约束。提供了有关最耗时的函数(热点函数)的数据,这些数据按执行时所花费的 CPU 时间排序。运行热点分析以查找热点或对应用程序的总运行时间贡献最大的代码段。

weixin_51942493的博客 1711

避坑指南:QCustomPlot鼠标事件冲突解决方案(左键拖动vs右键框选)

本文深入解析QCustomPlot在QT框架下的高级交互实现,重点解决左键拖动与右键框选的冲突问题。通过自定义事件处理和QRubberBand技术,提供了一套完整的无冲突交互方案,帮助开发者优化数据可视化应用的用户体验。

moss5的博客 660

如何使用MCP2518FD外部CAN FD控制器实现速速CAN通信

1、SPI时序MCP2518FD外部CAN FD控制器具有小尺寸和SPI接口,可实现轻松连接。可将CAN FD通道轻松添加到缺少CAN FD外设或没有所需CAN FD通道的微控制器上。MCP2518FD支持经典格式 (CAN 2.0B) 和CAN灵活数据速率 (CAN FD) 格式中的CAN帧格式,符合ISO11898-1:2015标准。框图:本文实验板MCU:CAN FD控制器:MCP2518FDCAN FD收发器:ATA6560开发环境:想了解开发板更详细信息,请点击。

qq_57798018的博客 1万+

影响一个CPU程序的性能瓶颈主要有4大点

如果CPU的数据缓存(Data Cache)无法及时提供指令执行需要的数据,或者执行单元的容量不足,将导致Backend Bound瓶颈。如果预测正确,CPU会继续执行预测的指令,否则将取消之前已执行的指令,并重新开始执行预测错误的指令。Retiring、Bad Speculation、Frontend Bound 和 Backend Bound,4个瓶颈点导致的主要原因依次是:缺乏 SIMD 指令优化,分支预测错误,指令 Cache Miss, 数据 Cache Miss。

qqnbsp的博客 1173

SIMULINK开发项目实例 1000 例专栏之第847例--基于飞行控制与稳定性的场景实例:多旋翼无人机在风扰动下的稳定性分析

本文介绍了使用Simulink进行多旋翼无人机风扰动稳定性分析的完整流程。首先建立包含动力学模型、控制系统和环境模拟三大模块的仿真系统,其中动力学模型基于牛顿-欧拉方程,控制系统采用PID调节器。重点展示了MATLAB函数实现的风扰动模型和姿态控制算法,通过设置输入信号和输出显示模块完成闭环仿真。最后通过多次风速条件下的仿真测试评估控制系统的抗干扰能力和稳定性表现,为无人机控制系统设计提供了有效的仿真验证方法。

xiaoheshang_123的博客 321

Front End Bound AND Back End Bound

转自:http://software.intel.com/en-us/forums/topic/276989 TITLE: Front End Bound ISSUE_NAME: Frontend DESCRIPTION: This category reflects slots where the Frontend of the processor undersuppli

WitsMakeMen的专栏 2587

AMDGPU SVM VRAM Migration 实现详解

AMD正在基于DRM SVM框架重构SVM实现,该框架即将广泛应用。本文分析了AMD开发者提交的POC验证版本的技术方案。该架构分为三层:AMDGPU SVM映射层、DRM Pagemap通用框架层和AMDGPU迁移后端硬件驱动层。系统涉及三个地址空间转换:VRAM分配器空间、HPA/PFN空间和GPU PTE地址空间。关键数据结构包括设备级迁移基础设施amdgpu_pagemap、迁移临时BO包装器amdgpu_svm_bo等。该方案通过地址空间转换实现VRAM迁移功能,目前仍处于POC阶段,设计可能变更

图形/计算GPU的驱动与虚拟化技术分享园地 859

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

软件性能工程(2)-软件性能工程概述

软件性能工程 「Software Performance Engineering」本文使用不到五分钟的阅读时间来阐述软件性能工程里的关键知识点,有助于大家在规划软件项目时,通过引入性能工...

Gracker的专栏 3137

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

全文 - Platform Architecture for Tight Coupling of High-Performance Computing with Quantum Processors

我们提出了一种名为NVQLink的架构,用于将高性能计算(HPC)资源连接到量子处理单元(QPU)的控制系统,以加速QPU运行所必需的工作负载。我们的目标是支持QPU的每一种物理模态和每一种类型的QPU系统控制器(QSC)。HPC资源针对实时(有延迟约束的)处理任务进行优化,这些任务的延迟容差为数十微秒。连接HPC和QSC的网络基于商用以太网实现,QPU和QSC构建者可以相对容易地采用,我们报告的往返延迟测量结果为 3.96 微秒(最大值),并有望进一步优化。

eloudy的专栏 576

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

DeepChat DeepSeek 原生网页搜索:无状态 Open Responses 路由与不透明重放机制解析

DeepChat 允许用户在选用 DeepSeek V4 Flash(官方 API)时按“单轮”粒度开启提供商原生的 Web Search 工具。本篇基于 [DeepSeek Native Web Search 规范](https://link.gitcode.com/i/e7f2e14a1f035f7368b13be6bd6f1fa9) 展开,讲清楚这条功能的路由准入规则、逐轮搜索意图的捕获方式

gitblog_01178的博客 955

全文 -The Dawn of Agentic EDA: A Survey of Autonomous Digital Chip Design

半导体行业正面临一个严峻的"生产力鸿沟"(Productivity Gap):设计复杂度的增长速度已经超过了人类设计能力的承载极限。尽管"AI for EDA"革命(L2 阶段)成功地优化了若干特定的点问题,但一场向智能体 EDA(Agentic EDA,L3 阶段)演进的范式转变正在兴起——从被动预测走向对 RTL-to-GDSII 全流程的自主编排。本综述首次为这一转变提供了系统性的框架:我们认为智能体 EDA 并不仅仅是"与工具聊天"(Chat with Tools),而是一个受约束的神经符号优化。

eloudy的专栏 490

课程/资料: 数值计算/科学计算/高性能计算/计算机架构

Sparse Matrix Algorithms(Gilbert)Introduction to Numerical Analysis(MIT)Numerical Methods for Partial Differential Equations CS555 :: Spring 2023Notes on Discontinuous Galerkin Methods for Convection Dominated PDEs(Chiwang Shu)40th South African Symposium

weixin_42849849的博客 693

BUSMASTER开源工具:车载总线仿真与协议分析解决方案

BUSMASTER是一款由Robert Bosch Engineering和ETAS GmbH联合开发的开源车载总线仿真与分析工具,支持CAN、LIN、J1939等多种总线协议的实时监控、节点仿真、数据记录和自动化测试。作为汽车电子开发领域的重要工具,它提供了完整的协议栈实现、硬件抽象层接口和可视化分析能力,广泛应用于ECU开发、总线协议验证和系统集成测试。 ## 核心关键词 CAN总线仿真、车

gitblog_00153的博客 456

这些软件你用过几个?

交流学习 software@tom.com。

2201_75866044的博客 1841

数据工程学习路线图:从第一条 SQL 到生产级管道的完整资源指南

做数据工程学习时最头疼的,往往是资源太多反而不知道下一步学什么。开源项目 data-engineer-handbook 把书单、Bootcamp 实验代码、面试准备与社区入口整理成一本"手册",帮你把每一阶段的"学什么"变成可执行的动作。本文不按"入门篇/进阶篇"分章,而是顺着数据真实流动的链路——"建管道 → 建模 → 计算 → 运维"——带你选资源。 ## 🏁 阶段一:在本地搭起第一条数据

gitblog_00078的博客 412

FunASR 中文语音识别 CPU 基准深度解析:llama.cpp/GGUF 运行时 vs whisper.cpp 实测对比

本篇文章围绕仓库内 [BENCHMARKS.md](https://link.gitcode.com/i/dbe6ebd100fdcf59ddb619c299119ec4) 记录的基准实验展开:在相同硬件与相同中文音频集上,将 FunASR 系列模型(SenseVoiceSmall、Paraformer、Fun-ASR-Nano)的 llama.cpp / GGUF CPU 运行时与业界公认的端侧

gitblog_01112的博客 162

开源AI提示词库终极指南:5大实战场景提升开发效率300%

你是否还在为AI提示词编写而烦恼?是否希望找到高质量的开源提示词模板来提升工作效率?GitHub_Trending/aw/awesome-prompts项目为你提供了最完整的AI提示词解决方案。这个开源项目汇集了超过500个专业级提示词模板,覆盖从软件开发、数据科学到学术研究等20多个专业领域,帮助开发者和技术爱好者快速构建高效的AI工作流。 [![AI提示词项目GitHub星标增长趋势](ht

gitblog_00507的博客 364

java程序员实用英语学习总结

java程序员英语学习经验总结

工匠精神coding,终生学习 1009

【Call For Papers】第七届消费电子与计算机工程国际学术会议(ICCECE 2027)

2027年第七届消费电子与计算机工程国际学术会议(ICCECE 2027)将于2027年1月15日至17日在中国湘潭隆重举行。

www_comsci的博客 226

超棒的嵌入式学习资源汇总

精选嵌入式学习资源汇总

欲穷千里目,更上一层楼 705

高楼翻译:软件压力测试中常用测试参数的估计方法

声明:本文若有侵权,请及时联系我,我会立即做删除处理。 原文出处:2011 International Conference on Computer Science and Network Technology 原文链接:http://barbie.uta.edu/~jxu/The estimation method of common testing parameters in software stress testing.pdf 原文名:《The Estimation Method of Comm

7DGroup,让技术更有价值! 1077
上一篇: 编程基础(三)——体系结构之三
下一篇: linux网络子系统分析(一)——协议栈分层实现综述
whenloce
博客等级 码龄17年 106粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值