对于Intel + NVIDIA双GPU"Optimus"设置,应用程序可以NvOptimusEnablement按照OptimusRenderingPolicies.pdf中的说明导出.此选项允许应用程序确保使用高速离散GPU而无需更新配置文件或用户交互,这通常是某些类别的应用程序所需要的.
对于使用AMD GPU的系统是否有相同的技巧(仅限Windows),如果是这样,它是什么?我无法通过谷歌搜索找到任何具体信息; 只有很多人在各种论坛上都没有回答相同的问题,或者有关NVIDIA技巧的文章中有"可能AMD有类似的东西,我不知道"的评论.
某些遗留测试框架代码中存在一种模式,它依赖于Visual C++的两阶段查找,在移植到其他编译器时会引起麻烦.我知道有许多解决方案来解决这个问题,但都需要"广泛的"结构变化.
虽然我很确定没有,但我很好奇是否存在一个"简单"的黑客攻击,它可以在符合标准的编译器中获得所需的行为,并且只需要一小组所需的更改.
该示例中显示了该模式:
#include <cstdio>
// global "system" function to test; generally something like `fopen` in a real test
const char* GetString() { return "GLOBAL"; }
// provides no overrides of the standard system functions being tested
struct NoOverrides {};
// set of functions overriding the system functions being tested
struct TestOverrides {
// if this were `fopen` this might be a version that always fails
static const char* GetString() { return "OVERRIDE"; }
};
// test case
template …Run Code Online (Sandbox Code Playgroud) 我刚刚在Microsoft Connect上提交了关于无法编译以下玩具代码段的错误:
template <typename... P> struct S {
template <void(*F)(P...)> static void T() { }
};
void A(int, float) { }
int main() { S<int, float>::T<&A>(); }
Run Code Online (Sandbox Code Playgroud)
错误是:
test.cpp(2): error C3520: 'P' : parameter pack must be expanded in this context
Run Code Online (Sandbox Code Playgroud)
本质上,当用作模板参数时,我无法在函数签名内解压缩可变参数类型.这段代码(我认为)合法; 至少,GCC 4.7,Clang 3.0和ICC 13都支持它.
我已经看到了这个问题,但没有要求或给出变通方法,这正是我正在寻找的.
虽然不是超级关键(显然我多年来一直没有变量模板)但这种模式对于我想做的一些工作以及我想在C++上做的一些文章特别重要.用于序列化,脚本绑定等的11种反射技术,这是我想对Visual Studio用户有用的东西(因为它是迄今为止我所在行业中主要的编译器工具集).我希望微软的工程师能够在2013年RTM之前解决这个问题,但我并没有屏住呼吸.
一个玩具(这次来自内存)如何使用它的样本(减去使它稍微容易使用的宏):
Reflect<MyType>("MyType")
.bind("GetMatrix", mat44, &MyType::GetMatrix>()
.bind("Display", void, &MyType::Display>();
Run Code Online (Sandbox Code Playgroud)
当然,这可以在没有可变参数模板的情况下完成.当然,它只需要大量代码并接受对绑定成员函数的最大优点的限制.是的,将函数作为模板参数传递是重要的,因为成员函数指针在Visual Studio中的工作方式(可变大小)以及与不可能快速的C++代表(在我的C++社区,这种级别的优化有时实际上很重要),否定了使用std::function或类似设计的选择.
这个VS错误有解决办法吗?或者使用可变参数模板在VC++ 12中使用(编译时)函数指针参数的任何其他方法?
从标准模板库我开始了解istream和ostream迭代器.我无法理解它们是如何工作的.
我也不明白他们为什么被使用.它们为什么有用?
在以下场景中,我想使用MSBuild增加构建的并行性:
有三个C++项目(目标).第一个是调用的静态库A,第二个是B依赖的动态库A,第三个是C依赖的可执行文件B.所有项目都包含简单的源代码,没有标题生成或其他恶作剧.
此配置中没有任何内容可以阻止所有转换单元并行编译,因为唯一的实际依赖关系是在链接时.但是,在MSBuild中设置引用和依赖关系的标准方法强制所有A构建之前甚至开始构建任何内容B,依此类推.这不必要地序列化了一些构建过程.
项目和通用解决方案需要对"普通"开发人员保持平易,这意味着维护项目和构建设置应该完全可以在Visual Studio UI中实现(新库和可执行文件可能依赖于预先存在的属性表,但不应该要求手动编辑新项目的.vcxproj文件,也不手动编写MSBuild XML文件.
我目前的想法是将所有代码从B和移动C到单独的静态库中,称为B'和C'.然后B将取决于两者,A并B'允许它们并行编译.同样地,由于C最终取决于A,B'和C'那些可以并行所有编译.正如预期的那样,唯一剩下的串行进程就是链接器步骤.虽然它不是世界末日,但这比我想要的更麻烦和非惯用.
我真的希望能够为项目的链接步骤创建依赖项,这些项目的链接步骤也不会作为项目编译步骤的依赖项.在大多数其他构建系统中,我熟悉这一点,如果不是隐含的话,这是微不足道的.鉴于Visual Studio的易用性要求,是否可以在MSBuild for C++项目中使用; 如果是这样,怎么样?
概括
我想向从 Azure Pipelines 内部运行的 GitHub CI 添加注释。我想将这些注释添加到执行构建的 CI 检查运行中。我不知道如何从 Azure 内部获取 GitHub Check Run 标识符,也不知道有任何特定于 Azure 的 API 用于向作业结果添加注释。
背景详情
我想使用 Azure DevOps CI将Checks Annotations添加到GitHub Pull Requests。
具体来说,我想将构建失败从 Clang/GCC 或 MSVC 传送到注释,以及从诸如 clang-tidy 或 clang-format 之类的工具请求更改的管道。
编写一个脚本来解析这些工具的输出并使用GitHub Octokit发出请求很容易,如果需要的话,所以我不担心注释的机制。
我知道支持的日志记录命令。但是,即使设置错误,例如:
##vso[task.logissue type=error;sourcepath=source/test.cpp;linenumber=7;columnnumber=20]Error
Run Code Online (Sandbox Code Playgroud)
不设置 GitHub 注释。即使这样做了,我也不知道如何将多行注释(例如差异,甚至大多数编译器错误)放入这样的基于日志的结构中。
问题
我想将这些注释添加到正在运行脚本的现有 Check Run 中,但这要求我能够获取 Check Run 标识符。
要么我需要出于自己的目的获取此 ID(但我不知道如何!),或者我需要从 Azure Pipelines 内部访问某种 API,该 API 添加注释(但我不知道任何)。
c++ ×2
c++11 ×2
azure-devops ×1
github-api ×1
gpu ×1
iostream ×1
iterator ×1
linker ×1
msbuild ×1
visual-c++ ×1