小编Roy*_*oyi的帖子

`__m256`的包装器使用构造函数生成分段错误 - Windows 64 + MinGW + AVX问题

我有一个看起来像这样的联盟

 union bareVec8f { 
    __m256 m256; //avx 8x float vector
    float floats[8];
    int ints[8];
    inline bareVec8f(){
    }
    inline bareVec8f(__m256 vec){
        this->m256 = vec;
    }
    inline bareVec8f &operator=(__m256 m256) {
        this->m256 = m256;
        return *this;
    }

    inline operator __m256 &() {
        return m256;
    }
}
Run Code Online (Sandbox Code Playgroud)

__m256需要在32字节边界上对齐以与SSE函数一起使用,并且应该是自动的,即使在联合内也是如此.

而当我这样做

bareVec8f test = _mm256_set1_ps(1.0f);
Run Code Online (Sandbox Code Playgroud)

我遇到了分段错误.由于我制作的构造函数,此代码应该可以工作.但是,当我这样做

bareVec8f test;
test.m256 = _mm256_set1_ps(8.f);
Run Code Online (Sandbox Code Playgroud)

我没有得到分段错误.

因此,因为工作正常,所以联合可能正确对齐,但是看起来构造函数只会导致一些分段错误

我正在使用gcc 64bit windows编译器

---------------------------------编辑Matt设法生成了这里似乎发生的最简单的错误示例.

#include <immintrin.h>

void foo(__m256 x) {}

int main()
{
    __m256 r = _mm256_set1_ps(0.0f);
    foo(r);
}
Run Code Online (Sandbox Code Playgroud)

我正在编译 -std=c++11 -mavx

c++ g++ avx windows64 mingw-w64

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

为什么内核中没有使用SIMD指令?

我在内核中找不到很多SIMD指令(如SSE/AVX)(除了一个用于加速RAID6奇偶校验计算的地方).

Q1)是否有任何特定原因或仅缺少用例?

Q2)如果我想使用SIMD指令,比如设备驱动程序,今天需要做什么?

Q3)将像ISPC这样的框架纳入内核(仅用于实验)有多难?

operating-system simd linux-device-driver linux-kernel ispc

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

从图像中提取颜色

我想提取图像中最常用的颜色,或者至少是主色调你能推荐我如何从这个任务开始?或者指向一个类似的代码?我一直在寻找它,但没有成功.

machine-learning hierarchical-clustering image-processing quantization computer-vision

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

寻找成对欧氏距离的快速算法(距离矩阵)

我知道matlab有一个内置的pdist函数,可以计算成对距离.但是,我的矩阵非常大,60000乘300和matlab内存不足.

这个问题是对Matlab欧几里德成对平方距离函数的跟进.

这种计算效率低下是否存在任何解决方法?我尝试手动编码成对距离计算,通常需要一整天才能运行(有时需要6到7个小时).

任何帮助是极大的赞赏!

matlab linear-algebra vectorization

5
推荐指数
3
解决办法
4434
查看次数

MATLAB中的单峰或双峰分布

在MATLAB中有没有办法检查直方图分布是单峰还是双峰

编辑

你认为Hartigan的Dip统计会起作用吗?我尝试将图像传递给它,并获得值0.那是什么意思?

并且,当传递图像时,它是否测试灰度级图像直方图的分布?

谢谢.

statistics matlab distribution histogram

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

如何用SSE3实现签名功能?

1)有没有办法使用具有以下特征的SSE3(无SSE4)有效地实现符号功能

  • 输入是一个浮点向量__m128.
  • 输出也应该__m128以[-1.0f,0.0f,1.0f]作为其值

我尝试过这个,但它不起作用(虽然我认为它应该):

inputVal = _mm_set_ps(-0.5, 0.5, 0.0, 3.0);
comp1 = _mm_cmpgt_ps(_mm_setzero_ps(), inputVal);
comp2 = _mm_cmpgt_ps(inputVal, _mm_setzero_ps());
comp1 = _mm_castsi128_ps(_mm_castps_si128(comp1));
comp2 = _mm_castsi128_ps(_mm_castps_si128(comp2));
signVal = _mm_sub_ps(comp1, comp2);
Run Code Online (Sandbox Code Playgroud)

2)有没有办法创建"标志"功能(我不确定正确的名称).即,如果A > B结果将是10否则.结果应该是float-point(__m128),就像它的输入一样.

更新:Cory Nelson的回答似乎在这里有效:

__m128 greatherThanFlag = _mm_and_ps(_mm_cmpgt_ps(valA, valB), _mm_set1_ps(1.0f));    
__m128 lessThanFlag = _mm_and_ps(_mm_cmplt_ps(valA, valB), _mm_set1_ps(1.0f));
Run Code Online (Sandbox Code Playgroud)

x86 sse x86-64 simd vectorization

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

将Photoshop sRGB复制到LAB转换

我想要实现的任务是将Photoshop RGB复制到LAB转换.
为简单起见,我将描述我只提取L通道所做的工作.

提取Photoshop的L通道

这是RGB Image,包括所有RGB颜色(请点击下载):

RGB颜色图像

为了提取Photoshop的LAB,我所做的是以下内容:

  1. 将图像加载到Photoshop中.
  2. 将模式设置为LAB.
  3. 在频道面板中选择了L频道.
  4. 将模式设置为灰度.
  5. 将模式设置为RGB.
  6. 保存为PNG.

这是Photoshop的L通道(这正是在LAB模式中选择L通道时在屏幕上看到的):

Photoshop的L频道图像

sRGB到LAB转换

我的主要参考是Bruce Lindbloom伟大的网站.
另外一点是Photoshop在其LAB模式下使用D50 White Point(另请参阅Wikipedia的LAB Color Space Page).

假设RGB图像采用sRGB格式,则转换由下式给出:

sRGB -> XYZ (White Point D65) -> XYZ (White Point D50) -> LAB

假设数据在[0,1]范围内的Float中,则阶段由下式给出:

  1. 将sRGB转换为XYZ.
    转换矩阵由RGB - > XYZ矩阵给出(参见sRGB D65).
  2. 从XYZ D65
    转换为XYZ D50 使用Chromatic Adaptation Matrix完成转换.由于上一步和这是矩阵乘法,它们可以组合成一个矩阵,它来自sRGB - > XYZ D50(参见RGB底部到XYZ矩阵).请注意,Photoshop使用Bradford Adaptation Method.
  3. 从XYZ D50
    转换为LAB 使用XYZ到LAB步骤完成转换. …

photoshop matlab colors image-processing color-space

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

如何在 CMake 中运行基本的`add_custom_command`

我只是想启动并运行一个基本的 CMake 示例,该示例可以运行一些基本的命令行命令。我已经研究了一段时间,但我没有任何运气。我完全错误地使用了这个吗?任何和所有输入将不胜感激。

cmake_minimum_required(VERSION 3.0)

add_custom_command(
  OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/test.txt
  COMMAND echo "Hello world"
  COMMENT "This is a comment. But it's not printed during the build?"
)

return() 
Run Code Online (Sandbox Code Playgroud)

编辑: 使用:

add_custom_target(run ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/test.txt)
Run Code Online (Sandbox Code Playgroud)

也不起作用,正如其他帖子中所建议的那样。

cmake add-custom-command

5
推荐指数
0
解决办法
4499
查看次数

如何构建没有循环的距离矩阵(矢量化)?

我有很多点,我想建立距离矩阵,即每个点与所有其他点的距离,但我不想使用循环,因为花太多时间...是一个更好的方法来构建这个矩阵?这是我的循环:对于一个大小为10000x3的setl,这种方法需要花费我很多时间:(

 for i=1:size(setl,1)
     for j=1:size(setl,1)        
         dist = sqrt((xl(i)-xl(j))^2+(yl(i)-yl(j))^2+...
             (zl(i)-zl(j))^2);
         distanceMatrix(i,j) = dist;
     end
 end
Run Code Online (Sandbox Code Playgroud)

matlab distance matrix linear-algebra vectorization

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

MinGW / MinGW64 链接和对“msvcrt.dll”的依赖

我正在 MinGW 中为 WinAPI 编码

我还没有完全理解的一件事是 VC 可再发行版,我对它有一大堆问题

有人说,此类计划需要msvcrt.dll

  1. bot c++ 和 c 编译需要相同的库吗?
  2. 这适用于所有目标客户吗?
  3. 我必须重新分发它吗?我可以重新分发它吗?
  4. 我可以轻松摆脱这种外部依赖吗?
  5. 是否有其他编译器允许我不携带这种令人不快的外部依赖项?(我依稀记得听说它有问题 - 我听说它可能不是核心系统库,或者它不能免费使用和重新分发该库)

我发现这里有问题,因为我想生成不依赖的小exe,只调用系统WinAPI,如果我使用一些类似C标准库函数的函数,我更喜欢它经济地和静态地编译,而不是任何第三方依赖项

windows linker mingw msvcrt mingw-w64

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