- 博客(22)
- 收藏
- 关注
原创 【CUDA 】第3章 CUDA执行模型——3.1概述+3.2线程束执行
核心:流式多处理器SM每个GPU有多个SM,每个SM支持数百个线程并行执行其中,共享内存和寄存器是非常重要的资源,共享内存分配在常驻block中,寄存器在thread中被分配,活跃的warp数量对应SM上的并行量当启动一个gird时,block被分配在SM上执行,多个block可以被分配到同一个SM,一个SM可以容纳多个block。
2024-11-14 10:24:21 717
原创 【CUDA 】第2章 CUDA编程模型——2.4设备管理
待解决的问题:代码2-8中cudaDeviceProp类的成员变量缺少成员信息,与书本不一致报错。
2024-11-04 19:14:45 382
原创 【CUDA 】第2章 CUDA编程模型——2.3组织并行线程
给定线程——>线程和块索引——>线程和块索引的全局内存偏移量ix,iy——>全局内存的存储单元idx。第二次用16*16的块,运行时间为0.004395 sec。核心:可以看作二维网格二维块的特殊情况,第二个块的维度是1。第二次块的尺寸为128,运行时间为0.004372 sec。第一次块的尺寸为32,运行时间为0.005981 sec。16的块,运行时间为0.004395 sec。1的块,运行时间为0.007075 sec。1的块,运行时间为0.007160 sec。解决:根据提示修改为正确的函数名。
2024-10-16 16:56:14 352
原创 【CUDA 】第2章 CUDA编程模型——2.2给核函数计时
解决:之前写的sumArraysOnGPU函数只有三个参数,没有nElem参数,是对于每个线程实现的加法,形参不匹配,所以报错,修改sumArraysOnGPU函数。解决:官方代码把cpuSecond()改成了seconds()函数,但是书本上给出的是cpuSecond()函数,官方代码头文件中有seconds()函数的定义。解决:需要这些函数的定义,通过看官方给出的代码发现,官网使用了一个common.h把所有常见的头文件都放在这里,并且让函数#include包含这个头文件。解决:使用nsys命令。
2024-10-16 15:25:47 648
原创 【CUDA 】第1章 基于CUDA的异构并行计算
CUDA核的3个关键抽象(最小的一组语言拓展):①线程组层次②内存层次③障碍同步(在执行某个任务前,必须完成N个线程各自的任务,才能往下执行)CUDA API:驱动API 和 运行时API(不能混合使用,只能二选一用,这本书用。并行计算:多个计算资源,多个同时解决的小问题安排在不同的计算资源上。CUDA程序=主机代码(CPU)+设备代码【核代码】(GPU)异构应用:主机代码(CPU)+设备代码(GPU)异构架构:GPU是CPU的协处理器(设备端)任务相关性:一个的输出是另一个的输入。
2024-09-11 15:11:58 285
原创 LaTeX——tikz学习(1)——基本内容学习
TikZ宏包是一个十分强大的绘图宏包,它提供\tikz 命令和tikzpicture 环境。2、具体绘图指令可以放在\tikz 后面,也可以放在tikzpicture 中间。1、主文件加载tikz宏包,下面就可以使用宏包的对应命令。
2024-05-03 11:04:47 1326 1
原创 【C++】机试刷题总结day14——四、字符串——string知识点
string——>其他类型:sto系列函数(stoi(变成int)、stol(变成long)、stof(变成float)、stod(变成double))<2>字符数组不支持赋值、判断相等、比较大小——>C风格字符数组不能作为map和set的类型参数。erase(要删起始下标,要删尾后下标) 左闭右开[,) 尾后下标(终止下标的下一个位置)不推荐的原因:①性能差(机试超时) ②cout格式管理麻烦(printf小数点后2位 %.2f)(4)< <= > >= 比较大小,比较的是字典序。
2024-03-27 18:05:44 525
原创 【C++】机试刷题总结day13——三、排序和查找——查找(难※)
若查找多次x元素,查m次,时间复杂度O(mn),假设10的4次方次查找,10的6次方的个元素——>10000ms>1000ms。(3)每个字符按从小到大顺序输出——>需要另外的数据结构,记录出现的先后次序,vector动态数组,下标小先出现。(2)map:记录字符和位置(位置有重复,不能用简单整数——>①multimap可重复②动态数组vector)N个元素,查找M次,时间复杂度O(NlogN(排序)+M(查询次数)logN(每次二分查找))b可以不用建立动态数组,查完给出结果即可。
2024-03-24 22:01:16 485
原创 【C++】机试刷题总结day12——三、排序和查找——排序
sort函数底层:快速排序(小于枢纽放左边,大于枢纽放右边,基于比较一定存在:lhs代表左边指向的内容,rhs代表右边指向的内容if(lhs 比较 rhs) {//默认比较是小于< 不交换 } else {交换 }默认比较是小于<(升序)自定义函数(),两个参数lhs和rhs,返回bool值(true\false)函数体内是不发生交换的条件在主函数内调用sort函数,有三个参数,第三个参数是自定义的函数名。
2024-03-23 22:39:08 372 1
原创 【C++】机试刷题总结day11——二、枚举和模拟(下)map非线性数据结构
与begin,end的区别:begin、end是整个容器;(1)向字符串数组写入时,不用加取地址符号,因为str本身就是指向数组的指针。如果访问的键不存在,会新增一个键值对,键为查找的’a’,值为默认初始值0。可以通过下标访问元素,下标可以是任意类型,元素也可以是任意类型。与set区别:set内是单个元素的集合,map内是键值对的集合。键为键为char表示按键a-z,值为int表示在哪个按键。:返回key对应的最后一个值的后一个位置。(1)通过key找对应的value。:返回key对应的第一个值的位置。
2024-03-23 12:01:09 852 1
原创 【C++】机试刷题总结day10——一、枚举和模拟(下)set非线性数据结构
count==0元素不存在(更简单,无需迭代器)一共10个数,每个数可能出现或不出现,共2的10次方=1024种可能性。无需关心元素的位置,vector(增删)需要用迭代器指明位置,find函数:查找元素位置,返回迭代器;:0≤n≤10的6次方,阶乘增长很快,数据可能不是很大。5的阶乘到120,扩大范围,10的阶乘超过100万。xi≥0——>从0的阶乘开始算,0的阶乘是1。因此只需考虑0-9的阶乘,10以上的无需考虑。每次加入一个新的阶乘,里面的数量翻倍。t≥1——>阶乘的和至少有一项。
2024-03-17 22:30:37 1273 1
原创 【C++】机试刷题总结day09——一、枚举和模拟(下)list链表
创建2个动态数组,分别存储完数和盈数;单独创建一个函数用来存储因子之和,判断因子的方法:能除尽就是因子。复制输入样例时,输出的每组结果就在对应每组输入后面,因此输出结果夹杂在复制一堆输入之间。优势:list中使用erase和insert效率更高,因为底层是双向链表。不足:动态数组vector(顺序表)在中间插入删除效率低。优先选择vector,若大量插入删除,则改为list。用vector数组来存放树,0表示有树,1表示没树。(3)分糖果不能先分第一个,再分第二个,要同时分。(1)当输入0时,输入结束。
2024-03-17 16:39:28 397 1
原创 【C++】机试刷题总结day08——一、枚举和模拟(下)vector动态数组+迭代器
②内存分配:局部数组(<1MB) 全局数组(很大,但是可能超过题目限制)——>局部不够放全局,全局不够改算法。③数组作为函数参数不方便(被调用函数只能拿到数组地址,不知道数组长度)——>传2个参数(首地址,长度),多使用push_back,因为动态数组是顺序表,在中间位置插入,效率低。end函数:可以获取尾后的位置(最后一个元素的后一个没有元素的空位置)③找已知元素在vector的位置——>查找算法(下一章)——>erase函数+迭代器(指向要删除位置),迭代器的值发生变化,若还想继续插入或删除,
2024-03-14 17:51:20 1434
原创 dev c++调试查看vector内元素的数值
参考于链接: 添加查看的方式链接: 添加头文件1.错误方式:添加查看vec1,这样会导致无法继续运行2.正确方式:查看单个元素:*(&vec1[0])查看多个元素:*(&vec1[0])@2@后面数字为查看从vec1[0]开始的元素个数修改为以上的方法之后,我这边还是报错报错信息为<error: Could not find operator[].>经过再次搜索之后,我找到了解决方法,添加头文件内容这次效果如下,可以正常查看vector内的元素完整代码如下
2024-03-14 11:38:43 844
原创 【C++】机试刷题总结day06——一、枚举和模拟(上)模拟问题
①不要看做一个整体将图案分解为——>一行行字符串字符串再分解为——>数组中各元素②找规律:列表法先找特殊行,看元素种类(eg:空格、数字等)、数量、行号、列号③从表格中找规律:找等差数列④转换成代码。
2024-03-13 17:25:16 730
原创 【C++】机试刷题总结day04
旧思路:从头遍历一遍数组,根据00,01,10,11的不同情况分别处理,第0个元素单独处理,但是结果不对,需要再思考一下哪里出了问题。新思路:元素不是1就是0,因此遍历数组时,若当前元素是1,则说明前面是连续个1;若当前元素是0,说明连续个1断到了这里。利用类似线代的思想,会发现第一行变成了倒数第一列,第一行的第2列元素变成了倒数第一列的第2行元素。※※遍历结束的最后一位,如果是1,则不会进行比较。整体思路:创建一个同样大小的新数组,新数组存储应该得到的结果,最后再赋值回旧数组。
2024-03-08 22:11:06 344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人