小编Sim*_*mon的帖子

将SSE/AVX单元与GPU核心进行比较是否公平?

我向那些(几乎)不知道GPU是如何工作的人做了一个演示.我认为说GPU有一千个核心,其中CPU只有四到八个是没有意义的.但我想给观众一个比较的元素.

在使用NVidia的Kepler和AMD的GCN架构几个月后,我很想将GPU"核心"CPU的SIMD ALU进行比较(我不知道他们是否在英特尔有这个名称).这样公平吗?毕竟,看着汇编级时,这些编程模型有很多共同点(至少是GCN,看看p2-6中的ISA手册).

本文指出Haswell处理器每个周期可以执行32次单精度操作,但我认为有流水线或其他事情可以实现该速率.用NVidia的说法,这款处理器有多少Cuda核心我会说每个CPU核心有8个用于32位操作,但这只是基于SIMD宽度的猜测.

当然,在比较CPU和GPU硬件时还有许多其他因素需要考虑,但这不是我想要做的.我只需要解释这件事是如何运作的.

PS:非常感谢所有指向CPU硬件文档或CPU/GPU演示的指针!

编辑: 谢谢你的回答,遗憾的是我不得不只选择其中一个.我标记了伊戈尔的答案,因为它最能贴近我最初的问题,并给了我足够的信息来证明为什么这个比较不应该太过分,但是CaptainObvious提供了非常好的文章.

hardware cuda gpu sse opencl

16
推荐指数
2
解决办法
6484
查看次数

glClear函数:关于参数的问题

我想了解glClear功能的深层次.我理解它的一般解释 - >清除颜色,深度,模板和积累的缓冲区,但我还有其他问题.我的朋友假设您清除了代表内存中颜色,深度,模板和积累的位(堆栈?).通过指定和应用参数:(例如,仅颜色和深度)'掩码',您只清除存储器中的那些位(因此"按位操作").

举个例子:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
Run Code Online (Sandbox Code Playgroud)

www.khronos.org对"掩码"的参数说明.mask:掩码的按位OR,表示要清除的缓冲区.

这是我的问题:

  • 参数GL_COLOR_BUFFER_BIT和GL_DEPTH_BUFFER_BIT各占1位内存吗?或者它们表示了多少位(我想了解如何实际应用位掩码)?
  • 我没看到"OR"掩码如何取消位?如果对标记为"set"(而不是"unset")的位使用"OR",它仍然会返回零(1或0仍然返回1)?我觉得这完全错了吗?我在这里错过了什么吗?
  • 什么是"或"标志(管道); 为什么这些参数没有用通常的逗号分隔,而不是在实际函数中声明的按位操作"OR"?

也许我很困惑,因为我是这个领域的新手.能否请您详尽解释一下?我不想在OpenGL中继续这些问题时跳过这些问题; 我想知道我在做什么,并且这种理解可能会帮助我.谢谢!

c memory opengl bits

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

如何复制共享切片以获得盒装切片?

我有一个容器:

pub struct Foo<T> {
    pub data: Box<[T]>,
}
Run Code Online (Sandbox Code Playgroud)

我想要一种从现有切片初始化新切片的方法:

impl<T> Foo<T> {
    fn from_slice(slice: &[T]) -> Foo<T> {
        Foo {
            data: Box::new(/* something here */),
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想Foo从任何类型的切片(来自动态向量或静态字符串)创建一个实例。

我想宏是有原因的vec!,但是有没有办法避免编写宏呢?我想我可以这样做,但创建一个作为克隆的代理slice.to_vec().into_boxed_slice()似乎并不正确......Vec

我没有Vec在我的结构中使用 a ,因为data在容器的生命周期内它的大小不应该改变。使用 a 感觉不对,Vec但我可能是错的。

rust

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

标签 统计

bits ×1

c ×1

cuda ×1

gpu ×1

hardware ×1

memory ×1

opencl ×1

opengl ×1

rust ×1

sse ×1