自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

耗纸的博客

没事看看书,学学习,扯扯淡

  • 博客(161)
  • 收藏
  • 关注

原创 规约算法-reduction

CUDA Samples上的例子,可是那个封装的优点太复杂,不适合初学者看,按照上面的方法实现了一下。如下#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <math.h>#include "book.h"#define SIZE 81920000#define THREAD_NUM 512__global_

2017-05-01 17:46:05 4648

原创 CUDA程序阻塞

今天写一个程序,cuda的kernel竟然阻塞呢,什么情况? 后来胡思乱想了一大堆, ,错误程序如下for (int i=tid; i<col_size; tid+=32) ...原来是写错程序遇到死循环了,一写程序一堆错。。哎,正确的如下for (int i=tid; i<col_size; i+=32) ...程序出错的时候, 建议在分配任务的时候画图,把block,thr

2017-05-01 17:41:12 1195

原创 如何写出正确CUDA程序(持续更新中)

本文不谈CUDA优化,只谈如何正确写出CUDA程序,先写对,再说优化。最近写CUDA程序也是断断续续的,经常程序写完了需要很长的时间调试,各种错误,调试的方法也是简单的printf(),目前没找到更好的调试方法,如果有更好的办法的化希望告知。 昨天总结了下为什么写的CUDA程序总是出错(就先别说优化呢?写对再再谈别的吧),总结出一些心得和经验(算是经验)吧,结合例子看吧。首先谈谈调试方法吧,目前我

2017-05-01 14:56:28 3134 1

原创 echoServer-IO复用实现

还有很多问题,等待更新吧,哎,凡事需要自己写一遍,道理谁都懂;写完再和别人的代码对比。#include <stdio.h>#include <stdlib.h>#include <sys/epoll.h>#include <sys/socket.h> #include <netinet/in.h> #include <unistd.h>#include <arpa/inet.h>#i

2017-04-30 16:21:56 404 3

原创 网络编程中的错误( 持续更新中)

明明监听了这个端口,可是netstat查看时,却看不见,查找源代码,错误如下listen_addr.sin_port = htonl(12345);应该调用htons()函数,(笔误呀。。。哎)2

2017-04-30 13:46:03 316

转载 "error while loading shared libraries: xxx.so.x" 错误的原因和解决办法

一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)

2017-04-29 20:54:48 849

转载 有关stdint.h文件

Google C++编程规范的P25页有如下叙述: 按照posix标准,一般整型对应的*_t类型为:1字节 uint8_t2字节 uint16_t4字节 uint32_t8字节 uint64_tstdint.h文件如下/* Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation,

2017-04-29 15:39:49 5530

转载 安装libevent遇到的问题,error while loading shared libraries: libevent-2.0.so.5,

其实这个问题是应该算通用的问题, 参考以下博客 libevent安装总结 1.先用:ls -al /usr/lib | grep libevent 查看是否已安装,如果已安装且版本低于1.3,则先通过:rpm -e libevent —nodeps 进行卸载。2.下载libevent安装包:libevent-2.0.21-stable.tar.gz,然后解压。如果你的系统已经安装了libev

2017-04-29 13:34:36 3090

转载 Linux中如何卸载已安装的软件

Linux软件的安装和卸载一直是困扰许多新用户的难题。在Windows中,我们可以使用软件自带的安装卸载程序或在控制面板中的“添加/删除程序”来实现。与其相类似,在Linux下有一个功能强大的软件安装卸载工具,名为RPM。它可以用来建立、安装、查询、更新、卸载软件。该工具是在命令行下使用的。在Shell的提示符后输入rpm,就可获得该命令的帮助信息。   软件的安装  Linux下软件的安装主要有

2017-04-29 13:27:08 5017

转载 linux md5sum 的用法

在Linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。md5sum是一种计算机程序,用于计算与校验RFC 1321所描述的128位MD5哈希值,此处MD5散列值(或校验和)作一个文件的数字指纹使用。两个不同的文件几乎不可能有相同的MD5哈希值,除非其创建便是刻意为之。一般来说,任何对一个文件的非恶意变更都会导致其MD5哈希值改变,因此md5sum一般用于检查文件完整性,尤其常

2017-04-28 21:41:18 751

原创 <4>:TCP自连接

代码#!/usr/bin/pythonimport errnoimport socketimport sysimport timeif len(sys.argv) < 2: print "Usage: %s port" % sys.argv[0] print "port should in net.ipv4.ip_local_port_range"else: port

2017-04-26 20:20:58 596

原创 <3>:阻塞IO的试验-echo程序

阻塞意味着会阻塞,而且可能永远阻塞, 看下echo的原型,每个线程一个客户端。 代码位置recipes/tpc/{echo.cc, echo_client.cc}测试服务端[root@bogon bin]# ./echo客户端[root@bogon bin]# ./echo_client localhost 1024(1024000,10240000,20488888(20M))可以观察到

2017-04-26 19:47:48 663

原创 <二>:网络编程需要关注的性能

需要注意的性能: 1. Bandwidth MB/S; netcat发的时候就是纯的TCP,没有什么payload,其他工具需要一些分包等等,测出来的带宽会比这小;千兆网的带宽大约117MB/S,这个可以看做是一个上限。 2. 吞吐量(应用层面) 1s能处理多少消息,多少查询,处理多少事务等 Throughput messages/s, queries/s(QPS), trans

2017-04-25 21:09:18 653

原创 <1>TCP带宽测试试验

测试1(dl1->node1(dl1发数据到node1):[david@dl1 ~]$ dd if=/dev/zero bs=1MB count=1000 | nc node1 5001#从/dev/zero中读1MB的数据向node1发送1000+0 records in1000+0 records out1000000000 bytes (1.0 GB) copied, 8.53014

2017-04-25 20:59:17 2046

原创 MKL链接选项问题

最近用下MKL,看了下文档,没看见MKL链接的选项。 关于MKL的链接选型,可以通过如下查看icc -help如下图 可知-mkl就行,至于头文件的话,可以去看MKL的文档,在源文件添加了,以上是icc/icpc的编译器,因此利用使用MKL的步骤如下 1. 源文件添加MKL相应的头文件 2. 编译:icc test.c -mkl(非cluster lib)至于gcc/g++要使用MKL,还需

2017-04-25 11:10:33 5771

转载 CUDA编程的错误处理

转载于CUDA编程的错误处理关于错误处理无论是基于CPU的编程还是基于GPU的编程,当我们调用了一个API运行程序产生了错误,就会导致程序运行结果有悖于理论结果,甚至导致程序崩溃。因此,错误的检测和错误的处理在编程中是极为重要的。当我们能够定位错误的原因,错误的纠正才能更快更准确。Linux C系统编程错误处理我们来回顾一下在Linux系统编程中的错误处理(基于CPU)。在Linux系统编程中,错误

2017-04-21 01:04:37 15138

转载 安装过程中出现PKG_CONFIG_PATH的问题解决方法

转载于安装过程中出现PKG_CONFIG_PATH的问题解决方法 简单实用,这才是好文章呀,在安装开源软件的过程中, 经常会碰到提示配置PKG_CONFIG_PATH路径, 或者直接提示没有安装某某库, 但是我们已经安装了啊。其实造成这种情况的原因很简单, 就是安装的目录不能被依赖程序找到。具体的原理可以网上搜索 configure, pkg-config , PKG_CONFIG_PATH这三者

2017-04-18 15:33:21 2798 1

原创 CUDA Pro Tip: Increase Performance with Vectorized Memory Access

#include <iostream> #include <cuda_runtime.h>#include <cuda_occupancy.h

2017-04-17 11:24:23 524

原创 两种调试死锁的方法

方法1:通过core文件调试死锁步骤: 1. ulimited -c unlimted(打开core,默认没有打开) 2. 运行./a.out(编译的时候加调试选项-g) 死锁阻塞,Ctrl+\ 产生core dump 3. gdb ./a.out core.xxx 4. thread apply all bt查看死锁位置 例子(待续…)#include <stdio.h>

2017-04-16 23:22:50 2004

原创 CUDA提供的函数评估Occupancy

#include <iostream> #include <cuda_runtime.h>#include <cuda_occupancy.h

2017-04-15 18:06:39 1426

转载 CUDA Pro Tip:Write Flexible Kernels with Grid-Stride Loops

见 CUDA Pro Tip:Write Flexible Kernels with Grid-Stride Loops

2017-04-15 16:12:22 649 1

转载 测试C++程序:使用Catch和Valgrind

1.引言最近写python用unittest模块做单元测试,才发现自己过去写C++居然都是手工测试。查了一番资料之后,发现Catch和Valgrind这两个工具可以很好地满足需求。测试C++程序时,我们通常会在意两件事:运行结果是否正确? 是否发生了内存泄漏? 第一件事所有编程语言都需要在意,通常是给程序各种输入,检验输出的正确性,Catch是一个轻巧的单元测试框架,学习起来非常容易; 第二件

2017-04-10 01:04:17 939

转载 vim折叠,分屏,标签切换以及跳转头文件

vim 一共有 5 种折叠方法,依次为手工折叠、缩进折叠、语法折叠、标记折叠、表达式折叠和根据标志折叠。可以通过变量 foldmethod 选择具体的折叠方式,常用的为 syntax 和 indent。分别为根据缩进折叠这根据语法折叠。缩进折叠适用于绝大数的编程语言,特别适用于Python,而对于 C 语言,vim 提供了很好的 syntax folding 支持。set foldmethod=sy

2017-04-04 10:52:29 3537

转载 C语言不定长消息-柔性数组

定义: 柔性数组:数组大小待定的数组。 C语言中结构体最后一个元素可以是大小未知的数组。 C语言可以由结构体产生柔性数组柔性数组的结构如何只能堆上生成 柔性数组是C99的扩展,简而言之就是一个在struct结构里的标识占位符(不占结构struct的空间)C语言柔性数组在游戏前后端交换的过程中,经常会用到变成的消息体,因为有的内容的大小是位置的,例如一条微博,微博的内容大小是未知的。一般的做法

2017-04-03 21:27:12 492 1

转载 boost noncopyable实现禁止类拷贝

最近使用boost noncopyable一点思考。 class noncopyable { protected: noncopyable() {} ~noncopyable() {} private: // emphasize the following members are private noncopyable( co

2017-03-22 15:54:43 489

原创 pthread_create传递线程参数需要注意的问题

程序如下void* thread_rountine(void *arg){ int *cnt = (int*)arg; for (int i=0; i<5; ++i) printf("%d-hello\n",*cnt); return 0;}int main(void){ pthread_t pid[2]; int ret; fo

2017-03-05 16:09:12 5348 2

转载 关于CPU Cache:程序猿需要知道的那些

为什么要有CPU Cache随着工艺的提升最近几十年CPU的频率不断提升,而受制于制造工艺和成本限制,目前计算机的内存主要是DRAM并且在访问速度上没有质的突破。因此,CPU的处理速度和内存的访问速度差距越来越大,甚至可以达到上万倍。这种情况下传统的CPU通过FSB直连内存的方式显然就会因为内存访问的等待,导致计算资源大量闲置,降低CPU整体吞吐量。同时又由于内存数据访问的热点集中性,在CPU和内存

2017-03-03 15:43:09 475

转载 用异或来交换两个变量是错误的

用异或来交换变量是错误的翻转一个字符串,例如把 “12345” 变成 “54321”,这是一个最简单的不过的编码任务,即便是 C 语言初学者的也能毫不费力地写出类似如下的代码:// 版本一,用中间变量交换两个数,好代码void reverse_by_swap(char* str, int n){ char* begin = str; char* end = str + n - 1; w

2017-02-11 17:23:22 1528

转载 vi/vim多行注释和取消注释

多行注释:进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来按大写字母I,再插入注释符,例如//按esc键就会全部注释了取消多行注释:进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列按字母j,或者k选中注释符号按d键就可全部取消注释转载于vi/

2017-02-09 20:36:03 330

转载 malloc、calloc、realloc的区别

(1)C语言跟内存分配方式<1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量. <2>在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.<3>从堆上分配,亦称动态

2017-02-09 09:28:51 261

转载 C和C++混合编译,extern"C"的用法

第一篇:转载于C和C++混合编译关于extern_C 通常,在C语言的头文件中经常可以看到类似下面这种形式的代码#ifdef __cplusplus extern "C" { #endif /**** some declaration or so *****/ #ifdef __cplusplus } #endif /* end of __cplusplus */

2017-02-05 14:22:00 22966 2

原创 Linux df和du的区别

1,两者区别 du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。 df,disk free,通过文件系统来快速获取空间大小的信息,当我们删除一个文件的时候,这个文件不是马上就在文件系统当中消失了,而是暂时消失了,当所有程序都不用时,才会根据OS的规则释放掉

2016-12-19 20:18:39 547

转载 巧用宏进行程序中的调试

转载的两篇是目前我见过很容易理解且也很详细的文章了转载巧用可变参数宏、编译器内置宏和printf输出调试信息前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了

2016-12-14 14:27:41 810

转载 条件编译#ifdef的用法

这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部 分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2

2016-12-14 13:55:15 1008

转载 malloc、calloc、realloc的区别

(1)C语言跟内存分配方式<1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量. <2>在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.<3>从堆上分配,亦称动态

2016-12-07 18:16:43 321

转载 c++中的set_new_handler和new_handler

详细可参考 《effective c++》第三版 条款49:了解new_handler的行为相关链接:http://blogold.chinaunix.net/u/3374/showart_1849816.html当operator new申请一个内存失败的时候,它会进行如下的处理步骤: 1、如果存在客户指定的处理函数,则调用处理函数(new_handler),如果不存在则抛出一个异常。2

2016-12-06 17:41:59 325

转载 #if #ifndef #if defined等

#if的使用说明 #if的后面接的是表达式 #if (MAX==10)||(MAX==20) code… #endif 它的作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去(注意:是编译进去,不是执行!!) #if defined的使用 #if后面接的是一个宏。 #if defined (x) …c

2016-12-06 17:15:28 532 1

原创 打印数字

打印数字 代码#include <iostream>#include <cstdlib>#include <cstring>#define MAX 1000using namespace std;/*打印7654,先打印7657,654*/void PrintDigital(int n){ if (n < 0) { printf("-");

2016-12-05 20:40:50 403

原创 选择问题

问题描述:选择一组N个数,选择其中最大的第K个数 解法1:线排序,后选择; 解法2:先读k个数并排序(递减),然后依次读取后面的数,与已排序的数组进行比较,若小则舍去,大则保留。 代码/*问题描述:一组N个数确定其中第K个最大者 */#include <iostream> using namespace std;/*success return 0, fail return -1*/

2016-12-05 20:25:16 283

原创 UNIX环境高级编程<六>: 标准I-O库

1.流和FILE对象之前对文件大的操作是针对文件描述符的针对流,而标准I/0库是针对流(stream)进行的,一个文件和一个流相关联。打开一个流时,标准I/O函数fopen返回一个指向FILE对象的指针(文件指针), 该结构包含了管理流所需的所有信息,包括文件描述符、指向缓冲区的指针、缓冲区的长度、当前缓冲区中的字符数以及出错标志等2. 缓冲标准I/O库提供缓冲的目的就是尽可能减少使用read和wr

2016-10-31 23:03:45 325

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除