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

CUDA 调试器 sanitizer,检测数据竞争,竞争条件 race condition

有数据竞争的代码 race.cu:

#include <cuda_runtime.h>
#include <stdio.h>
#include <stdlib.h>// 有明显数据竞争的内核
__global__ void raceConditionKernel(int *data, int N) {int tid = threadIdx.x + blockIdx.x * blockDim.x;// 数据竞争:多个线程同时写入 data[0]if (tid < N) {data[0] += data[tid];  // 所有线程都竞争写入 data[0]}
}// 共享内存数据竞争
__global__ void sharedMemoryRaceKernel(int *output) {__shared__ int shared_var;// 数据竞争:多个线程同时初始化if (threadIdx.x < 10) {shared_var = threadIdx.x;  // 多个线程竞争写入}__syncthreads();if (threadIdx.x == 0) {*output = shared_var;}
}// 更复杂的数据竞争
__global__ void complexRaceKernel(int *data, int N) {int tid = threadIdx.x + blockIdx.x * blockDim.x;__shared__ int temp[256];temp[threadIdx.x] = tid;__syncthreads();// 数据竞争:多个线程写入 data[tid % 10]if (tid < N) {int target_index = tid % 10;  // 只有10个不同的索引data[target_index] += temp[threadIdx.x % 256];}
}int main() {const int N = 1000;int *d_data, *h_data;// 分配内存cudaMalloc(&d_data, N * sizeof(int));h_data = (int*)malloc(N * sizeof(int));// 初始化数据for (int i = 0; i < N; i++) {h_data[i] = i + 1;}cudaMemcpy(d_data, h_data, N * sizeof(int), cudaMemcpyHostToDevice);printf("Running kernels with race conditions...\n");// 运行有数据竞争的内核dim3 blocks(10);dim3 threads(100);// 内核1:全局内存竞争printf("1. Global memory race condition:\n");raceConditionKernel<<<blocks, threads>>>(d_data, N);cudaDeviceSynchronize();// 内核2:共享内存竞争printf("2. Shared memory race condition:\n");int *d_output;cudaMalloc(&d_output, sizeof(int));sharedMemoryRaceKernel<<<1, 32>>>(d_output);cudaDeviceSynchronize();// 内核3:复杂竞争printf("3. Complex race condition:\n");complexRaceKernel<<<blocks, threads>>>(d_data, N);cudaDeviceSynchronize();// 读取结果cudaMemcpy(h_data, d_data, N * sizeof(int), cudaMemcpyDeviceToHost);printf("First 10 results: ");for (int i = 0; i < 10; i++) {printf("%d ", h_data[i]);}printf("\n");// 清理cudaFree(d_data);cudaFree(d_output);free(h_data);printf("Program completed.\n");return 0;
}

命令:

nvcc -g -G race.cu
compute-sanitizer --tool racecheck ./a.out

试了几次,只能检测到第二种数据竞争,不知道为什么

http://www.dtcms.com/a/486220.html

相关文章:

  • Blender布料物理模拟生成插件 Simply Cloth Studio V1.4.4 + Simply Cloth Pro v3.0附使用教程
  • AWS CloudWatch:服务器的“眼睛”,实时监控一切动向
  • 云南省建设厅合同网站嵊州门户网站
  • 做网站需要学jsp我也来做外国网站购物
  • 异步数据采集实践:用 Python/Node.js 构建高并发淘宝商品 API 调用引擎
  • Spring Boot 3零基础教程,yml文件中配置和类的属性绑定,笔记15
  • Lua C API 中一段LUA建表过程解释
  • 用于大语言模型后训练阶段的新方法GVPO(Group Variance Policy Optimization)
  • k8s集群环境下Jenkins环境性能测试项目实战
  • 【k8s】在 k8s上部署一个 web 服务
  • 怎做网站网页设计属于什么行业
  • 02 Oracle JDK 下载及配置(解压缩版)
  • 「10.11」闪崩前比特币做空风波
  • 目标检测学习总结
  • java求职学习day40
  • 服装公司网站首页做头像的网站空白
  • 在 Microsoft Azure 上部署 ClickHouse 数据仓库:托管服务与自行部署的全面指南
  • 橙色可以做哪些网站沈阳网站建设024w
  • 网络设备配置:交换机、路由器OSPF和BGP、防火墙策略管理
  • 深圳建设工程信息网站科技有限公司网页设计
  • h5网站开发培训哪里好项目网创业
  • C++ Hash
  • 守护能源动脉:高精度远距离管道状态监测!
  • HarmonyOS应用配置文件与资源组织深度解析
  • 【完整源码+数据集+部署教程】烟叶植株计数与分类系统源码和数据集:改进yolo11-TADDH
  • 【深入理解计算机网络11】应用层详解:DNS,WWW,HTTP
  • Linux----环境变量
  • 高可用架构实战:SpringBoot+MongoDB构建AI原生应用
  • 新疆维吾尔自治区第一届“丝路杯”网络安全大赛暨2026年新疆职业院校技能大赛网络安全赛项竞赛样题
  • 自定义层和读写文件