问题列表 - 第318047页

使用 SIMD 屏蔽高于分隔符位置的字节的最快方法

uint8_t data[] = "mykeyxyz:1234\nky:123\n...";。我的字符串行有 format key:value,其中每一行都有len(key) <= 16保证。我想加载mykeyxyz到 a 中__m128i,但将较高的位置填为 0。

最简单的方法是使用 255 或 0 掩码的数组,但这需要另一个内存负载。有没有办法更快地做到这一点?

接受的答案使总程序时间加快了约 2%。要进行比较,请进行测试1brc_valid13.cpp(1brc_valid14.cpp使用已接受的答案)。硬件:AMD 2950X、Ubuntu 18.04、g++ 11.4,编译命令:g++ -o main 1brc_final_valid.cpp -O3 -std=c++17 -march=native -m64 -lpthread

编辑:最好没有 AVX512

编辑 2:我需要变量,len以便我可以开始解析值部分。

编辑 3:该函数将在循环中使用(例如解析 100 万行文本)。但strcmp_mask基本上总是在 L1 缓存内

编辑 4:我通过解析 10 亿行(key,value)并处理它们来对函数进行基准测试。您可以下载代码/数据并在我的存储库中复制结果: https: //github.com/lehuyduc/1brc-simd。此外,讨论帖将包含更多信息

编辑 5:我测试maskafterc256发现它导致我的代码慢了 50 倍!如果我替换_mm256_set_epi8为 …

c++ optimization assembly simd avx

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

如何按区域过滤并将其从结果数组中删除?

我有以下数组结构:

const values = [{
    "region": "US", "content": "content 1", "value": "value1"
}, {
    "region": "US", "content": "content 2", "value": "value2"
}, {
    "region": "US", "content": "content 3", "value": "value3"
}, {
    "region": "LA", "content": "content 4", "value": "value4"
}, {
    "region": "LA", "content": "content 5", "value": "value5"
}, {
    "region": "LA", "content": "content 6", "value": "value6"
}, {
    "region": "LA", "content": "content 7", "value": "value7"
}]
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其转换为以下内容 - 请注意,region密钥已从输出数组内的结果对象中消失:

const output = [{
    "US": [
        {"content": "content …
Run Code Online (Sandbox Code Playgroud)

javascript arrays

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

如果当前绘图是基础图形,则在函数内部“知道”

有没有办法以编程方式非破坏性地知道当前图形设备是否是基础图形?

我需要它是非破坏性的,因为它不会打开新设备、关闭当前设备或以其他方式修改它(例如,添加点/线等)。

例如,

isbasegx <- function() {
  length(dev.list()) > 0 && # dev.interactive() && 
    !identical(par("usr"), c(0, 1, 0, 1))
}
Run Code Online (Sandbox Code Playgroud)

(编辑删除dev.interactive(),因为这在报告生成中也很有用。)

这可能是一个开始,但是任何依赖的东西par()都会失败,因为基于网格的图形不会更新它们(这并不奇怪):

plot(1, 1)
par1 <- par()
ggplot(mtcars, aes(mpg, disp)) # same graphics device
par2 <- par()
all(mapply(identical, par1, par2))
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)

图形类型还有哪些其他“提示”?

grid r ggplot2 r-base-graphics

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

向量中的 Push_back() 表现得很奇怪

预期输出是: 1 2 3 4,如果我们取消注释提到的执行推回操作的行并运行代码,预期输出仍然是 1 2 3 4。但是猜猜它完全不同。运行一下你就知道了。为什么会发生这种情况?

#include <iostream>
#include<vector>
using namespace std;

int main()
{
    int k=2;
    vector<int> v;
    vector<int> :: iterator itr;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);  
    v.push_back(4); 
    v.push_back(5);
    v.push_back(6); 
    v.push_back(7); 
    
    
    auto a=v.begin();
    
    for(int i=0;i<4;i++){
        cout<<*a<<" ";
        //v.push_back(anynumber); ----------------------------------->This line
        a++;

    }
    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

c++ vector push-back

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

获取所有位模式的标准方法

是否有一种严格一致的方法来获取 C 中整数的所有位模式,而不依赖于实现定义的行为?

在许多架构上,我可以期望-1和UINT_MAX家族给出这样的位模式;这个假设的可移植性如何?

c bit-manipulation bit language-lawyer

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

基本 OpenGL 纹理四边形中的三角形之一中的伪影

我试图以纯粹的方式制作https://learnopengl.com/Getting-started/TexturesC示例(讨厌C++),并在我的四边形中发现了这个奇怪的问题,其中一个一致的三角形渲染得很好,而另一个看起来像垂直的纹理坐标已被固定,同时水平方向也完美无缺。 例子

meson.build:

project('snake', 'c',
  version : '0.1',
  default_options : ['warning_level=3'])

cc = meson.get_compiler('c')
m_dep = cc.find_library('m', required : true)
openGl = dependency('gl')
glfw3 = dependency('glfw3')

executable('snake',
           'src/main.c',
           'src/shaders.c',
           'src/stb_image.c',
           dependencies : [ m_dep, openGl, glfw3 ],
           install : true)
Run Code Online (Sandbox Code Playgroud)

src/main.h:

#include <stdlib.h>
#include <stdio.h>
#include <GLFW/glfw3.h>
#include <sys/stat.h>
#include "shaders.h"
#include "stb_image.h"

// https://learnopengl.com/Getting-started/Transformations

static void error_callback(int error, const char* description) {
  fprintf(stderr, "ERROR: Beschreibung: %s und Code: %i\n", description, error);
}

static …
Run Code Online (Sandbox Code Playgroud)

c opengl glsl glfw

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

C++ 程序在用户输入后停止

#include "util.h"
#include <cmath>

double celsius(double t)
{
    double C = (t-32) * 5/9;
    C = round(C);
    return C;
}

double fahrenheit(double t)
{
    double F = t * 9/5 + 32;
    F = round(F);
    return F;
}

double round(double num)
{
    double rounded = round(num);
    return rounded;
}

int main()
{
    double temp = readDouble("Please enter a temperature: ");
    string type = readLine("Enter C to convert to Celsius or F to convert to Fahrenheit: ");
    if(type == "C")
    { …
Run Code Online (Sandbox Code Playgroud)

c++ user-input early-stopping

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

在插入期间使用 IDENT_CURRENT() 获取我的 ID?

假设我有下表:

CREATE TABLE [ExampleTable]
(
    [ExampleID] [int] IDENTITY(1,1) NOT NULL,
    [ExampleCompositeNumber] [nvarchar](50) NULL,

    CONSTRAINT [PK_Certificates] 
        PRIMARY KEY CLUSTERED ([ExampleID] ASC)
) 
Run Code Online (Sandbox Code Playgroud)

我想要的是[ExampleCompositeNumber]成为ExampleID-[000000-999999]。

我希望这个插入能起作用,但我担心两个人同时插入,并且将错误的 ID 分配给第一部分ExampleCompositeNumber

INSERT INTO ExampleTable (ExampleCompositeNumber)
VALUES (CAST(IDENT_CURRENT('ExampleTable') AS nvarchar(18)) + '-123345')
Run Code Online (Sandbox Code Playgroud)

当我使用SCOPE_IDENTITY()而不是IDENT_CURRENT我得到以前插入的ID,而不是我当前正在制作的插入的ID。以下是该插入内容的示例:

INSERT INTO ExampleTable (ExampleCompositeNumber)
VALUES (CAST(SCOPE_IDENTITY() AS nvarchar(18)) + '-123345')
Run Code Online (Sandbox Code Playgroud)

我的担忧是否正确,或者如果发生多次插入,是否有可能重叠?

sql sql-server insert

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

尽管 -fno-builtin-sincos 标志,GCC 仍生成对 sincos 的调用

对于我的应用程序(数值计算),调试和发布可执行文件对于相同的输入返回完全相同的结果非常重要。我一直在追踪它们之间的一个新差异,发现这是 GCC 将 asin和cos计算组合到对 的一次调用中的错误sincos,其结果sin值与常规调用sin返回的值不同。一些谷歌搜索告诉我这可能会发生。

很好,我决定不使用它sincos,或者不让编译器使用它。在godbolt上,我提供了以下代码

#include <stdio.h>
#include <math.h>

int main()
{
    double d;
    scanf("%lf", &d);
    double sd = sin(d);
    double cd = cos(d);
    printf("%f, %f", sd, cd);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以及以下标志-O3 -fno-builtin-sincos。这不起作用,GCC 仍然会发出对sincos. 但是,如果我用 plain 替换该标志-fno-builtin,则 GCC 会遵守并分别调用sin和cos。

为了完整起见,我也尝试过-fno-builtin-sincos -fno-builtin-sincosf -fno-builtin-sincosl,没有骰子。

这是海湾合作委员会的错误吗?

c gcc

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

为什么使用下划线作为 bash 中读取的参数?

我最近发现了一篇关于如何从 GitHub 中的组织克隆所有存储库的帖子。最佳答案如下:

gh repo list myorgname --limit 4000 | while read -r repo _; do
  gh repo clone "$repo" "$repo"
done
Run Code Online (Sandbox Code Playgroud)

我理解下划线之前和之后的所有内容。是什么意思 _; 在上面的命令中?

谢谢!

bash

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