【CUDA】cuda学习笔记

Let's learn CUDA together! 🚀

请多指教!

查看链接
【CUDA】std::vector Allocator

前言

最近在跟着 小彭老师的 CUDA 课程 学习时,发现了一个平时很少用到的 vector 的功能,那就是自定义内存分配器。

通过查看 cppreference,发现 vector 的构造函数有两个形参,一个是 T 类型的对象,另一个是 Allocator 类型的对象, 其中 Allocator 默认为 std::allocator<T>:

cpp
template<
    class T,
    class Allocator = std::allocator<T>
> class vector;

在往 vector 中插入元素时,会调用 Allocator 的 allocate 函数来分配内存,移除元素时会调用 deallocate 函数来释放内存。

【C 】std::sort 原理

前言

在C 标准库中,std::sort的底层实现通常使用的是混合排序算法,具体来说是introsort(内省排序)。

introsort结合了快速排序、堆排序和插入排序的优点:

  1. 快速排序:在一般情况下,std::sort使用快速排序,因为它平均情况下有很好的时间复杂度 O(nlogn) 。它通过选择一个基准(pivot),然后将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归排序。

  2. 堆排序:快速排序的最坏情况时间复杂度是 O(n²) ,为避免这一情况,当递归深度超过某个阈值时,std::sort会切换到堆排序,确保时间复杂度为 O(nlogn)

  3. 插入排序:在数组规模较小的时候,std::sort会切换为插入排序,因为在小规模数据上,插入排序效率更高。

这种组合使得std::sort在处理不同规模和不同结构的数据时,既能保持高效的平均性能,又能避免最坏情况的性能退化。

【C 】libwebsockets 服务端示例

前言

Libwebsockets is a simple-to-use, MIT-license, pure C library providing client and server for http/1, http/2, websockets, MQTT and other protocols in a security-minded, lightweight, configurable, scalable and flexible way. It's easy to build and cross-build via cmake and is suitable for tasks from embedded RTOS through mass cloud serving.

libwebsockets 是一个简单易用的、MIT 许可的、纯 C 语言库,提供了 HTTP/1、HTTP/2、WebSockets、MQTT 和其他协议的客户端和服务器实现。它以安全为导向,轻量级、可配置、可扩展和灵活。通过 cmake 构建和交叉构建非常容易,适用于从嵌入式 RTOS 到大规模云服务的任务。

留作备忘。

【RK3588】关于 devfreq 和 cpufreq 的记录

前言

本文主要介绍了 /sys/class/devfreq/sys/devices/system/cpu/cpufreq 目录,以及如何手动管理和监控设备频率和 CPU 频率。同时提供了简单的 Python 脚本,用于打印设备和 CPU 的频率信息。

环境信息:

  • 硬件:Friendly NanoPi-R6S
  • 固件:rk3588-usb-debian-bullseye-minimal-6.1-arm64-20240131

部分内容由 Github Copilot 自动生成,仅供参考。

【C 】关于 cv::Mat 的几种传参方式

前言

cv::Mat 是 OpenCV 中最常用的数据结构之一,本文主要介绍 cv::Mat 的几种传参方式。

在开始之前要说明一下 cv::Mat 的结构,根据官方文档——Mat基本上是一个具有两个数据部分的类:矩阵头(包含诸如矩阵大小、用于存储的方法、存储矩阵的地址等信息)和指向包含矩阵的指针像素值(根据选择的存储方法采用任何维度)。矩阵头大小是恒定的,但是矩阵本身的大小可能因图像而异,并且通常会大几个数量级。

由于矩阵的一些特性,在传参时会有意料之外的结果。

【FFMPEG】使用 ffmpeg 推 RTSP 流

前言

在现代多媒体应用中,实时流媒体传输(RTSP)是一项重要技术。它允许我们将音视频内容实时传输到远程服务器,从而实现实时观看和监控。FFmpeg 是一个强大的多媒体处理工具,支持多种音视频格式和流媒体协议。

本文将介绍如何在 macOS 上使用 FFmpeg 推送 RTSP 流。我们将涵盖以下内容:

  1. 在 macOS 上安装和配置 FFmpeg。
  2. 搭建 RTSP 服务。
  3. 使用 FFmpeg 将本地视频文件推送到 RTSP 服务。
  4. 使用 FFmpeg 将摄像头视频推送到 RTSP 服务。

通过本文的学习,您将掌握在 macOS 上使用 FFmpeg 进行 RTSP 推流的基本方法和技巧。