草庐IT

《C++并发编程实战》读书笔记(4):原子变量

1、标准原子类型标准原子类型的定义位于头文件内。原子操作的关键用途是取代需要互斥的同步方式,但假设原子操作本身也在内部使用了互斥,就很可能无法达到期望的性能提升。有三种方法来判断一个原子类型是否属于无锁数据结构:所有标准原子类型(std::atomic_flag除外,因为它必须采取无锁操作)都具有成员函数is_lock_free(),若它返回true则表示给定类型上的操作是能由原子指令直接实现的,若返回false则表示需要借助编译器和程序库的内部锁来实现。C++程序库提供了一组宏:ATOMIC_BOOL_LOCK_FREE、ATOMIC_CHAR_LOCK_FREE、ATOMIC_CHAR16

《C++并发编程实战》读书笔记(3):并发操作的同步

1、条件变量当线程需要等待特定事件发生、或是某个条件成立时,可以使用条件变量std::condition_variable,它在标准库头文件内声明。std::mutexmut;std::queuedata_queue;std::condition_variabledata_cond;voiddata_preparation_thread(){while(more_data_to_prepare()){constdata_chunkdata=prepare_data();std::lock_guardlk(mut);data_queue.push(data);data_cond.notify_o

《C++并发编程实战》读书笔记(2):线程间共享数据

1、使用互斥量在C++中,我们通过构造std::mutex的实例来创建互斥量,调用成员函数lock()对其加锁,调用unlock()解锁。但通常更推荐的做法是使用标准库提供的类模板std::lock_guard,它针对互斥量实现了RAII手法:在构造时给互斥量加锁,析构时解锁。两个类都在头文件里声明。std::listsome_list;std::mutexsome_mutex;voidadd_to_list(intvalue){//C++17引入了类模板参数推导的新特性,所以下面语句也可以简化成:std::lock_guardguard(some_mutex);std::lock_guard

华为数字化转型之道-读书笔记1

第一章数字化转型,华为的战略选择1.数字化转型是企业的必答题1.1解决时代难题:“鲍莫尔成本病”“体验变流量,流量变收入”是其常见的商业模式。数字化平台通过“作业即记录、记录及数据”的方式,能给企业带来很多好处:使得企业对广泛分布的态势感知能力大幅增强,成本大幅降低;通过让不同层级、不同部门实时看到相同的信息,减少沟通成本,加快响应速度;通过规则数字化等手段使确定性业务由系统自动处理;通过对异常情况的判定与实时预警,让监管更加有的放矢。由数据化平台带来的种种变化,最终会通过对业务流程的重构,打破传统组织的效能边界,让企业内部运作更加高效、扁平,降低运营成本,提升运营质量。1.2构筑产业链端到端

《C++并发编程实战》读书笔记(1):线程管控

1、线程的基本管控包含头文件后,通过构建std::thread对象启动线程,任何可调用类型都适用于std::thread。voiddo_some_work();structBackgroundTask{voidoperator()()const;};//空的thread对象,不接管任何线程函数std::threadt1;//传入普通函数std::threadt2(do_some_work);//传入lambda函数std::threadt3([](){/*dosomething*/});//传入可调用对象BackgroundTasktask;std::threadt4(task);//不能使用

《CUDA编程:基础与实践》读书笔记(4):CUDA流

1.CUDA流一个CUDA流指的是由主机发出的在一个设备中执行的CUDA操作序列。除主机端发出的流之外,还有设备端发出的流,但本文不考虑后者。一个CUDA流中的各个操作按照主机发布的次序执行;但来自两个不同CUDA流的操作不一定按照某个次序执行,有可能是并发或者交错地执行。任何CUDA操作都存在于某个CUDA流中,如果没有明确指定CUDA流,那么所有CUDA操作都是在默认流中执行的。非默认CUDA流由cudaStream_t类型的变量表示,它由如下CUDA运行时API产生与销毁:cudaError_tcudaStreamCreate(cudaStream_t*pStream);cudaErro

DP读书:鲲鹏处理器 架构与编程(十四)ACPI与软件架构具体调优

一分钟速通ACPI和鲲鹏软件移植操作系统内核鲲鹏软件移植鲲鹏软件移植流程编译工具选择编译参数移植案例源码修改案例鲲鹏分析扫描工具DependencyAdvisor鲲鹏代码迁移工具PortingAdvisor鲲鹏软件性能调优鲲鹏软件性能调优流程CPU与内存子系统性能调优网络子系统性能调优磁盘I/O子系统性能调优应用程序性能调优基础软件性能调优鲲鹏性能优化工具TuningKit操作系统内核ACPI(AdvancedConfigurationandPowerInterface)是一种由英特尔、微软、惠普、索尼等公司共同开发的电源管理标准。它提供了一种通用的电源管理接口,用于管理计算机系统的电源状态、

DP读书:鲲鹏处理器 架构与编程(十三)操作系统内核与云基础软件

操作系统内核与云基础软件鲲鹏软件构成硬件特定软件鲲鹏软件构成硬件特定软件1.BootLoader2.SBSA与SBBR3.UEFI4.ACPI操作系统内核Linux系统调用Linux进程调度Linux内存管理Linux虚拟文件系统Linux网络子系统Linux进程间通信Linux可加载内核模块Linux设备驱动程序Linux架构相关代码基础库开发工具、中间件和应用程序云基础软件鲲鹏软件开发模式原生开发模式交叉开发模式云端开发模式补更,因为前几天画图的原因…鲲鹏软件构成硬件特定软件鲲鹏软件构成鲲鹏处理器的软件生态是一个不断发展的软件生态,服务器本身也具有复杂度多样性,经过很长时间的发展服务器硬件

《CUDA编程:基础与实践》读书笔记(3):同步、协作组、原子函数

1.单指令多线程模式从硬件上看,一个GPU被分为若干个SM。线程块在执行时将被分配到还没完全占满的SM中,一个线程块不会被分配到不同的SM中,一个SM可以有一个或多个线程块。不同线程块之间可以并发或顺序地执行。当某些线程块完成计算任务后,对应的SM会部分或完全地空闲,然后会有新的线程块被分配到空闲的SM。从更细的粒度看,一个SM以32个线程为单位产生、管理、调度、执行线程,这样的32个线程称为一个线程束,每个线程束包含32个具有连续线程号的线程。在Volta架构之前,一个线程束中的线程拥有同一个程序计数器(programcounter),但有各自不同的寄存器状态。在同一时刻,一个线程束中的线程

《CUDA编程:基础与实践》读书笔记(2):CUDA内存

1.全局内存核函数中的所有线程都能够访问全局内存(globalmemory)。全局内存的容量是所有设备内存中最大的,但由于它没有放在GPU芯片内部,因此具有相对较高的延迟和较低的访问速度,cudaMalloc分配的就是全局内存。此外,当处理逻辑上的二维或者三维问题时,还可以使用cudaMallocPitch和cudaMalloc3D分配内存,用cudaMemcpy2D和cudaMemcpy3D复制数据,释放时依然使用cudaFree函数。除了上述动态分配的全局内存外,CUDA也允许使用静态全局内存,其所占内存数量是在编译期确定的。静态全局内存变量必须在所有主机与设备函数外部定义,从其定义之处开