小编kip*_*gon的帖子

OpenCL 光线追踪器在 CPU 上工作正常,但在 GPU 上(总是)不工作

[请看下面的编辑,问题的解决方案可能就在那里]

我正在尝试通过研究一个小型光线追踪器来学习 OpenCL(请参阅下面的代码,来自此链接)。

我没有“真正的”GPU,我目前使用的是带有 Intel(R) Iris(TM) Graphics 6100 显卡的 macosx 笔记本电脑。

该代码在 CPU 上运行良好,但在 GPU 上的行为很奇怪。它的工作(或不工作)取决于每个像素的样本数(在场景中传播光线后穿过像素以获得其颜色的光线数量)。如果我取少量样本 (64),我可以获得 1280x720 的图片,但如果我取 128 个样本,我只能获得较小的图片。据我了解,样本数量不应该改变任何东西(当然图片质量除外)。是否有一些与 OpenCL/GPU 完全相关的东西让我怀念?

此外,似乎是从崩溃的GPU内存中提取结果:

queue.enqueueReadBuffer(cl_output, CL_TRUE, 0, image_width * image_height * sizeof(cl_float4), cpu_output);
Run Code Online (Sandbox Code Playgroud)

在这个阶段我得到一个“中止陷阱:6”。

我错过了一些东西。


[编辑]经过一番研究,我发现了一个有趣的线索:图形卡可能会自愿中止任务,因为它需要太多时间。这种行为本来是为了避免“冻结”屏幕。这个话题就讲那个。

你怎么看?

我找不到关闭这种行为的方法。你知道怎么做吗?


以下是文件:

主.cpp:

// OpenCL based simple sphere path tracer by Sam Lapere, 2016
// based on smallpt by Kevin Beason 
// http://raytracey.blogspot.com 

#include <iostream>
#include <fstream>
#include <vector>
#include <CL\cl.hpp>

using namespace std;
using namespace cl;

const …
Run Code Online (Sandbox Code Playgroud)

c++ raytracing opencl

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

标签 统计

c++ ×1

opencl ×1

raytracing ×1