CUDA学习(三)之使用GPU进行两个数相加
在CPU上定义两个数并赋值,然后使用GPU核函数将两个数相加并返回到CPU,在CPU上显示
#include "cuda_runtime.h"
#include "device_launch_parameters.h" #include <iomanip>
#include <iostream>
#include <stdio.h> using namespace std; //检测GPU
bool CheckCUDA(void){
int count = ;
int i = ; cudaGetDeviceCount(&count);
if (count == ) {
printf("找不到支持CUDA的设备!\n");
return false;
}
cudaDeviceProp prop;
for (i = ; i < count; i++) {
if (cudaGetDeviceProperties(&prop, i) == cudaSuccess) {
if (prop.major >= ) {
break;
}
}
}
if (i == count) {
printf("找不到支持CUDA的设备!\n");
return false;
}
cudaGetDeviceProperties(&prop, );
printf("GPU is: %s\n", prop.name);
cudaSetDevice();
printf("CUDA initialized success.\n");
return true;
} //使用指针相加
__global__ void addNumber(double a, double b, double *c); int main(){
//检测GPU
if (!CheckCUDA()){
cout << "No CUDA device.";
return ;
}
cout << "*************************************************************************************************************" << endl; double h_a, h_b, h_c; //在CPU上定义三个变量
double *d_c; //定义一个将指向GPU的指针 h_a = 2.2;
h_b = 3.3; cudaMalloc((void **)&d_c, sizeof(double)); //为指针在GPU上分配内存空间
//调用核函数并启用一个线程块和一个线程
addNumber<<<, >>>(h_a, h_b, d_c); //只是单独的两个数相加,不是两个数组相加,只需使用单线程,数组相加可以使用多线程
cudaMemcpy(&h_c, d_c, sizeof(double), cudaMemcpyDeviceToHost); //将GPU上计算好的结果返回到CPU上定义好的变量 //setw(10)表示输出10个空格,需添加 #include <iomanip>
cout << setw() << h_a << " + " << h_b << " = " << h_c << endl; cout << endl << endl;
system("pause");
return ;
} __global__ void addNumber(double a, double b, double *c){
*c = a + b;
}
显示结果如下

CUDA学习(三)之使用GPU进行两个数相加的更多相关文章
- 在O(N)时间内求解 正数数组中 两个数相加的 最大值
一,问题描述 给定一个正数数组arr(即数组元素全是正数),找出该数组中,两个元素相加的最大值,其中被加数的下标大于加数的下标.由加法运算的可逆性,j >i 这个条件可以去掉. 即求出: max ...
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
[002-Add Two Numbers (单链表表示的两个数相加)] 原题 You are given two linked lists representing two non-negative ...
- 牛客网2016.4.11(两个数相加为sum/计数一个int型的二进制有多少个1/二叉树是否左右对称)
求最小的两个数相加为sum //求最小的两个数相加为sum public ArrayList<Integer> FindNumbersWithSum(int [] array,int su ...
- 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)
题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...
- 【剑指offer学习】求和为定值的两个数(拓展)
接着上面一篇文章: http://blog.csdn.net/u013476464/article/details/40651451 接下来我们拓展一下题目,如果数组是乱序的,并且规定数组中的元素所有 ...
- 【LeetCode】两个数相加
[问题]给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. [实例] 输入: ...
- php不用第三个变量,交换两个数的值
//字符串版本 结合使用substr,strlen两个方法实现 $a="a"; $b="b"; echo '交换前 $a:'.$a.',$b:'.$b.'< ...
- Flex学习第一天(两个数相加)
<?xml version="1.0" encoding="utf-8"?><s:Application xmlns:fx="htt ...
- 剑指offer用位运算实现两个数相加,及python相关的位操作
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 代码: # -*- coding:utf-8 -*-class Solution: def Add(self ...
随机推荐
- Linux忘记root密码后如何在grub界面中以单用户模式进入系统并重置密码的方法
本文将介绍在Linux系统中忘记root用户密码的情况下,如何在gurb界面进入单用户模式并重置root用户密码.在单用户模式下,用户不需要输入任何密码即可进入系统并可以修改密码.实验步骤如下: 1. ...
- MVC 之集合类转化为DataTable
private static DataTable ToDataTableTow(IList list) { DataTable result = new DataTable(); if (list.C ...
- DRF框架中分页功能接口
目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPa ...
- 在Mac/linux上查找(并终止)进程锁定特定端口的几种方法
前言 无论是做网站还是做产品,经常使用到杀死某个进程的方法.制作脚本并熟悉运用是一个非常节省时间的方法. 基本命令 查找: [sudo] lsof -i :3000 杀戮 kill -9 方法一 ...
- Linux中的零拷贝
零拷贝 本文图片和一些内容均来自后面的参考,非原创只是把文章中的一些关键内容整理一下,算作是一个学习笔记. 传统的I/O操作 传统的IO操作是用户应用程序只是需要调用两个系统调用 read() 和 w ...
- 《提升能力,涨薪可待》—Java并发之Synchronized
Synchronized简介 线程安全是并发编程中的至关重要的,造成线程安全问题的主要原因: 临界资源, 存在共享数据 多线程共同操作共享数据 而Java关键字synchronized,为多线程场景下 ...
- input值
input里面的值为字符串(string)类型,所以用作数的计算的时候需要用Number(mInput.value)进行转换成数值Numbei()类型才可以计算 例如: mInput1.value + ...
- 恕我直言,牛逼哄哄的MongoDB你可能只会30%
MongoDB闪亮登场 自我介绍 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库 ...
- 干货!直击JVM底层 —— Java Class字节码文件解析
目录 前言 如何阅读class文件 基本概念 无符号数&表 常量池 魔数(magic number) & 版本号 常量池 访问标志 类引索&父类引索&接口引索集合 字段 ...
- APP开通支付宝支付 转账功能
注意:支付宝单笔转账到账户功能的准入条件 首先要在商家中心注册,从商家中心可以跳转到开放平台. 登陆蚂蚁金服开放平台 1 开发中心->网页&移动应用 2 根据需求选择应用类型创建应用 3 ...