小编Ben*_*ray的帖子

Haskell 的“Const”函子是否类似于范畴论中的常数函子?

我知道 Haskell 中的许多名称都受到范畴论术语的启发,我正试图准确理解类比的开始和结束位置。

类别 Hask

由于一些关于严格/懒惰和的技术细节,我已经知道这Hask不是(必然)一个类别seq,但现在让我们把它放在一边。为清楚起见,

  • 的对象Hask是具体类型,即 kind 的类型*。这包括像 那样的函数类型Int -> [Char],但不包括像Maybe :: * -> *. 但是,具体类型Maybe Int :: *属于Hask. 类型构造函数/多态函数更像是自然变换(或其他更一般的映射Hask到自身),而不是态射。
  • 的态射Hask是 Haskell 函数。对于两个具体类型Aand B,hom-setHom(A,B)是具有签名的函数集A -> B
  • 函数组合由 给出f . g。如果我们担心严格性,我们可能会将组合重新定义为严格的,或者在定义函数的等价类时要小心。

Functors 是 Endofunctors Hask

我认为上面的技术细节与我下面的困惑没有任何关系。我想我理解它的意思是说 的每个实例Functor都是类别中的一个内函子Hask。也就是说,如果我们有

class Functor …
Run Code Online (Sandbox Code Playgroud)

haskell functor category-theory phantom-types

20
推荐指数
3
解决办法
748
查看次数

CUDA/OpenGL Interop:写入表面对象不会删除以前的内容

我试图使用CUDA内核来修改OpenGL纹理,但我遇到一个奇怪的问题,我的调用surf2Dwrite()似乎与纹理的先前内容混合,如下图所示.在使用我的CUDA内核修改之前,背面的木质纹理是纹理中的内容.预期的输出仅包括颜色渐变,而不包括其背后的木材纹理.我不明白为什么这种混合正在发生.

怪异的纹理混合

可能的问题/误解

我是CUDA和OpenGL的新手.在这里,我将尝试解释导致我使用此代码的思维过程:

  • 我正在使用a cudaArray来访问纹理(而不是像浮点数组),因为我读到在读/写纹理时最好是缓存局部性.
  • 我正在使用曲面因为我在某处读到它是修改a的唯一方法 cudaArray
  • 我想使用表面对象,我理解这是更新的做事方式.旧的方法是使用表面参考.

我的代码可能存在一些问题,我不知道如何检查/测试:

  • 我与图像格式不一致吗?也许我没有在某处指定正确的位数/通道数?也许我应该使用floats而不是unsigned chars?

代码摘要

您可以在此GitHub Gist中找到完整的最低工作示例.由于所有活动部件都很长,但我会试着总结一下.我欢迎有关如何缩短MWE的建议.整体结构如下:

  1. 从本地存储的文件创建OpenGL纹理
  2. 使用CUDA注册纹理 cudaGraphicsGLRegisterImage()
  3. 调用cudaGraphicsSubResourceGetMappedArray()得到一个cudaArray代表纹理
  4. 创建一个cudaSurfaceObject_t我可以用来写的cudaArray
  5. 将表面对象传递给用其写入纹理的内核 surf2Dwrite()
  6. 使用纹理在屏幕上绘制一个矩形

OpenGL纹理创建

我是OpenGL的新手,所以我使用LearnOpenGL教程的"纹理"部分作为起点.这是我如何设置纹理(使用图像库stb_image.h)

GLuint initTexturesGL(){
    // load texture from file
    int numChannels;
    unsigned char *data = stbi_load("img/container.jpg", &g_imageWidth, &g_imageHeight, &numChannels, 4);
    if(!data){
        std::cerr << "Error:  Failed to load texture image!" << std::endl;
        exit(1);
    }

    // opengl texture …
Run Code Online (Sandbox Code Playgroud)

c++ opengl cuda

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

标签 统计

c++ ×1

category-theory ×1

cuda ×1

functor ×1

haskell ×1

opengl ×1

phantom-types ×1