利用cuda的cublas库,编写复数矩阵乘的代码

学习内容:

利用cuda的cublas库,编写复数矩阵乘的代码

学习产出:

编写代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>
#include <cublas_v2.h>
#include <random>// 设置随机种子。为了每次运行都得到相同的随机数,可以使用固定的值。
// 如果你想每次运行都得到不同的随机数,可以使用当前时间作为种子,例如 std::time(nullptr)。
// 创建一个分布对象,用于定义随机数的范围-10 到 10
unsigned seed = 100; 
std::mt19937 generator(seed);
std::uniform_real_distribution<float> distribution(-10.0f, 10.0f);// 辅助函数:生成随机复数
cuComplex getRandomComplex() {float real = distribution(generator);float imag = distribution(generator);return make_cuComplex(real, imag);
}// 初始化复数矩阵
void initComplexMatrix(cuComplex *data, int size) {for (int i = 0; i < size; ++i) {data[i] = getRandomComplex();}
}// 打印复数矩阵
void printComplexMatrix(const cuComplex *data, int rows, int cols) {for (int i = 0; i < rows; ++i) {for (int j = 0; j < cols; ++j) {printf("(%f, %f) ", data[i * cols + j].x, data[i * cols + j].y);}printf("\n");}
}int main(int argc, char **argv) {// 矩阵大小int M = 2; // A的行数int N = 2; // B的列数int K = 2; // A的列数/B的行数// 分配host侧内存cuComplex *h_A = (cuComplex *)malloc(M * K * sizeof(cuComplex));cuComplex *h_B = (cuComplex *)malloc(K * N * sizeof(cuComplex));cuComplex *h_C = (cuComplex *)malloc(M * N * sizeof(cuComplex));// 随机初始化矩阵A和BinitComplexMatrix(h_A, M * K);initComplexMatrix(h_B, K * N);// 打印矩阵Aprintf("h_A:\n");printComplexMatrix(h_A, M, K);// 打印矩阵Bprintf("h_B:\n");printComplexMatrix(h_B, K, N);// 分配device侧内存cuComplex *d_A, *d_B, *d_C;cudaMalloc((void **)&d_A, M * K * sizeof(cuComplex));cudaMalloc((void **)&d_B, K * N * sizeof(cuComplex));cudaMalloc((void **)&d_C, M * N * sizeof(cuComplex));// 将数据从host传输到devicecudaMemcpy(d_A, h_A, M * K * sizeof(cuComplex), cudaMemcpyHostToDevice);cudaMemcpy(d_B, h_B, K * N * sizeof(cuComplex), cudaMemcpyHostToDevice);// 创建cuBLAS句柄cublasHandle_t handle;cublasCreate(&handle);// 设置矩阵乘法的参数const cuComplex alpha = make_cuComplex(1.0f, 0.0f); // 缩放因子const cuComplex beta = make_cuComplex(0.0f, 0.0f);  // 累加因子// 执行复数矩阵乘法 C = alpha * A * B + beta * CcublasCgemm(handle, CUBLAS_OP_N, CUBLAS_OP_N, M, N, K, &alpha, d_A, M, d_B, K, &beta, d_C, M);// 将结果从device传输到hostcudaMemcpy(h_C, d_C, M * N * sizeof(cuComplex), cudaMemcpyDeviceToHost);// 打印结果矩阵Cprintf("h_C:\n");printComplexMatrix(h_C, M, N);// 释放内存和cuBLAS句柄cudaFree(d_A);cudaFree(d_B);cudaFree(d_C);free(h_A);free(h_B);free(h_C);cublasDestroy(handle);return 0;
}

利用nvcc进行编译:

nvcc -arch=sm_61 demo_v2.cu -o demo_v2 -lcublas

执行:

.\demo_v2.exe

得到如下结果:

h_A:
(0.868099, 3.423113) (-4.432612, -1.759072)
(-1.509648, 0.527649) (6.895523, -7.027903)
h_B:
(-9.905622, -6.865778) (-7.568618, -6.270657)
(3.414982, -5.797845) (6.517056, -0.945202)
h_C:
(29.637926, -34.395329) (-64.428764, 57.810093)
(13.471494, 11.522404) (12.959600, -32.626499)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【力扣】从前序与中序遍历序列构造二叉树

&#x1f525;博客主页&#xff1a; 我要成为C领域大神 &#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于分享知识&#xff0c;欢迎大家共同学习和交流。 给定两个整数数…

如何解决app广告填充率低、广告填充异常,提升广告变现收益?

APP广告变现有助于开发者获得持续的收益来源&#xff0c;由于广告链路的封闭性和复杂化&#xff0c;一旦出现请求配置参数错误、返回广告源信息缺失、素材被拦截等异常&#xff0c;大部分开发者很难及时查清异常情况&#xff0c;导致广告填充率不理想&#xff0c;甚至填充率常常…

【云服务-2】云服务器

弹性云服务器和服务器组的区别&#xff1f; 弹性云服务器和服务器组在云计算环境中有以下区别: 弹性云服务器(Elastic Cloud Server, ECS): 弹性云服务器是独立的虚拟机实例,可以独立启动、停止和管理。 弹性云服务器作为一个独立的计算资源运行,可以根据业务需求进行灵活扩展…

【Linux】linux系统VIM简介_使用

1、简介 1.1定义 VIM&#xff08;Vi IMproved&#xff09;是 Vi 编辑器的增强版本&#xff0c;提供了更多的功能和改进的用户界面。它被广泛认为是程序员的编辑器首选之一&#xff0c;特别适用于代码编辑和文本处理。VIM 拥有多种模式&#xff0c;每种模式都有其特定的功能和…

ImportError: No module named createrepo

我在用createrepo命令创建本地源时&#xff0c;出现如下&#xff1a; ImportError: No module named createrepo原因估计就是之前升级python2.6为2.7时导致&#xff08;系统为centos7&#xff09;&#xff0c;看网上很多说&#xff0c; 修改/usr/share/createrepo/genpkgmeta…

大咖共话|智领未来,数字化革新生命健康产业

在数字化浪潮席卷全球的今天&#xff0c;生命健康产业正迎来前所未有的发展机遇。6月20日&#xff0c;“第三届滨海中关村协同创新发展交流会”在北京隆重举办&#xff0c;唯迈医疗与业界大咖齐聚一堂&#xff0c;在“数字化赋能驱动生命健康产业发展”圆桌论坛上&#xff0c;共…

【PostgreSQL】AUTO_EXPLAIN - 慢速查询的日志执行计划

本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。 一、介绍 在本文中&#xff0c;我们将了解 PostgreSQL AUTO_EXPLAIN功能的工作原理&#xff0c;以及为什么应该使用它来收集在生产系统…

(1985-2022年)各省、地级市数字经济专利数据 整理

数字经济专利数量是衡量一个国家或地区在数字经济领域创新能力和技术发展水平的重要指标。这些专利通常与数字技术、互联网、大数据分析、云计算、人工智能&#xff08;AI&#xff09;、区块链、物联网&#xff08;IoT&#xff09;等创新成果相关。数字经济专利的增长不仅反映了…

[JS]函数

介绍 函数就是用来执行特点任务的代码块, 目的是实现代码复用, 提高开发效率 使用 1.0函数的声明 function 函数名 () {//函数体 } 2.0函数的调用 3.0命名规范 和变量命名规则基本一致尽量小驼峰式命名前缀应该为动词 传参 函数的参数可以极大提高函数的灵活性 1.0参数…

【React】变量 useState

开发需要&#xff0c;随便学学react。上手第一天&#xff0c;感觉这个JS语法很怪&#xff0c;没有什么逻辑性&#xff0c;比较抽象。随便写写笔记。 跟着网上找的项目写写感觉这个项目还不错&#xff1a; 分享给码友 https://zh-hans.react.dev/learn/tutorial-tic-tac-toe 参…

PEI转染试剂哪个品牌好用?

在做细胞转染实验时&#xff0c;经常会有这样的疑问&#xff0c;我们应该选择PEI转染试剂还是脂质体转染试剂&#xff1f;PEI转染试剂哪个品牌好用?在了解这个问题之前&#xff0c;我们先看看细胞转染的背景。 近年来&#xff0c;随着许多与疾病和细胞过程相关的基因被确定为…

等保测评是什么?等保方案怎么做?

等保测评&#xff0c;全称为网络安全等级保护测评&#xff0c;是依据国家相关标准对信息系统进行安全性评估和测试&#xff0c;以确保其符合国家等级保护要求的一种活动。这项测评工作对于保障信息系统安全至关重要&#xff0c;尤其是在当前网络安全威胁日益严峻的背景下。下面…

内存问题调优-GC

1. 排查元空间内存溢出 &#xff1a; 在JVM中配置 -verbose:class 打印类加载信息。 什么条件触发GC-CMS为例 1. eden区满了&#xff1f;会不会触发GC&#xff1f; eden区满触发YGC&#xff0c;FGC会出发全代回收&#xff0c;即Eden区也会被回收2. 老年代满了会不会触发GC&a…

代码随想录训练营Day45

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、打家劫舍二、打家劫舍2三、打家劫舍3 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 今天是跟着代码随想录刷题的第45天&#xff…

XX公司-JAVA笔试题

一、单选题 某单位的会议室有5排共40个座位&#xff0c;每排座位数相同。小张和小李随机入座&#xff0c;则他们坐在同一排的概率&#xff08;&#xff09;。 A、不高于 15% B、高于 15%但低于 20% C、正好为 20% D、高于 20% 先让小张随机入座&#xff0c;有40个座位可选&…

【大数据 复习】第9章 数据仓库分析工具Hive

一、概念 1.概述 &#xff08;1&#xff09;Hive是一个构建于Hadoop顶层的数据仓库工具。 &#xff08;2&#xff09;某种程度上可以看作是用户编程接口&#xff0c;本身不存储和处理数据。 &#xff08;3&#xff09;依赖分布式文件系统HDFS存储数据。 &#xff08;4&#xf…

python - 变量和字符串

一.变量 变量名就像我们现实社会的名字&#xff0c;把一个值赋值给一个名字时&#xff0c;Ta会存储在内存中&#xff0c;称之为变量&#xff08;variable&#xff09;&#xff0c;在大多数语言中&#xff0c;都把这种行为称为“给变量赋值”或“把值存储在变量中”。 •不过P…

赋能行业数字化转型——家居建材信息API合集

家居建材信息API的核心原理在于利用互联网技术&#xff0c;通过预先定义的接口规范&#xff0c;实现家居建材信息的共享与交互。API作为连接数据源和应用程序的桥梁&#xff0c;能够接收请求并返回相应的数据。 家居建材信息API具有以下几个方面特点&#xff1a; 数据标准化&…

快手可灵:上线图生视频和视频续写

上次介绍的快手的 Kling 大模型上线了新功能&#xff0c;其中图生视频支持将静态图像转化为生动的 5 秒视频&#xff0c;运动幅度比 Luma 低&#xff0c;但是非常稳定。视频续写则支持单次让视频运动延续 4.5 秒&#xff0c;支持连续多次的续写&#xff0c;最长可生成 3 分钟的…

族乐智能零火转单火套件零火智能开关单火模块零线生成器

族乐智能零火转单火套件零火智能开关单火模块零线生成器 史新华 族乐智能零火转单火套件&#xff0c;如同一位巧手匠人&#xff0c;将传统的零火智能开关巧妙地转化为更为灵活的单火模式。这款套件不仅体现了现代科技的精妙之处&#xff0c;更展现了对传统技术的深情致敬与巧…