计算优化方法
向量化指令:现代处理器通常支持向量化指令集(如SSE、AVX等),可以同时对多个数据执行相同的操作,从而提高计算效率。ggml和Eigen都可能利用这些向量化指令来加速矩阵和向量运算。
并行计算:通过并行计算,可以同时在多个处理单元上执行计算任务,提高计算效率。ggml和Eigen可能利用多线程或并行计算框架(如OpenMP)来实现并行化计算,以充分利用多核处理器的计算能力。
内存优化:高性能计算中,对内存访问的优化非常重要。ggml和Eigen可能使用各种技术来最大程度地减少内存访问延迟,如缓存优化、数据对齐等。
数值优化:在数值计算中,使用高效的算法和数值优化技术可以提高计算速度和精度。ggml和Eigen可能采用一些数值优化方法,如迭代算法、快速傅里叶变换(FFT)等。
指令集优化
- 不同指令执行速度不同:整型的加减、比较、位运算快,除法、取模运算慢。 浮点数运算慢。
高性能取模运算
查询优化
比如海量k-v下,如何实现尽可能快的查询。
排序优化
比如海量k-v下,如何实现尽可能快的全局排序或者topN查询。
海量数据单机排序
海量数据多机排序
编译器优化
关系代数优化
运行调度优化
pthread_setaffinity_np 将线程绑定到特定的cpu核 pthread_setaffinity_np 将进程绑定到特定的cpu核
存储优化方法
数据对齐:数据对齐是指将数据存储在内存中的地址上按照特定的字节对齐方式进行排列。通过将数据按照适当的字节对齐方式存储,可以提高内存访问的效率,并减少内存访问延迟。
内存复用:内存复用是指在程序执行过程中,尽可能重复使用已分配的内存空间。通过减少内存分配和释放的次数,可以减少内存管理的开销,并提高计算效率。
内存池:内存池是一种预先分配一定大小的内存块,并在程序执行过程中重复使用这些内存块的技术。通过使用内存池,可以减少内存分配和释放的开销,并提高内存管理的效率。
数据压缩:数据压缩技术可以减少内存空间的占用,从而减少数据传输和存储的开销。在高性能计算中,可以使用各种压缩算法和压缩库来对数据进行压缩,以减少内存占用。
内存层次结构优化:现代计算机系统通常具有多级缓存和主存等不同层次的内存结构。通过合理利用不同层次的内存,可以减少内存访问延迟,并提高计算效率。这包括使用缓存友好的数据结构、数据局部性优化等方法。
内存带宽优化:在高性能计算中,内存带宽通常是一个关键因素。通过优化数据访问模式、数据布局和算法,可以最大限度地利用内存带宽,提高计算效率。
内存零拷贝技术
- 内核态零拷贝:在内核空间实现零拷贝,常见的技术有sendfile()系统调用。它可以直接在内核中将数据从一个文件描述符传输到另一个文件描述符(通常是网络套接字),无需将数据复制到用户空间。
- 用户态零拷贝:用户态的零拷贝技术允许应用程序直接管理内存,比如使用内存映射(memory-mapped files)技术。通过将文件映射到进程的地址空间,应用程序可以直接在映射区域读写文件数据,无需执行读写系统调用。
- DMA传输:直接内存访问(Direct Memory Access, DMA)允许硬件设备(如网络卡)直接读写内存,而不需要CPU介入。这样,数据可以从存储设备直接传输到网络设备,而不经过CPU。
- RDMA传输:远程直接内存访问(Remote Direct Memory Access, RDMA)是一种网络协议,它允许在远程主机之间直接交换数据,绕过它们的操作系统,从而减少延迟和CPU负载。