2012年3月21日
摘要: C++所有WM消息总览表windows消息WM_ WM_NULL = $0000;WM_CREATE = $0001;应用程序创建一个窗口 WM_DESTROY = $0002;一个窗口被销毁 WM_MOVE = $0003;移动一个窗口 WM_SIZE = $0005;改变一个窗口的大小 WM_ACTIVATE = $0006;一个窗口被激活或失去激活状态; WM_SETFOCUS = $0007;获得焦点后 WM_KILLFOCUS = $0008;失去焦点 WM_ENABLE = $000A;改变enable状态 WM_SETREDRAW = $000B;设置窗口是否能重画 WM_SET 阅读全文
posted @ 2012-03-21 14:26 carekee 阅读(5228) 评论(0) 推荐(0) 编辑
摘要: hwnd 32位的窗口句柄。窗口可以是任何类型的屏幕对象,因为Win32能够维护大多数可视对象的句柄(窗口、对话框、按钮、编辑框等)。message 用于区别其他消息的常量值,这些常量可以是Windows单元中预定义的常量,也可以是自定义的常量。wParam 通常是一个与消息有关的常量值,也可能是窗口或控件的句柄。lParam 通常是一个指向内存中数据的指针。由于WParam、lParam和Pointer都是32位的,因此,它们之间可以相互转换。WM_NULL =$0000 //WM_CREATE =$0001 //应用程序创建一个窗口WM_DESTROY = $0002 //一个窗口被销毁. 阅读全文
posted @ 2012-03-21 14:24 carekee 阅读(3952) 评论(0) 推荐(0) 编辑
摘要: 从窗口中的按钮发送消息。按钮会从WM_COMMAND消息的参数中,获取到发送的消息IDC_BEGIN :要接收消息的按钮IDBN_CLICKED: 单击消息,也可以是双击消息或者其它的消息LPARAM: 要接收消息按钮ID句柄[c-sharp] view plaincopyprint?PostMessage(WM_COMMAND,MAKELONG(IDC_BEGIN,BN_CLICKED),(LPARAM)(GetDlgItem(IDC_BEGIN)->GetSafeHwnd()));在重载CButton的DLL中,可以这样做::PostMessage(this->GetParen 阅读全文
posted @ 2012-03-21 14:22 carekee 阅读(1210) 评论(0) 推荐(0) 编辑
摘要: ReductionsReduction算法使用二元操作将输入序列规约为一个单值。例如,需要获得一数列的和,可以通过加运算规约此数组得到。相似的,数列的最大值,可以通过由两个输入值返回一个最大值的运算子规约得到。数列的求和的规约操作可以由thrust::reduce如下实现:[cpp] view plaincopyprint?intsum=thrust::reduce(D.begin(),D.end(),(int)0,thrust::plus<int>());int sum = thrust :: reduce (D. begin () , D. end () , ( int ) 0 阅读全文
posted @ 2012-03-21 11:25 carekee 阅读(2747) 评论(0) 推荐(0) 编辑
摘要: CUDA 4.0 已经发布了RC版本,处于网友与新人的要求,我讲解下如何配置环境与工程的问题。要完整的使用CUDA 4.0功能与开发工具,建议使用windows 7 64bit或者windows 2008 R2 64bit系统。我的电脑是win7。首先登陆到NVIDIA的开发者页面下载最新的驱动、toolkit、SDK与新增的tools SDK安装文件。首先安装驱动需要注意的是在安装过程中建议勾选"Perform a clean installtion"。下面安装toolkit完了之后就是SDK在CUDA 4.0 NV增加了一个tools SDK,最好也安装下吧,反正不大~ 阅读全文
posted @ 2012-03-21 11:24 carekee 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 谨以此文想给那些被Linux搞得折翼的小盆友们,当然还有我自己……首先下载驱动,toolkit 还有SDK……安装前确认这些文件都是可执行的,如果不是运行以下命令:sudo chmod a+x [文件名]然后是安装驱动的问题,估计很多人十分头疼……按下Ctrl加Alt加F1进入纯命令模式,登陆后运行以下命令关闭Gnomesudo /etc/init.d/gdm -stop然后运行驱动安装文件需要加上sudo,基本按回车就好。安装完毕后运行以下命令打开Gnomesudo /etc/init.d/gdm -start按下Ctrl加Alt加F7回到GUI下面安装SDK,依然需要root权限,记得加上 阅读全文
posted @ 2012-03-21 11:24 carekee 阅读(186) 评论(0) 推荐(0) 编辑
摘要: Thrust提供了丰富的常用并行算法。这算法的功能与STL中的非常相似,于是我们使用了相同的名称(例如thrust::sort 与 std::sort)。所有的Thrust算法均提供了主机端和设备端。特别指出,当转入主机端迭代器时,将会调度主机端方法,相似的,当使用设备端迭代器时将使用设备端实现。trust::copy是一个例外,他可以任意的拷贝主机端和设备端的数据。但是所有的迭代器参数必须符合算法的要求,要与之对应。当不能满足要求的时候,编译器会报错。TransformationsTransformations算法作用是用来将目标容器赋上特定值(例如零)或者特定数列。之前的例子我们已经使用过 阅读全文
posted @ 2012-03-21 11:24 carekee 阅读(3406) 评论(0) 推荐(0) 编辑
摘要: Trust 提供了两个vector容器:host_vector 与 device_vector。按照命名规则,host_vector位于主机端,device_vector位于GPU设备端。Trust的vector容器与STL中的容器类似,是通用的容器,可以存储任何数据类型,可以动态调整大小。以下源代码展示如何使用Thrust的vector容器。[cpp] view plaincopyprint?#include<thrust/host_vector.h> #include<thrust/device_vector.h> #include<iostream> 阅读全文
posted @ 2012-03-21 11:23 carekee 阅读(5750) 评论(0) 推荐(1) 编辑
摘要: 在这节中我们曾使用了这样的表达式,H.begin() 、H.end()、D.begin() + 7。begin()与end()的返回值在C++中被称为迭代器。vector的迭代器类似于数组的指针,用于指向数组的某个元素。H.begin()是指向H容器中数组第一个元素的迭代器。类似,H.end()指向H容器中的最后一个元素。 虽然说迭代器类似于指针,但它有着更丰富的作用。可以注意到在使用thrust::fill的时候我们并不需要指明这是device_vector的迭代器。这些信息包含在了D.begin()的返回值的迭代器类型中,其类型不同于H.begin()的返回值。当Thrust中的函数调用时 阅读全文
posted @ 2012-03-21 11:23 carekee 阅读(1471) 评论(0) 推荐(1) 编辑
摘要: 在CUDA新版中内置了对Visual Studio 2010的支持,而且测试发现nvcc竟然对vs100编译器也给予了支持。这点在官方的简介中并没有提及。下面来看下如何在VS2010中正确配置新建一个CUDA项目。首先在正常安装CUDA toolkit和SDK后,会自动配置好IDE。如果没有可以在Toolkit的安装目录下找到下面的这些文件。 将MsBuildExtension 文件夹下的所有文件拷贝至 C:/Program Files/MSBuild/Microsoft.Cpp/v4.0/BuildCustomizations (C:/Program Files (x86)/MSBuild/ 阅读全文
posted @ 2012-03-21 11:22 carekee 阅读(633) 评论(0) 推荐(0) 编辑
摘要: Thrust 是一个类似于STL的针对CUDA的C++模板库。Trust提供与CUDA C完全兼容的接口,可以使我们高效地编写高性能并行程序。Thrust提供了丰富的数据并行算法,例如scan、sort、reduce等,可以简单快捷地构成复杂算法,并使得代码获得更高的可读性。使用这些高度抽象的方法来表达计算,可以隐藏细节,并且Trust会自动选择最有效率的算法实现。因此,程序员得以快速构建CUDA程序,并能够获得极高的稳定性和性能与精度。此文档简述了如何使用Trust开发CUDA程序。即使你的C++与CUDA经验有限,也能够顺利学习该指导。安装与版本在安装CUDA Toolkit时,Trust 阅读全文
posted @ 2012-03-21 11:22 carekee 阅读(1013) 评论(0) 推荐(0) 编辑
摘要: 近日,CUDA 4.0已经对注册开发者开放,其中增加了不少的功能。其中P2P(Peer-to-Peer )与UVA(UnifiedVirtual Address Space )的引进最为大家关心。这里与大家一起分享下SDK中的simpleP2P这个例子,他展示了如何使用这两个功能。 代码如下: [cpp] view plaincopyprint?/**Copyright1993-2011NVIDIACorporation.Allrightsreserved.**PleaserefertotheNVIDIAenduserlicenseagreement(EULA)associated*witht 阅读全文
posted @ 2012-03-21 11:21 carekee 阅读(1874) 评论(0) 推荐(0) 编辑
摘要: 前几天写一个DirectUIDraw部分, 有一段编码的思路是这样的: 为了防止闪烁采用双缓存后hMemDC, 为了方便绘制png图标, 采用GDI+, 简单的绘制都是GDI绘制的, 为了更有效利用hMemDC, 每次生成hMemDC生成的位图是Clipbox大小的, 在SetViewportorgex调整视窗坐标, 在绘制对象过程中, 通过RectVisible判断是否可进行绘制, 开始用用bmp皮肤的时候(此时没有必要使用GDI+) 绘制效率很高, 而且没有任何bug, 但采用了GDI+之后, 总是有绘制不到的地方, 尤其是反复invalidaterect效果更差, 后来发现问题出现的原因 阅读全文
posted @ 2012-03-21 09:25 carekee 阅读(899) 评论(0) 推荐(0) 编辑