当前位置: 首页 > news >正文

c++枚举类型StarPU实现矩阵乘

1) 枚举类型 

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<iostream>
#include <time.h>enum Color {RED,				//RED=0GREEN,		//GREEN=1BLUE			//BLUE=2
};
int main()
{//定义数据类型为枚举类型Color的数组enum Color sky[3] = { RED,RED,RED};for (int i = 0; i < 3; i++) {printf("%d\n",sky[i]);}
}

2) StarPU实现矩阵乘 

#include <starpu.h>#define N 100// 定义在CPU上执行的任务
static void cpu_task(void *buffers[], void *cl_arg) {// 获取输入和输出矩阵float *A = (float *)STARPU_VECTOR_GET_PTR(buffers[0]);float *B = (float *)STARPU_VECTOR_GET_PTR(buffers[1]);float *C = (float *)STARPU_VECTOR_GET_PTR(buffers[2]);// 执行矩阵乘法for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {C[i * N + j] = 0;for (int k = 0; k < N; k++) {C[i * N + j] += A[i * N + k] * B[k * N + j];}}}
}                        
// 定义在GPU上执行的任务
static void gpu_task(void *buffers[], void *cl_arg) {// 获取输入和输出矩阵float *A = (float *)STARPU_VECTOR_GET_PTR(buffers[0]);float *B = (float *)STARPU_VECTOR_GET_PTR(buffers[1]);float *C = (float *)STARPU_VECTOR_GET_PTR(buffers[2]);// 使用CUDA进行矩阵乘法// 这里省略具体的CUDA代码
}int main(int argc, char **argv) {// 初始化StarPUstarpu_init(NULL);// 分配数据float *A = (float *)malloc(N * sizeof(float));float *B = (float *)malloc(N * sizeof(float));float *C = (float *)malloc(N * sizeof(float));// 创建句柄starpu_data_handle_t handle_A, handle_B, handle_C;starpu_vector_data_register(&handle_A, STARPU_MAIN_RAM, (uintptr_t)A, N, sizeof(float));starpu_vector_data_register(&handle_B, STARPU_MAIN_RAM, (uintptr_t)B, N, sizeof(float));starpu_vector_data_register(&handle_C, STARPU_MAIN_RAM, (uintptr_t)C, N, sizeof(float));// 定义任务代码struct starpu_codelet cl;starpu_codelet_init(&cl);cl.where = STARPU_CPU | STARPU_CUDA;cl.cpu_funcs[0] = cpu_task;cl.cuda_funcs[0] = gpu_task;cl.nbuffers = 3;cl.modes[0] = STARPU_R;cl.modes[1] = STARPU_R;cl.modes[2] = STARPU_W;// 创建任务struct starpu_task *task = starpu_task_create();task->cl = &cl;//向缓冲区中填充数据task->handles[0] = handle_A;task->handles[1] = handle_B;task->handles[2] = handle_C;// 提交任务starpu_task_submit(task);// 等待任务完成starpu_task_wait_for_all();// 释放句柄starpu_data_unregister(handle_A);starpu_data_unregister(handle_B);starpu_data_unregister(handle_C);// 清理free(A);free(B);free(C);starpu_shutdown();return 0;
}


http://www.mrgr.cn/news/9591.html

相关文章:

  • 趋动科技联合云轴科技推出GPU云原生超融合解决方案
  • ELK进阶-安全认证设置流程介绍
  • Python算法工程师面试整理-离散数学
  • TOMCAT全解
  • C语言典型例题51
  • 使用Java进行中小学违规教育培训数据采集实践-以某城市为例
  • pytorch, torch_tesnsorrt安装各版本匹配
  • (152)时序收敛--->(02)时序收敛二
  • HTTP与Qt:构建网络应用的桥梁
  • 矢量数据创建
  • 前端性能优化:构建快速且流畅的Web体验
  • 基于pygame的雷电战机小游戏
  • 【初阶数据结构】顺序表和链表算法题(上)
  • SpringCloud Gateway及 Springboot 服务 跨域配置
  • 【Tesla FSD V12的前世今生】从模块化设计到端到端自动驾驶技术的跃迁
  • 使用 Vue I18n 进行 Vue.js 应用的国际化
  • Java超市收银系统(十、爬虫)
  • vue 精选评论词云 集成echarts-wordcloud TF-IDF算法
  • PDF文件切割,无大小限制
  • Linux文件目录系统