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;
}

结果

相关推荐
一方热衷.6 小时前
YOLO26-Seg ONNXruntime C++/python推理
开发语言·c++·python
仰泳的熊猫8 小时前
题目2194:蓝桥杯2018年第九届真题-递增三元组
数据结构·c++·算法
2301_803554528 小时前
linux 以及 c++编程里对于进程,线程的操作
linux·运维·c++
小糯米60110 小时前
C++ 排序
c++·算法·排序算法
EverestVIP10 小时前
c++前置声明的方式与说明
开发语言·c++
老约家的可汗11 小时前
C++篇之类和对象下
java·开发语言·c++
Mr_WangAndy11 小时前
C++数据结构与算法_排序算法
c++·排序算法·基础排序·高级排序
Irissgwe11 小时前
C&C++内存管理
c语言·开发语言·c++·c++内存管理
玖釉-12 小时前
解密图形渲染的性能原罪 —— Draw Call
c++·windows·图形渲染