CUDA原子操作

代码

c 复制代码
#include <cuda_runtime.h>
#include <stdio.h>

__global__ void atomicAddAndGet(int *result, int *valueToAdd) {
        // 原子加法
        int addedValue = atomicAdd(result, *valueToAdd);

        // 通过原子操作后读取值,确保是加法后的值
        addedValue += *valueToAdd;
        printf("Thread %d: Added value: %d\n", threadIdx.x, addedValue);
}

int main() {
        int result = 0;
        int valueToAdd = 5;
        int *d_result, *d_valueToAdd;

        // 在GPU上分配内存
        cudaMalloc((void**)&d_result, sizeof(int));
        cudaMalloc((void**)&d_valueToAdd, sizeof(int));

        // 将数据从主机内存复制到GPU内存
        cudaMemcpy(d_result, &result, sizeof(int), cudaMemcpyHostToDevice);
        cudaMemcpy(d_valueToAdd, &valueToAdd, sizeof(int), cudaMemcpyHostToDevice);

        // 启动CUDA核函数
        atomicAddAndGet << <1, 32 >> > (d_result, d_valueToAdd);

        // 将结果从GPU内存复制回主机内存
        cudaMemcpy(&result, d_result, sizeof(int), cudaMemcpyDeviceToHost);

        // 输出结果
        printf("Result after atomic addition: %d\n", result);

        // 释放GPU上的内存
        cudaFree(d_result);
        cudaFree(d_valueToAdd);

        return 0;
}

结果

相关推荐
格林威3 分钟前
工业相机图像高速存储(C++版):先存内存,后批量转存方法,附海康相机实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·工业相机·堡盟相机
智者知已应修善业7 分钟前
【输入矩阵将其按副对角线交换后输出】2024-11-27
c语言·c++·经验分享·笔记·线性代数·算法·矩阵
阿i索9 分钟前
【蓝桥杯备赛Day3】——STL
开发语言·c++
17(无规则自律)12 分钟前
C++ 链表修炼指南
数据结构·c++·算法·leetcode·链表
闻缺陷则喜何志丹14 分钟前
【字典树 回溯】P7210 [COCI 2020/2021 #3] Vlak|普及+
c++·算法·字典树·回溯·洛谷
Vect__15 分钟前
深刻理解C++STL库常见容器功能和底层
开发语言·c++
夏玉林的学习之路15 分钟前
委托构造和using关键字
开发语言·c++·算法
历程里程碑18 分钟前
Linux 46 HTTPS(协议原理)安全通信全流程解析
linux·网络·c++·网络协议·http·https·排序算法
Yupureki27 分钟前
《C++实战项目-高并发内存池》2.ObjectPool构造
linux·服务器·c语言·开发语言·jvm·c++
格林威30 分钟前
工业相机图像高速存储(C++版):内存映射文件(MMF)零拷贝方案,附堡盟 (Baumer) 相机实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·视觉检测·工业相机