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

1) 枚举类型

cpp 复制代码
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
#include<iostream>
#include <time.h>

enum Color {
	RED,				//RED=0
	GREEN,		//GREEN=1
	BLUE			//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实现矩阵乘

cpp 复制代码
#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) {
    // 初始化StarPU
    starpu_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;
}
相关推荐
dialect_3 小时前
KMP算法
开发语言·c++·算法
总要学点什么4 小时前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
ShineWinsu5 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
傲世仙尊5 小时前
多态-虚表才活到运行期符号表早已消失
c++
开开心心_Every5 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
chenbingjie_c6 小时前
C++ 多态完全指南:从虚函数重写到虚函数表原理
开发语言·c++
是main不是漫6 小时前
【双指针——移动零】数组划分类题目的入门基石
c++·算法
吴卫斌6 小时前
定投ETF实战指南(四):行业/主题ETF——定投的“进攻端“
开发语言·python·股票·量化
·present·6 小时前
CSAPP(Bomb lab)
c语言·c++
王老师青少年编程6 小时前
2026年信奥赛c++普及组csp-j第二轮复赛真题
c++·真题·csp·信奥赛