我正在尝试使用原子指令在CUDA中实现一个关键部分,但我遇到了一些麻烦.我创建了测试程序来显示问题:
#include <cuda_runtime.h>
#include <cutil_inline.h>
#include <stdio.h>
__global__ void k_testLocking(unsigned int* locks, int n) {
int id = threadIdx.x % n;
while (atomicExch(&(locks[id]), 1u) != 0u) {} //lock
//critical section would go here
atomicExch(&(locks[id]),0u); //unlock
}
int main(int argc, char** argv) {
//initialize the locks array on the GPU to (0...0)
unsigned int* locks;
unsigned int zeros[10]; for (int i = 0; i < 10; i++) {zeros[i] = 0u;}
cutilSafeCall(cudaMalloc((void**)&locks, sizeof(unsigned int)*10));
cutilSafeCall(cudaMemcpy(locks, zeros, sizeof(unsigned int)*10, cudaMemcpyHostToDevice));
//Run …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过在线软件基础书籍来学习Coq:http://www.cis.upenn.edu/~bcpierce/sf/
我正在使用交互式命令行Coq解释器coqtop.
在归纳章节(http://www.cis.upenn.edu/~bcpierce/sf/Induction.html)中,我完全按照说明进行操作.我使用编译Basics.v coqc Basics.v.然后我开始coqtop并准确输入:
Require Export Basics.
Theorem andb_true_elim1 : forall b c : bool,
andb b c = true -> b = true.
Proof.
intros b c H.
destruct b.
Case "b = true".
Run Code Online (Sandbox Code Playgroud)
一切正常,直到最后一行,此时我收到以下错误:
Toplevel input, characters 5-15:
> Case "b = true".
> ^^^^^^^^^^
Error: No interpretation for string "b = true".
Run Code Online (Sandbox Code Playgroud)
我对Coq太新了,开始解压为什么这不起作用.我在网上找到了一些建议我需要先做的事情Require String.,然而,这也没有用.有没有人通过这本书或遇到过这个问题?如何让代码正常工作?
这个Case关键字(战术?)似乎依赖于SF书不清楚的其他东西,但我无法弄清楚是什么.
我发现了很多关于使用GLUT检测是否Ctrl使用GLUT_ACTIVE_CTRL宏按下键的信息.该宏仅在键盘或鼠标回调函数中有效.我需要知道Ctrl在主循环中的某个点是否按下了键,但GLUT_ACTIVE_CTRL似乎在此上下文中不起作用.
那么,有没有办法以Ctrl平台独立的GLUT-ish方式检测密钥上的密钥和密钥事件(没有任何其他密钥被键入)?
编辑:Ctrl按下键时不会触发键盘回调(至少对于默认设置).这是基本问题,我只能在Ctrl按下另一个键时测试是否按下了键,从而触发键盘回调.
我的设置是这样的:
// ... in main function:
glutKeyboardFunc(keyboard);
//later in the code:
void keyboard(unsigned char key, int _x, int _y)
{
printf("keydown \n");
if (glutGetModifiers() == GLUT_ACTIVE_CTRL) {
printf("control key is pressed.\n");
}
//etc.
Run Code Online (Sandbox Code Playgroud)
当我按任何正常字符"keydown"打印到stdout.当我按下Ctrl键时,没有任何反应.如果我按Ctrl+ C,则按下"keydown控制键".打印出来.
但是,在我的主循环中,我添加了:
if (glutGetModifiers() == GLUT_ACTIVE_CTRL) {
printf("Control key down.\n");
} else {
printf("Control key up.\n");
}
Run Code Online (Sandbox Code Playgroud)
它总是打印"控制键".无论我是否Ctrl按键.
我怎样才能获得选择的索引而不是值。IE
list={3->4, 5->2, 1->1, 5->8, 3->2};
Select[list, #[[1]]==5&]; (* returns {5->2, 5->8} *)
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西
SelectIndices[list, #[[1]]==5&]; (* returns {2, 4} *)
Run Code Online (Sandbox Code Playgroud)
编辑:我找到了上面直接问题的答案(见下文),但是排序怎么样。假设我想对列表进行排序,但不是返回排序后的列表,而是想按排序后的列表的顺序返回索引?
我在任何地方的文档中都没有看到这一点,所以它可能不存在,但以防万一:
我有一个函数接受 QImages 向量作为参数。每个 QImage 都是在某个时刻从磁盘加载的,并且没有被编辑——它只是被读取。理想情况下,我想做的是循环所有 QImage 并将其文件路径列表输出到 XML 文件。
不幸的是,我在文档中没有看到任何方法来获取加载图像的原始文件路径。所以我的问题是,仅给定一个 QImage,是否有可能找出 QImage 最初从哪个文件路径加载?
大致如下:
QString QImage::getOriginalFilepath();
我知道这可能是一个徒劳的问题,但我想它总是值得一试。
(顺便说一句,我正在使用 Qt 4.7。)