小编Jon*_*rlo的帖子

OpenCL的障碍

在OpenCL中,我的理解是您可以使用该barrier()函数来同步工作组中的线程.我(通常)了解它们的用途以及何时使用它们.我也知道工作组中的所有线程都必须遇到障碍,否则会出现问题.但是,每次我尝试使用障碍到目前为止,它似乎导致我的视​​频驱动程序崩溃,或者有关访问某种无效内存的错误消息.到目前为止,我已经在2张不同的显卡上看过这个(1个ATI,1个NVIDIA).

所以,我的问题是:

  1. 知道为什么会这样吗?
  2. barrier(CLK_LOCAL_MEM_FENCE)和之间有什么区别barrier(CLK_GLOBAL_MEM_FENCE)?我阅读了文档,但对我来说并不清楚.
  3. 关于什么时候使用barrier(CLK_LOCAL_MEM_FENCE)vs. 有一般规则barrier(CLK_GLOBAL_MEM_FENCE)吗?
  4. 有没有时间barrier()用错误的参数类型调用可能会导致错误?

opencl

44
推荐指数
2
解决办法
4万
查看次数

OpenCL - 如何查询设备的SIMD宽度?

在CUDA中,存在warp的概念,其被定义为可以在单个处理元件内同时执行相同指令的最大线程数.对于NVIDIA,目前市场上所有卡的经线尺寸均为32.

在ATI卡中,有一个类似的概念,但在这种情况下的术语是波前.经过一番狩猎后,我发现我所拥有的ATI卡的波前大小为64.

我的问题是,在运行时为OpenCL查询此SIMD宽度我该怎么办?

gpu gpgpu opencl

23
推荐指数
3
解决办法
5590
查看次数

GPU的稀疏Cholesky分解算法

谁能为我提供一个并行算法来计算稀疏Cholesky分解?它必须适合在GPU上执行.我们非常感谢CUDA,OpenCL甚至伪代码中的任何答案.

algorithm math cuda gpgpu opencl

9
推荐指数
1
解决办法
2695
查看次数

C++ AMP会在没有兼容GPU的机器上运行吗?

我知道C++ AMP由支持DirectX 11的GPU加速.
但是,我的问题是,如果编译的C++ AMP程序在没有DirectX 11兼容GPU的机器上运行,会发生什么?

是否可以通过DirectCompute的某些软件实现来模拟?
它是否在CPU上执行(可能使用SSE样式指令)?
或者,它是否无法执行?

c++ gpgpu directcompute c++-amp

6
推荐指数
1
解决办法
1444
查看次数

System.IO.File.Exists()来自x86和x64应用程序的不同答案

我正在使用安装了Update 3的Visual Studio 2012.我正在使用C#定位.NET framework 4.5.

我有一个像这样开始的方法:

public void Open(System.String filePath)
{
    if (!System.IO.File.Exists(filePath))
        throw new FileNotFoundException(. . .);

    . . .
}
Run Code Online (Sandbox Code Playgroud)

filePath参数的值是这样的:

"C:\\Users\\Jonathan.DeCarlo\\Source\\Repos\\PoliticalClassifier\\src\\PoliticalClassifier.DataSource.Tests\\TestFiles\\Social_Economic_DataMicro.xlsx"

那条路确实存在于我的机器上.此应用程序编译为"任何CPU".我在安装了Windows 7 x64的计算机上运行它.如果我让应用程序作为x64进程运行,FileNotFoundException即使文件存在,也会抛出.如果我强制应用程序作为x86进程运行,则不抛出异常(应该是这种情况).

System.IO.File.Exists(filePath)当应用程序作为x64进程而不是x86进程运行时,为什么返回不同的结果?

c# 64-bit visual-studio-2012

6
推荐指数
1
解决办法
764
查看次数

GPU 友好的 2D 线段相交算法

我正在寻找一种算法来测试 2 条线段是否以 GPU 友好的方式相交。线段是二维的。虽然网络上讨论了许多用于执行此操作的算法,但我所见过的所有算法都使用了大量分支指令。在 CPU 上,这不是一个问题。但是,在 GPU 上,大量分支指令会降低性能。

有谁知道适合这种环境的好算法?任何示例伪代码、CUDA 代码、OpenCL 代码或 DirectCompute 计算将不胜感激。


跟进

如果有人感兴趣,这(基本上)就是我最终得到的。我把它删减了,所以它更像是伪代码而不是 OpenCL C,但希望它能理解要点。

__kernel void findCrossingLines(__global float2 p1, __global float2 p2, 
                                __global float2 p3, __global float2 p4, 
                                __global bool* output)
{
    int result = 0;
    float2 A = p2;
    float2 a = p2 - p1;
    float2 B = p4;
    float2 b = p4 - p3;
    float2 c = B - A;
    float2 b_perp = (float2)(-b.y, b.x);

    float numerator = dot(b_perp, c);
    float denominator = dot(b_perp, …
Run Code Online (Sandbox Code Playgroud)

algorithm cuda gpgpu opencl computational-geometry

5
推荐指数
1
解决办法
2165
查看次数

似乎达到了CUDA限制,但这有什么限制?

我有一个CUDA程序似乎在某种资源的某种限制,但我无法弄清楚该资源是什么.这是内核函数:

__global__ void DoCheck(float2* points, int* segmentToPolylineIndexMap, 
                        int segmentCount, int* output)
{
    int segmentIndex = threadIdx.x + blockIdx.x * blockDim.x;
    int pointCount = segmentCount + 1;

    if(segmentIndex >= segmentCount)
        return;

    int polylineIndex = segmentToPolylineIndexMap[segmentIndex];
    int result = 0;
    if(polylineIndex >= 0)
    {
        float2 p1 = points[segmentIndex];
        float2 p2 = points[segmentIndex+1];
        float2 A = p2;
        float2 a;
        a.x = p2.x - p1.x;
        a.y = p2.y - p1.y;

        for(int i = segmentIndex+2; i < segmentCount; i++)
        {
            int currentPolylineIndex = segmentToPolylineIndexMap[i];

            // …
Run Code Online (Sandbox Code Playgroud)

cuda gpgpu

1
推荐指数
1
解决办法
1564
查看次数