问题标签 [opencl.net]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opencl - 将结构传递给 openCL 内核
我想将一个结构传递给opencl内核,结构是
内存分配和初始化就像
我可以将这样的结构传递给opencl内核吗
opencl - 自定义 OpenCL 平台/设备
我对opencl很陌生,想做一些实验。具体来说,我想知道是否有人可以为我指明正确的方向,以创建带有 opencl 接口的自定义平台或设备。如何使用它是创建一个与 GPU 和 CPU 一起运行的简单模拟器/调试器。有没有关于定制opencl平台、设备等开发的官方文档?此外,是否有任何涵盖该领域的优秀在线资源?
感谢您的任何帮助。
c# - OpenCL "read_image" 返回一个空白像素
问题描述和示例
我正在使用 OpenCL,并且正在尝试调整图像大小。我已经阅读了一些教程,并且几乎结束了尝试为此编写自己的内核。
我的问题是我无法让 OpenCL 从我传输给它的图像中读取像素。
这是 OpenCL 中的内核:
我正在使用 OpenCL.Net,但我认为这不是导致问题的原因。这就是我将图像从主机传输到设备内存的方式:
我需要帮助
如果我没有将图像正确传输到设备或者我的设备有问题,如果有人可以建议一种调试方法,我会很高兴。我有点走投无路了。就像我说的,我认为这不是 OpenCL.Net 的问题,但我现在几乎愿意尝试任何事情。我认为在传输主机内存时我可能在做一些愚蠢的事情,但我已经查看了 100 多次该代码并重写了近十二次。我看不到的任何东西都不应该导致这个问题。
我知道我可以将常规缓冲区传输到设备并将其读回,读取图像是我唯一的问题。如果您查看我的 OpenCL 代码,您会看到一个注释行。通过取消注释,我可以将数据返回给我的主机(石灰绿色)。这导致人们相信问题出在 read_image 上。
我正在使用 Intel 5000 GPU 开发 2013 MacBook Air 来运行我的 OpenCL 代码。
c# - 异步 API
鉴于 OpenCL 旨在成为异构编程的 API,它几乎可以定义为与之相关的巨大延迟损失。因此必须有一个异步 API。
然而,我发现很难在 OpenCL.net 中找到异步 API。我找到了OpenCl.Net.Event
结构,它似乎是out
大多数 API 调用中的一个参数。但是我无论如何都找不到与事件相关联的回调,clSetEventCallback
因为opencl.net
.
有谁知道如何进行await
异步操作opencl.net
?
c# - 为什么我不能在 cpu 设备上创建上下文?
我有一些内核在 gpu 上工作,但是我不能假设代码只会在具有兼容 gpu 的计算机上使用。我尝试使用 cpu 设备运行相同的内核,但是当我尝试创建上下文时,我不断收到 OutOfHostMemory 错误。
我曾尝试在运行 gpu 代码但选择 cpu 作为我的设备的同一台计算机上,以及只有板载图形的计算机上出现的唯一设备是 cpu - 两者都给我同样的错误。
我已确认我可以使用该设备 (GetDeviceInfo) 拨打其他电话,并且我得到了我所期望的。
什么会导致此错误发生?文档只说“主机内存不足”,但这对我没有帮助。
编辑:对评论的反馈
我正在使用的代码是:
之前返回的所有错误代码都是成功的,无论我使用的是gpu还是cpu,我都可以看到设备的名称,但我只能在使用gpu时成功创建上下文。
我认为我还没有达到任何无限循环,而且在这些调用之前我还没有在 opencCl 中做任何其他事情。
c++ - clGetDeviceInfo 和 clGetPlatformInfo 在 OpenCL 中失败,错误代码为 -30 (CL_INVALID_VALUE)
我开始为使用 OpenCL 编写一个小“引擎”。现在,我遇到了一个很奇怪的问题。
当我调用clGetDeviceInfo()
查询特定设备的信息时,参数的某些选项param_name
返回错误代码-30(= CL_INVALID_VALUE)。一个非常著名的选项是 CL_DEVICE_EXTENSIONS 选项,无论我使用什么 sdk 或平台,它都应该返回一串扩展名。我检查了每一个边缘,并且对参数进行了双重检查。
我不明白的另一件事是,当我在工作的 Windows 机器上运行我的源代码时,该clGetPlatformInfo()
函数还返回我查询 CL_PLATFORM_EXTENSIONS 字符串的 CL_INVALID_VALUE。在家里,我使用的是运行 Ubuntu 的 Linux 机器,它显示扩展字符串没有任何问题。
以下是我平台的数据:
工作:
- 英特尔酷睿 i5 2500 处理器
- 英伟达 Geforce 210 GPU
- AMD APP SDK 3.0 测试版
家:
- 英特尔酷睿 i7 5820K CPU
- AMD Radeon HD7700 显卡
- AMD APP SDK 3.0 测试版
这是来源:
源代码是用 cpp 编写的,opencl 函数嵌入在一些包装类(即 OCLDevice)中。
正如您在代码param_value_size > param_value_size_ret中看到的那样,也没有理由返回错误。param_name从标头复制以保存,没有输入错误。
如果有人知道这个问题的答案,那就太好了。
c++ - clCreateContextFromType 在执行时以 SEGFAULT 结束
我正在尝试在包含我的显卡的平台上创建一个 OpenCL 上下文。但是当我调用clCreateContextFromType()
SEGFAULT 时会抛出异常。
给定type
的是 CL_DEVICE_TYPE_GPU 并且该cl_context_properties
数组包含的平台也是有效的。
为了调试错误,我实现pfn_notify()
了 Khronos API 描述的以下函数:
这是 shell 的输出:
我正在使用的机器具有以下属性:
- 英特尔酷睿 i5 2500 处理器
- 英伟达 Geforce 210 GPU
- 操作系统:Windows 7
- AMD APP SDK 3.0 测试版
- IDE:带有 gdb 的 Eclipse
如果有人知道这个问题的答案,那就太好了。
c# - 如何在 OpenCLTemplate 中将矩阵传递给 Image2D?
我正在尝试实现并行 Gauss-Seidel 算法。这是我的内核函数
它确实编译得很好,但是我在将图像传递给内核时遇到了问题
这是我尝试的
程序因运行时异常而失败:矢量长度应为 4*宽*高。我知道应该抛出异常,因为图像以 RGBA 格式存储数据,但我真的不明白我应该如何克服这个问题。
任何帮助,将不胜感激。
c# - 将内核链接在一起时值随机变化
我对整个 OpenCL 世界还是很陌生,我创建了两个非常简单的内核,我试图将它们链接在一起,但我得到了相当虚假的结果。当单独运行时,它们按预期工作,但是当它们一起运行时,那是我看到奇怪结果的时候。
所以,每个内核单独看起来像这样
矢量 3 噪声
为了测试这一点,所有状态都Vec3
具有[ 1.0f, 1.0f, 1.0f]
所有随机值都相同,所以我得到的输出是一个状态数组,其值[2.0f, 2.0f, 2.0f]
与我预期的一样。
矢量 4 噪声
用非常简单的测试数据运行它也给了我想要的东西。
现在问题出现在将它们链接在一起时。我按照向量 4 噪声 -> 向量 3 噪声的顺序调用它们。现在,当运行 Vector 4 噪声内核时,我看到 vector 3 的值发生了变化,而且这种变化似乎遵循一种模式。
因此,在向量 4 内核运行之后,我希望每个状态中的向量 3 与插入时相同。这意味着每个状态的向量 3 值[1.0f,1.0f,1.0f]
如下实际上看到向量 3 的结果如下:
并且该模式在所有 Vector 3 值中重复出现。请注意,在内核中,它只是将 Vector3 从先前状态复制到新状态。
这就是我使用 OpenCL.Net 将它们链接在一起的方式
请原谅那里有大量代码,但这是一个游乐场项目,我几乎只是在吐槽想法,所以整洁和优雅在这里不是问题:)
提前感谢您提供的任何帮助。
编辑
所以我今天早上做的第一件事是将每个内核拉到自己的 cl 文件中,并确保每个内核都有自己的状态版本,只有它需要的状态(分别为 Vector4 和 Vector3),以及一个新的 using 语句与新分离出的 Vector3 噪声内核的所有 gubbins 一起使用。令我高兴的是,Vector4 噪声内核完全符合我的预期,但是,当涉及到 Vector3 噪声时,出现了与之前类似的问题。仍然[1.0f,1.0f,1.0f]
作为随机值和起始 Vector3 值传入,它仍然没有产生我期望的输出。这次重复的模式是: