如何使用线栅栏/ CUDA5.5
How to use threadfence / CUDA5.5
所以,我想知道如何使用Threadfence,我想阅读有关threadfence的示例代码。
请给我看关于 threadfence() 的示例代码
我相信当我想访问内存是CUDA5.5中设备端的内核功能时,我想执行独占控制。
我了解到,如果我使用所谓的"()__threadfence",排他性控制是可能的,我不知道如果我使用方式。
·我可以做什么?
(现在,"__threadfence()"发生未定义的错误标识)
·我在哪里编写源代码上的代码。 因为我想在下面的代码中专门控制您要访问Log_d的位置。
其他线程我想阻止访问关于内存的Log_d之间的"锁定开始"~"锁定停止"以下代码,例如。
我在 CPU 端代码中定义了块和线程。块
: 1,1,1 和线程 : 256,1,1__global__ void matrix_vector_multi_gpu_1_256(float *A_d, float *B_d, float *C_d, float *Log_d){
int i;
A_d[threadIdx.x]=0.0F;
for(i=0;i<N;i++){
A_d[threadIdx.x]=A_d[threadIdx.x]+B_d[threadIdx.x*N+i]*C_d[i];
}
//lock Start about Log_d
//__threadfence();
for(int j=0;j<N;j++){
if(Log_d[j]==0){
Log_d[j]=threadIdx.x + 1;
break;
}
}
//Stop the lock
}
如果您能提供有关matrix_vector_multi_gpu_1_256
内核函数应该做什么的更多信息,那就太好了。
通过 __threadfence()
,设备将等待,直到调用线程进行的所有全局和共享访问都对以下人员可见:
- 线程
- 块中的所有线程用于共享内存访问;
- 设备中的所有线程,用于全局内存访问。
在 CUDA SDK 的threadFenceReduction
中提供了使用__threadfence()
的示例。
在该示例中,在单个内核调用中对任意大小的数组执行缩减。线程块执行部分缩减,内核通过全局计数器的原子增量跟踪已完成的块数。 如果票证值等于线程块的数量,则持有票证的块知道它是最后一个完成的块。 最后一个块负责对所有其他块的结果求和。
为了使这种方法正常工作,必须确保在块接受票证之前,其所有内存事务都已完成。这是通过__threadfence()
.
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 使用std::multimap迭代器创建std::list
- 从不同线程使用int64的不同字节安全吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 为什么使用 "this" 指针调用派生成员函数?
- 使用新行和不使用新行读取文件
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用 LLVM 的 libc++ 时,__1 符号从何而来?
- 在std::cout之后使用std::cin时,换行符从何而来
- 哪个 Nsight 版本可以使用 CUDA5.5,在 VisualStudio2010 中
- 为什么以及在何处在C++中使用引用和指针
- 基例如何影响使用递归函数的哪些行
- CUDA5.0上下文管理,在多GPU环境中使用单个应用程序线程
- 在windows 7上使用cuda5支持构建Opencv 2.4.3时出现nvcc问题