SYCL程序使用VS调试器工作,但在运行.exe时不工作



我正试图从这本书中构建并运行一个简单的SYCL程序。这是:

#include <CL/sycl.hpp>
#include <iostream>
using namespace sycl;
const std::string secret {
"Ifmmp-!xpsme"12J(n!tpssz-!Ebwf/!"
"J(n!bgsbje!J!dbo(u!ep!uibu/!.!IBM1"
};
const auto sz = secret.size();
int main(int argc, char* argv[]) {
queue Q;
char* result = malloc_shared<char>(sz, Q);
std::memcpy(result, secret.data(), sz);
Q.parallel_for(sz, [=](auto& i) {
result[i] -= 1;
}).wait();
std::cout << result <<  "n";
return 0;
}

我使用的是Visual Studio 2019,我正在使用英特尔oneAPI DPC++2022进行编译。如果我运行Visual Studio调试器,一切正常,我将获得以下输出:"你好,世界!对不起,戴夫。恐怕我做不到HAL";

但是,如果我正在执行刚刚从命令提示符构建的.exe文件,则不会发生任何事情。。。程序本身正在执行,没有任何输出,我也没有收到任何错误。我试着到处打印,看看问题可能来自哪里。如果我在";队列Q"当我运行.exe文件时,我将无法看到它。根据我所读到的内容,问题来自于我的对象Q的初始化;队列Q"通过";队列Q(default_selector{}("但它并没有解决问题。


编辑:我只是将代码简化为以下内容:

#include <CL/sycl.hpp>
#include <iostream>
using namespace sycl;
int main(int argc, char* argv[]) {
std::cout << "Beginning of the program.n";

queue Q; // The problem appears to come from this line
std::cout << "End of the program.n";
system("pause");
return 0;
}

以下是在Visual Studio调试器中启动程序时的输出:

> Beginning of the program.
> End of the program.
>
> Sortie de C:Users...test.exe (processus 8108). Code : 0.
> Press any key to continue . . .

以下是我从命令提示符调用.exe时的输出:

> C:Users...Release>test.exe
> Beginning of the program.
>
> C:Users...Release>

我注意到,在程序在命令提示符下运行的短时间内(大约一秒钟(,我看到程序Windows问题报告在任务管理器中运行。然后,当程序显然完成计算时,它就消失了。


编辑2:以下是如果我正在查找使用的设备会发生的情况。带有以下代码:

#include <CL/sycl.hpp>
#include <iostream>
using namespace sycl;
int main(int argc, char* argv[]) {
default_selector device_selector;
std::cout << "default_selector has been defined.n";
auto defaultQueue = queue(device_selector);
std::cout << "default_queue has been defined.n";
std::cout << "Running on " << defaultQueue.get_device().get_info<info::device::name>() << "n";
system("pause");
return 0;
}

我从Visual Studio调试器获得以下输出:

> Beginning of the program...
> default_selector has been defined.
> default queue has been defined.
> Running on      Intel(R) Core(TM) i5-3337U CPU @ 1.80GHz
> Press any key to continue...

当我从命令提示符执行.exe时(无论是否在管理员中执行都不会改变任何事情(:

> C:Users...Release>test.exe
> Beginning of the program...
> default_selector has been defined.
>
> C:Users...Release>

英特尔开发人员软件论坛给出了答案。

尽管编译器已经很好地安装在我的机器上,但oneAPI环境尚未配置。这就是在Windows命令提示符下运行.exe时它无法工作的原因。

我必须运行位于地址C:\Program Files(x86(\intel\oneAPI的批处理文件setvars.bat,然后它就工作了!

最新更新