[请看下面的编辑,问题的解决方案可能就在那里]
我正在尝试通过研究一个小型光线追踪器来学习 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)