cuda编程---cuda硬件信息与错误处置

2023-11-24 10:58

本文主要是介绍cuda编程---cuda硬件信息与错误处置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、硬件信息查询:
#include <stdio.h>int main() {int nDevices;cudaGetDeviceCount(&nDevices);for (int i=0; i < nDevices; i++) {cudaDeviceProp prop;cudaGetDeviceProperties(&prop, i);printf("Device Number: %d\n", i);printf("  Device name: %s\n", prop.name);printf("  Memory Clock Rate (KHz): %d\n",prop.memoryClockRate);printf("  Memory Bus Width (bits): %d\n",prop.memoryBusWidth);printf("  Peak Memory Bandwidth (GB/s): %f\n\n",2.0*prop.memoryClockRate*(prop.memoryBusWidth/8)/1.0e6);}return 0;
}
二、错误处置:

1、代码段一:

#include <stdio.h>int main() {int nDevices;cudaError_t err = cudaGetDeviceCount(&nDevices);if (err != cudaSuccess) printf("%s\n", cudaGetErrorString(err));for (int i=0; i < nDevices; i++) {cudaDeviceProp prop;cudaGetDeviceProperties(&prop, i);printf("Device Number: %d\n", i);printf("  Device name: %s\n", prop.name);printf("  Memory Clock Rate (KHz): %d\n",prop.memoryClockRate);printf("  Memory Bus Width (bits): %d\n",prop.memoryBusWidth);printf("  Peak Memory Bandwidth (GB/s): %f\n\n",2.0*prop.memoryClockRate*(prop.memoryBusWidth/8)/1.0e6);}return 0;
}

这段代码在下面处有改变:
cudaError_t err = cudaGetDeviceCount(&nDevices);
if (err != cudaSuccess)
printf("%s\n", cudaGetErrorString(err));

2、代码段二:

#include <iostream>
#include <math.h>
#include <stdio.h>__global__
void saxpy(int n,float a,float *x,float *y)
{int i = blockIdx.x*blockDim.x +threadIdx.x;if (i < n) y[i] = a*x[i] + y[i];
}int main(void){int N = 1 << 20; //1M element.//float *x=new float[N];//float *y=new float[N];//Allocate Unified Memory -- accessible from CPU or GPUfloat *x, *y, *d_x, *d_y;x = (float*)malloc(N*sizeof(float));y = (float*)malloc(N*sizeof(float));cudaMalloc(&d_x, N*sizeof(float));cudaMalloc(&d_y, N*sizeof(float));//initialize x and y arrays on the host.for (int i=0;i<N;i++){x[i]=1.0f;y[i]=2.0f;}cudaEvent_t start, stop;cudaEventCreate(&start);cudaEventCreate(&stop);cudaMemcpy(d_x, x, N*sizeof(float), cudaMemcpyHostToDevice);cudaMemcpy(d_y, y, N*sizeof(float), cudaMemcpyHostToDevice);cudaEventRecord(start);saxpy<<< (N+255)/256, 256>>>(N, 2.0, d_x, d_y);cudaError_t errSync = cudaGetLastError();cudaError_t errAsync = cudaDeviceSynchronize();if (errSync != cudaSuccess)printf("Sync kernel error: %s\n", cudaGetErrorString(errSync));if (errAsync != cudaSuccess)printf("Async kernel error: %s\n",cudaGetErrorString(errAsync));cudaEventRecord(stop);cudaMemcpy(y, d_y, N*sizeof(float), cudaMemcpyDeviceToHost);cudaEventSynchronize(stop);float milliseconds = 0;cudaEventElapsedTime(&milliseconds, start, stop);// Check for errors (all values should be 3.0f)float maxError=0.0f;for (int i=0;i<N;i++)maxError=max(maxError,fabs(y[i]-4.0f));printf("Max error: %f . \n", maxError);printf("Effective Bandwidth (GB/s): %f .\n", N*4*3/milliseconds/1e6);cudaFree(x);cudaFree(y);cudaFree(d_x);cudaFree(d_y);cudaEventDestroy(start);cudaEventDestroy(stop);return 0;
}

这篇关于cuda编程---cuda硬件信息与错误处置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/421800

相关文章

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

解决java.util.RandomAccessSubList cannot be cast to java.util.ArrayList错误的问题

《解决java.util.RandomAccessSubListcannotbecasttojava.util.ArrayList错误的问题》当你尝试将RandomAccessSubList... 目录Java.util.RandomAccessSubList cannot be cast to java.

Java编译错误java.lang.NoSuchFieldError的解决方案详析

《Java编译错误java.lang.NoSuchFieldError的解决方案详析》java.lang.NoSuchFieldError是Java中的一种运行时错误,:本文主要介绍Java编译错... 目录前言解决方案1. 统一JDK版本环境2. 优化maven-compiler-plugin配置3. 清

Navicat连接Mysql8.0.11出现1251错误的解决方案

《Navicat连接Mysql8.0.11出现1251错误的解决方案》在重装电脑并安装最新版MySQL后,Navicat和Sqlyog连接MySQL时遇到的1251和2058错误,通过将MySQL用户... 目录Navicat连接mysql8.0.11出现1251错误原因分析解决问题方法有两种总结Navic

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转