小编Joh*_*ohn的帖子

在CUDA中实现关键部分

我正在尝试使用原子指令在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)

synchronization cuda locking critical-section

13
推荐指数
2
解决办法
2万
查看次数

尝试使用Case时出现coq错误.软件基础书中的示例

我正在尝试通过在线软件基础书籍来学习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书不清楚的其他东西,但我无法弄清楚是什么.

coq

8
推荐指数
1
解决办法
1291
查看次数

GLUT键按下并按下CTRL键

我发现了很多关于使用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按键.

opengl glut keyboard-events

5
推荐指数
1
解决办法
1万
查看次数

从 Mathematica 的 Select 获取索引

我怎样才能获得选择的索引而不是值。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)

编辑:我找到了上面直接问题的答案(见下文),但是排序怎么样。假设我想对列表进行排序,但不是返回排序后的列表,而是想按排序后的列表的顺序返回索引?

wolfram-mathematica

5
推荐指数
2
解决办法
4495
查看次数

Q图像​​文件路径

我在任何地方的文档中都没有看到这一点,所以它可能不存在,但以防万一:

我有一个函数接受 QImages 向量作为参数。每个 QImage 都是在某个时刻从磁盘加载的,并且没有被编辑——它只是被读取。理想情况下,我想做的是循环所有 QImage 并将其文件路径列表输出到 XML 文件。

不幸的是,我在文档中没有看到任何方法来获取加载图像的原始文件路径。所以我的问题是,仅给定一个 QImage,是否有可能找出 QImage 最初从哪个文件路径加载?

大致如下:

QString QImage::getOriginalFilepath();

我知道这可能是一个徒劳的问题,但我想它总是值得一试。

(顺便说一句,我正在使用 Qt 4.7。)

c++ qt qimage

3
推荐指数
1
解决办法
4602
查看次数