6 雨后森林xw

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 30w+

C++ char类型打印为空

学过C的应该都知道char类型是专门用来存储字符的,如'a','1'等等,大部分人也就局限于此,但实际上char类型是一种整型,8位的整型,也有类库定义为int8。 计算机只能存储0,1,也就是数字,从计算机结构来说,也注定不能存储'a','b'等字符,但实际上我们真真切切使用了字符,这就涉及到计算机的编码(如ascii),百度百科中说明了ASCII诞生的原因: 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如...

2020-06-03 15:10:23

Qt http操作

在介绍Qt http之前,先介绍以下http的基本过程:http是一个简单的请求-响应协议,百度上是这么定义的:http通常运行在TCP之上,它是基于C/S架构进行通信的,其客户端的实现程序主要是Web浏览器,例如Firefox、InternetExplorer等。Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这客户端浏览器和Web服务器之间就可以通过HTTP协议进行通信了。http通信过程包括:客户与服务器建立连接;客户向服务器提出请求;服务器接受

2020-05-12 15:14:42

C++ static关键字用于类间指针传递

C++ static关键字有很多作用,包括保持变量内容的持久,初始化值为0,以及C++成员变量的无类化等等,大部分作用可以在博客https://blog.csdn.net/wangbeibei23/article/details/89343705中看到;在大型软件项目中,类之间指针传递是一个大的问题,如在A类新建一个类指针,假设设为subA *a=new subA,这个a指针需要在B类中使用,...

2020-04-26 16:38:46

cuda 通用原子操作

在多线程中,访问共享资源时,确保所有其他的线程都不在同一时间内访问相同的资源,就叫作原子性。在主机上,一般通过互斥锁(mutex,lock)的方式来保证线程之间的原子性。那么在cuda中,如何保证核并行的原子性?cuda对一些常用操作包括加、减、按位与、或等提供了原子操作的函数,具体可参考博客https://blog.csdn.net/dcrmg/article/details/5495930...

2020-03-19 11:18:26

opengl渲染流程

简单来说,opengl渲染流程主要包括顶点变换,图元装配,纹理计算或着色和光栅化四个阶段。 图片截至博客https://www.cnblogs.com/zhanglitong/p/3238989.html...

2020-02-26 20:01:15

cuda 共享内存bank conflict详解

在cuda并行计算中,共享内存在GPU速度优化上扮演着重要作用,但是如果共享内存使用不当,也会导致速度不快反降或者提速效果不佳,如发生bank conflict;bank的中文翻译为存储体,GPU 共享内存是基于存储体切换的架构(bank-switched-architecture),一般现在的GPU都包含32个存储体,即共享内存被分成了32个bank;根据GPU计算能力的不同(Compute...

2020-01-13 10:10:22

动态规划

我们来看看动态规划百度百科的定义:动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优的解。动态规划算法与分治类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得...

2019-12-31 16:08:21

CUDA流任务并行

CUDA流表示一个GPU操作队列,并且该队列中的操作将以指定的顺序执行。可以将每个流视为GPU的一个任务,并且这些任务可以并行执行,即相同流顺序执行,不同流并行执行;不同流并行执行时不同流所要执行的任务要没有依赖关系;当不手动创建流时,cuda将会默认一个流操作。 在硬件选择上,这里有一个概念,支持设备重叠功能,支持设备重叠功能的 GPU 能够在执行一个 CUDA C...

2019-12-19 17:32:57

cuda点积运算

最近在研究并行运算的规约算法,在看《GPU高性能编程CUDA实战》这本书中点积运算时,有些问题想了很久,记录下来;注点积公式:(dot(A,B)=a1*b1+a2*b2+...+an*bn)书上例子算点积运算时分为了以下几步:1.申请共享内存cache;__shared__ float cache[threadsPerBlock]这里要注意一个概念:一旦这样声明共享内存,就会...

2019-12-18 15:42:06

C++ thread 那点事

1. C++线程通过thread th(func)或者thread *th=new thread(func)建立;建立线程后,记得在作用域内调用join或detach,否则退出作用域后程序会异常退出;其中join表示阻塞主线程在join处,等待子线程结束后再继续;detach表示主线程与子线程分离,独立运行;2. mutex(互斥锁)用于在多个线程访问同一资源时,保证数据的一致性(lock/...

2019-12-16 17:32:47

cuda 使用trust库计算最值

Thrust是并行算法和数据结构的基于GPU CUDA的C++库,类似于C++标准库stl,cuda安装后自带。Trust用于求最值的函数为min_element和max_element,和stl名字一样;我是偶然发现原来cuda还有一个这个库,在项目中,因为中间有一个过程需要最值的索引,原本我是把数据从显存中拷贝到主机,然后使用stl的标准库计算的,因为主机与设备之间的数据交换慢,速度不是很...

2019-12-14 16:51:54

CUDA笔记

1.cudaDeviceSynchronize()用于CPU和GPU同步,即cpu和GPU均运行至cudaDeviceSynchronize()后再继续;CPU多线程时,会阻止所有线程;2._syncthreads()用于核函数内线程块线程同步,即同一block内所有线程执行至__syncthreads()处等待全部线程执行完毕后再继续(因此_syncthreads()不要位于发散分支中(if...

2019-12-12 17:11:51

cublas 矩阵乘法

cublas是cuda用来解决线性代数的问题的一个函数库,而且对于矩阵运算来说,其效率比大部分人自己写核函数高不少,只是cublas不同于C++,是列优先存储,因此参数一不小心设的不对,结果大不相同,所以记录下来;首先介绍一下什么是列优先存储?C++中,二维数组也是通过一维数组传进去的,假设我们有1个2*2的数组,设为a=[1,2,3,4],那么C++变成2*2的数组,就为[1,2;3,4...

2019-12-11 11:13:10

数组地址和指针变量地址

在项目测试中,误用了数组地址(当然也没错),后面依葫芦画瓢,使用了指针,最后造成了程序崩溃,所以记录下来;首先是测试结果没问题的代码:#include <iostream>#include <fstream>using namespace std;float arrSig[16000];int main(){ ifstream input("da...

2019-12-06 10:13:23

C++由于结构体对齐问题造成的程序崩溃

在项目中,遇到一个由于结构体对齐问题造成程序崩溃问题,测试了半天,终于复现了出来。首先定义一个头文件test.h:class Test{ public: Test(); short id; string name;};然后再建立test.cpp文件完成构造函数:Test::Test(){}可以看出这里构造函数什么都没干,但是它必须要,否则不...

2019-11-22 16:17:14

C++ 多线程 报错invalid use of non-static member function

创建一个类test:class test{ public: void func() { std::cout<<"test"; }};main函数多线程调用test:test *t=new test;std::thread th(t->func);编译报错,GCC编译器报错invalid use...

2019-11-21 15:59:42

Qt udp数据发送太快,数据丢失

Qt 在单线程中,如果数据发送太快,应用程序还在处理别的程序,就会触发不了readyRead信号,导致造成数据的丢失,解决方法可以将udp处理类继承于QThread,在多线程入口run函数里通过死循环接收数据,通过信号槽机制通知处理函数进行处理。介绍Qt多线程的一个博客https://www.cnblogs.com/xia-weiwen/p/10306089.html...

2019-11-21 14:06:05

linux 上 通过C++ 标准库thread 建立的线程怎么关闭

C++11 自带了线程库thread,之所以要写linux,是因为C++标准库thread在底层,仍旧使用的是平台相关的线程API。在linux上C++标准库thread使用的是pthread,实质上是在pthread上封装了一层,因此thread的释放靠得就是pthread。首先,我们新建一个线程: std::thread th(function); //注意,如果是使用new 创...

2019-11-17 10:41:48

nvcc 将动态并行cu文件编译成动态链接库

如果cuda程序没有使用动态并行,编译动态链接库为:nvcc -arch=sm_60 -std=c+11 -O3 -rdc=true -Xcompiler -fPIC -c algorithm.cu -o algorithm.og++ algorithm.o -fPIC -shared -o libalgorithm.socuda文件中如果使用了动态并行,编译成动态链接库需要使用以下...

2019-11-10 16:21:06

Qt Creator cuda动态并行工程配置

动态并行允许从GPU端启动核函数,它要求显卡计算能力大于3.5.动态并行Qt Creator的工程配置与不使用动态并行时有较大差别,以linux系统为例QT += coregreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = testTEMPLATE = appDEFINES += QT_DEPRECATED_WAR...

2019-11-10 15:41:22

查看更多

勋章 我的勋章
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。