首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用CUDA的GPU设备和零拷贝固定存储器

使用CUDA的GPU设备和零拷贝固定存储器
EN

Stack Overflow用户
提问于 2012-09-19 04:16:57
回答 1查看 748关注 0票数 0

我正在使用CUSP库在CUDA机器上进行稀疏矩阵乘法.我目前的代码是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <cusp/coo_matrix.h>
#include <cusp/multiply.h>
#include <cusp/print.h>
#include <cusp/transpose.h>
#include<stdio.h>
#define CATAGORY_PER_SCAN 1000
#define TOTAL_CATAGORY 100000
#define MAX_SIZE 1000000
#define ELEMENTS_PER_CATAGORY 10000 
#define ELEMENTS_PER_TEST_CATAGORY 1000
#define INPUT_VECTOR 1000
#define TOTAL_ELEMENTS ELEMENTS_PER_CATAGORY * CATAGORY_PER_SCAN
#define TOTAL_TEST_ELEMENTS ELEMENTS_PER_TEST_CATAGORY * INPUT_VECTOR
int main(void)
{
    cudaEvent_t start, stop;
    cudaEventCreate(&start);
    cudaEventCreate(&stop);
    cudaEventRecord(start, 0);
    cusp::coo_matrix<long long int, double, cusp::host_memory> A(CATAGORY_PER_SCAN,MAX_SIZE,TOTAL_ELEMENTS);
    cusp::coo_matrix<long long int, double, cusp::host_memory> B(MAX_SIZE,INPUT_VECTOR,TOTAL_TEST_ELEMENTS);

    for(int i=0; i< ELEMENTS_PER_TEST_CATAGORY;i++){    
        for(int j = 0;j< INPUT_VECTOR ; j++){
            int index = i * INPUT_VECTOR + j ;
            B.row_indices[index] = i; B.column_indices[ index ] = j; B.values[index ] = i;
        }    
    }
    for(int i = 0;i < CATAGORY_PER_SCAN;  i++){
        for(int j=0; j< ELEMENTS_PER_CATAGORY;j++){     
            int index = i * ELEMENTS_PER_CATAGORY + j ;
            A.row_indices[index] = i; A.column_indices[ index ] = j; A.values[index ] = i;
        }    
    }
    /*cusp::print(A);
    cusp::print(B); */
    //test vector
    cusp::coo_matrix<long int, double, cusp::device_memory> A_d = A;
    cusp::coo_matrix<long int, double, cusp::device_memory> B_d = B;

        // allocate output vector
    cusp::coo_matrix<int, double, cusp::device_memory>  y_d(CATAGORY_PER_SCAN, INPUT_VECTOR ,CATAGORY_PER_SCAN * INPUT_VECTOR);
    cusp::multiply(A_d, B_d, y_d);
    cusp::coo_matrix<int, double, cusp::host_memory> y=y_d;
    cudaEventRecord(stop, 0);
    cudaEventSynchronize(stop);
    float elapsedTime;
    cudaEventElapsedTime(&elapsedTime, start, stop); // that's our time!
    printf("time elaplsed %f ms\n",elapsedTime);
    return 0;
}

提示::乘法功能只使用1个GPU (据我理解)。

  1. 如何使用setDevice()在两个GPU上运行相同的程序(每个GPU一个点::相乘)。
  2. 准确地测量总时间。
  3. 如何在这个库中使用零拷贝固定内存,就像我自己可以使用malloc一样。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-19 07:44:18

1如何使用setDevice()在两个GPU上运行相同的程序

如果您的意思是“如何使用两个GPU执行单个cusp::multiply操作”,答案是您不能。

编辑:

对于希望在不同GPU上运行两个单独的CUSP稀疏矩阵矩阵产品的情况,可以简单地将操作封装在一个循环中,并在传输和cudaSetDevice调用之前调用cusp::multiply。但是,这样做可能不会加快速度。我认为我说得对,内存传输和cusp::multiply操作都是阻塞调用的,所以主机CPU会暂停,直到它们完成为止。因此,对不同GPU的调用不能重叠,在单个GPU上执行同一操作两次不会加快速度。如果您愿意使用多线程应用程序,并且有一个具有多个核的主机CPU,那么您可能仍然可以并行运行它们,但它不会像您所期望的那样简单。

2准确测量总时间。

您现在拥有的cuda_event方法是度量单个内核执行时间的最精确方法。如果您有一个简单的多GPU方案,那么来自每个GPU上下文的事件之和将是内核的总执行时间。如果总时间是指完成操作的“挂钟”时间,那么您需要在代码的整个multigpu段周围使用主机计时器。我隐约记得,在CUDA的最新版本中,在某些情况下可能会在不同上下文的流中同步事件,因此基于CUDA事件的计时器在这种情况下仍然可以使用。

如何在这个库中使用零拷贝固定内存,就像我自己可以使用malloc一样。

据我所知,这是不可能的。底层推力库CUSP可以支持使用零拷贝内存的容器,但是CUSP不公开标准矩阵构造函数中的必要机制,以便能够在零拷贝内存中分配CUSP稀疏矩阵。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12494527

复制
相关文章
直传文件到Azure Storage的Blob服务中
题记:为了庆祝获得微信公众号赞赏功能,忙里抽闲分享一下最近工作的一点心得:如何直接从浏览器中上传文件到Azure Storage的Blob服务中。 为什么 如果你的Web应用程序利用了云存储(比如Az
逸鹏
2018/04/10
2.3K0
直传文件到Azure Storage的Blob服务中
.NET Core 批量重置 Azure Blob Storage 的 mime type
我的博客使用 Azure Blob Storage 存储文章配图,结果今天玩 Azure CDN 的时候爆了,原因是图片mime type不对。我们来看看如何在 .NET Core 里批量重置 Azure Blob Storage 中文件的mime type吧。
Edi Wang
2019/07/09
9020
.NET Core 批量重置 Azure Blob Storage 的 mime type
【壹刊】Azure Data Box
  最近博主又要面临考试了,随笔又再次缓慢更新,说起考试,之前在微软的 ms learn的课程上有接触到一个叫 Azure Data Box的,刚好今天也花了一个多小时看了一下相关文档,下面就正式开始介绍今天的主要内容 -----Azure Data Box
老张的哲学
2022/04/11
2930
【壹刊】Azure Data Box
MySQL 中Blob类型数据的插入和读取
​ 我们在操作数据存入blob数据的类型,常用来存储头像图片等流数据,blob类型如果想要存储比较大的流文件的数据,建议选用longBlob的数据类型,Demo中的数据就简单的示范了一下,sql文件如下:
Dream城堡
2019/05/24
9.6K0
基于data.table的“tidyverse”?
tidyverse作为R语言数据分析中的瑞士军刀,非常好用,一个小小的缺点就是速度慢,data.table速度快,所以他们团队又开发了dtplyr,加快运行速度。
医学和生信笔记
2022/11/15
4640
基于data.table的“tidyverse”?
【数据湖】Azure 数据湖分析(Azure Data Lake Analytics )概述
在本文中,我们将探索 Azure 数据湖分析并使用 U-SQL 查询数据。 Azure 数据湖分析 (ADLA) 简介 Microsoft Azure 平台支持 Hadoop、HDInsight、数据湖等大数据。通常,传统数据仓库存储来自各种数据源的数据,将数据转换为单一格式并进行分析以做出决策。开发人员使用可能需要更长时间进行数据检索的复杂查询。组织正在增加他们在云基础架构中的足迹。它利用了云基础设施仓库解决方案,例如 Amazon RedShift、Azure Synapse Analytics(A
架构师研究会
2022/03/08
1.1K0
关于data.table中i, j, by都为数字的理解
本期还是由村长来为大家供稿,这期讲一个村长遇到的关于data.table比较有趣的问题,希望大家支持!!
用户7652506
2020/10/23
1.3K0
关于data.table中i, j, by都为数字的理解
Ajax文件上传时:Formdata、File、Blob的关系
“Formdata”接口提供了一种表示表单数据的键值对 key/value 的构造方式,并且可以轻松的将数据通过XMLHttpRequest.send() 方法发送出去。
房东的狗丶
2023/02/17
3.2K0
PG中的blob cleanup
PG提供了一个很好的BLOB接口,得到了广泛应用。然而最近我们遇到了各种客户遇到的问题,有必要对PG如何处理blob进行一次思考,尤其是BLOB清理。
yzsDBA
2021/01/05
1.5K0
深入理解xhr的responseType中blob和arrayBuffer
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/78232485
空空云
2018/09/27
3.2K0
支持alter table move 的数据类型 :raw blob clob
结论: 支持alter table move 的数据类型 :raw blob clob  不支持的数据类型 :long 和 long raw 实践是检验真理的最佳方法! 测试过程 1.测试raw和blob类型 SQL> create table t_move (id raw(16),btype blob) tablespace users; Table created. SQL> insert into t_move values ('411FC4193
吹水老王
2022/05/17
6540
jquery中的 $.data() 和 $dom.data() 区别
其中 dataUser 是一个Data() 对象,Data对象没有任何特殊的地方。
用户7293182
2022/01/17
6440
jquery中的 $.data() 和 $dom.data() 区别
ADF 第三篇:Integration runtime和 Linked Service
Integration runtime(IR) 是Azure 数据工厂在不同的网络环境中进行数据集成的组件,用于几个环境中:
huofo
2022/03/18
1.5K0
ADF 第三篇:Integration runtime和 Linked Service
Shell中的管道
管道 管道,从一头进去,从另一头出来。 在Shell中,管道将一个程序的标准输出作为另一个程序的标准输入,就像用一根管子将一个程序的输出连接到另一个程序的输入一样。 管道的符号是|,下面的程序将cat的标准输出作为less的标准输入,以实现翻页的功能: $ cat source.list.bk | less tee 有时候我们想要同时将程序的输出显示在屏幕上(或进入管道)和保存到文件中,这个时候可以使用tee。 tee程序的输出和它的输入一样,但是会将输入内容额外的保存到文件中: $ cat hello.t
mwangblog
2018/07/04
9100
将数据从 SQL Server 导入 Azure Storage Table
最近有个需求要将数据存储从 SQL Server 数据库切换到 Azure Storage 中的 Table。然而不管是 SSMS 还是 Azure Portal 都没有提供直接的导入功能,是不是又想自己写程序去导数据了?其实不用!没有点过数据库天赋的我996了一个晚上,终于找到了点点鼠标就搞定的方法,今天分享给大家。
Edi Wang
2020/06/15
2K0
运行mysql时,提示Table ‘performance_schema.session_variables’ doesn’t exist
第一步:在管理员命令中输入: mysql_upgrade -u root -p --force 第二步:关闭并重启数据库 service mysql stop service mysql start
用户1558882
2018/04/03
8500
运行mysql时,提示Table ‘performance_schema.session_variables’ doesn’t exist
第一步:在管理员命令中输入: mysql_upgrade -u root -p --force 第二步:关闭并重启数据库 service mysql stop service mysql start
用户1558882
2018/10/11
3.3K0
MySQL 中 blob 和 text 数据类型详解
前面文章我们介绍过一些常用数据类型的用法,比如 int、char、varchar 等。一直没详细介绍过 blob 及 text 类型,虽然这两类数据类型不太常用,但在某些场景下还是会用到的。本篇文章将主要介绍 blob 及 text 数据类型的相关知识。
MySQL技术
2021/12/21
7.3K0
【数据仓库】什么是 Azure Synapse,它与 Azure Data Bricks 有何不同?
Azure Synapse Analytics 是一项针对大型公司的无限信息分析服务,它被呈现为 Azure SQL 数据仓库 (SQL DW) 的演变,将业务数据存储和宏或大数据分析结合在一起。 在处理、管理和提供数据以满足即时商业智能和数据预测需求时,Synapse 为所有工作负载提供单一服务。后者通过与 Power BI 和 Azure 机器学习的集成而成为可能,因为 Synapse 能够使用 ONNX 格式集成数学机器学习模型。它提供了处理和查询大量信息的自由度.作为微软在西班牙为数不多的 Pow
架构师研究会
2022/03/08
1.6K0
点击加载更多

相似问题

存储在Azure Blob中时缺少列名

18

如何从Azure ADF管道运行azure CLI命令?

123

停止运行Azure Data管道

41

azure ADF管道查询

27

data.table &列名

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文