AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / 问题

All perguntas(coding)

Martin Hope
timmy george
Asked: 2024-12-14 03:10:10 +0800 CST

Por que uma chamada desta função usa NRVO enquanto outra chamada da mesma função não?

  • 10

vectoré uma estrutura com dois membros públicos Xe Y; um construtor parametrizado que imprime integer constructor called; um construtor de cópia que imprime copy constructor called; e um construtor de movimento que imprime move constructor called <== This line is different\n.

A função makeVectorx5y5IfNotZero()retorna o vetor {5, 5}se argfor 0. caso contrário, retorna {2, 2}.

A mainfunção constrói vector Ausando makeVectorx5y5IfNotZero(1)e constrói vector Busando makeVectorx5y5IfNotZero(0).

Aqui está o código:

#include <iostream>

struct vector{
    int X, Y;
    vector(int X, int Y) : X(X), Y(Y){
        printf("integer constructor called\n");
    }
    vector(const vector& other): X(other.X), Y(other.Y){
        printf("copy constructor called\n");
    }
    vector(vector&& other): X(other.X), Y(other.Y){
        printf("move constructor called      <== This line is different\n\n");
    }
};

vector makeVectorx5y5IfNotZero(bool Arg){
    if(Arg){
        vector A(0, 0);
        A.X = 5;
        A.Y = 5;
        return A;
    }
    else {
        vector B(1,1);
        B.X = 2;
        B.Y = 2;
        return B;
    }
}

int main(){
    printf("Making Vector\n");
    vector A = makeVectorx5y5IfNotZero(1);
    printf("Made Vector\n");
    printf("Making Another Vector\n");
    vector B = makeVectorx5y5IfNotZero(0);
    printf("Made Vector\n");
}

A saída deste código é:

Making Vector
integer constructor called
Made Vector
Making Another Vector
integer constructor called
move constructor called      <== This line is different
Made Vector

No entanto, eu esperava o seguinte resultado, por causa do NRVO:

Making Vector
integer constructor called
Made Vector
Making Another Vector
integer constructor called
Made Vector

Por que a variável local Bde makeVectorx5y5IfNotZero()está sendo movida para a variável local Bde main(), em vez de apenas construir uma única variável no mesmo endereço de memória?

Versão do compilador (saída de g++ --version):

g++ (Rev3, Built by MSYS2 project) 14.1.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
c++
  • 1 respostas
  • 121 Views
Martin Hope
Grasshopper_NZ
Asked: 2024-12-12 20:38:39 +0800 CST

É possível colorir o espaço sideral de preto quando a visualização da projeção contém a Terra e o espaço sideral no ggplot com dados sf?

  • 10

Estou fazendo alguns mapas dos EUA e alguns deles contêm tanto a Terra quanto o espaço sideral devido à projeção, como mostrado abaixo:

insira a descrição da imagem aqui

Ele é gerado pelo código abaixo:

library(ggplot2)
library(sf)


# Import Data:
df <- read_sf("https://raw.githubusercontent.com/rfortherestofus/book/refs/heads/main/data/states.geojson")

# Create the map:
ggplot() +
  geom_sf(data = df, fill = "grey90") +
  
  coord_sf(crs = "+proj=ortho +lat_0=22.0 +lon_0=-162.5") +
  
  theme_minimal() +
  
  theme(
    panel.background = element_rect(fill = "lightblue")   # <- Set the colour for ocean
  )

Gostaria de saber se é possível colorir o espaço sideral (destacado) de preto para refletir a realidade e também tornar a Terra, e portanto os EUA, mais visíveis no mapa?

insira a descrição da imagem aqui

  • 2 respostas
  • 72 Views
Martin Hope
Abhishek Jain
Asked: 2024-12-12 16:52:10 +0800 CST

Fatie uma matriz numpy 2D usando outra matriz 2D

  • 10

Eu tenho um array 2D de (4,5) e outro array 2D de formato (4,2). O segundo array contém os índices inicial e final que eu preciso filtrar do primeiro array, ou seja, eu quero fatiar o primeiro array usando o segundo array.

np.random.seed(0)
a = np.random.randint(0,999,(4,5))
a
array([[684, 559, 629, 192, 835],
       [763, 707, 359,   9, 723],
       [277, 754, 804, 599,  70],
       [472, 600, 396, 314, 705]])
idx = np.array([[2,4],
                [0,3],
                [2,3],
                [1,3]
               ])

Saída esperada - pode ser qualquer um dos dois formatos a seguir. A única razão para preenchimento com zeros é que arrays 2d de comprimento variável não são suportados.

[[629, 192, 835, 0, 0],
 [763, 707, 359, 9, 0],
 [804, 599, 0, 0, 0],
 [600, 396, 314, 0, 0]
]
[[0, 0, 629, 192, 835],
 [763, 707, 359, 9, 0],
 [0, 0, 804, 599, 0],
 [0, 600, 396, 314, 0]
]
python
  • 4 respostas
  • 80 Views
Martin Hope
albert
Asked: 2024-12-12 03:26:25 +0800 CST

std::atomic<T>::wait - o despertar espúrio é possível ou não?

  • 10

cppreference em relaçãostd::atomic<T>::wait a:

void wait( T old, std::memory_order order =
                     std::memory_order::seq_cst ) const noexcept;

Executa operações de espera atômica. Comporta-se como se executasse repetidamente os seguintes passos:

  • Compare a representação de valor de this->load(order) com a de old. Se forem iguais, então bloqueia até que *this seja notificado por notify_one() ou notify_all(), ou o thread seja desbloqueado espuriosamente .
  • Caso contrário, retorna.

Essas funções têm garantia de retornar somente se o valor tiver sido alterado, mesmo que a implementação subjacente desbloqueie falsamente .

Estou confuso. Preciso me preocupar com ativações espúrias (o que significa que wait()podem retornar mesmo que o valor esteja parado old) ou não?

c++
  • 2 respostas
  • 110 Views
Martin Hope
cushdog
Asked: 2024-12-10 15:59:12 +0800 CST

Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

  • 10

Eu estava tentando instalar um shadcnpacote e me deparei com este erro extremamente estranho:

 ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL  Command "cache" not found
node:internal/modules/cjs/loader:1275
  const err = new Error(`Cannot find module '${request}'`);
              ^

Error: Cannot find module '/Users/XXX/Library/Caches/pnpm/dlx/hx67qbkz3shxeflxwe2je2aqw4/193af67f081-15278/node_modules/.pnpm/@[email protected]/node_modules/@jridgewell/gen-mapping/dist/gen-mapping.umd.js'
    at createEsmNotFoundErr (node:internal/modules/cjs/loader:1275:15)
    at finalizeEsmResolution (node:internal/modules/cjs/loader:1264:15)
    at resolveExports (node:internal/modules/cjs/loader:638:14)
    at Function._findPath (node:internal/modules/cjs/loader:737:31)
    at Function._resolveFilename (node:internal/modules/cjs/loader:1225:27)
    at Function._load (node:internal/modules/cjs/loader:1064:27)
    at TracingChannel.traceSync (node:diagnostics_channel:322:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:218:24)
    at Module.require (node:internal/modules/cjs/loader:1325:12)
    at require (node:internal/modules/helpers:136:16) {
  code: 'MODULE_NOT_FOUND',
  path: '/Users/XXX/Library/Caches/pnpm/dlx/hx67qbkz3shxeflxwe2je2aqw4/193af67f081-15278/node_modules/.pnpm/@[email protected]/node_modules/@jridgewell/gen-mapping'
}

Node.js v23.3.0

Para referência, este foi o comando que tentei executar e que causou este erro:

pnpm dlx shadcn@latest add accordion

Tentei executar estes comandos para remediar isso:

pnpm store prune
rm -rf node_modules pnpm-lock.yaml
pnpm install

Também tentei adicionar manualmente o pacote ao qual o erro fez referência. Tentei adicioná-lo como uma dependência de desenvolvimento e como um pacote regular, com:

pnpm add @jridgewell/gen-mapping
pnpm add -D @jridgewell/gen-mapping

Nada do que tentei pareceu funcionar, então qualquer ajuda seria muito apreciada!

reactjs
  • 6 respostas
  • 1656 Views
Martin Hope
Damir Tenishev
Asked: 2024-12-09 23:02:01 +0800 CST

Como copiar valores de um array para outro de estruturas?

  • 10

No código abaixo, eu poderia usar a sintaxe conveniente de std::ranges::transformpara copiar valores de array de estruturas (AoS) para estrutura de arrays (SoA) (neste exemplo, apenas um vetor). Existe uma maneira de fazer o mesmo de forma oposta, copiando dados de um campo específico de estrutura quando eu preciso copiar valores de SoA para AoS?

Especificamente, existe uma maneira de substituir o for-loop no código abaixo por alguma chamada de algoritmo (intervalos de visualizações seriam preferíveis)?

#include <algorithm>
#include <iostream>
#include <ranges>
#include <vector>

struct S
{
    float v1;
    float v2;
};

int main() {
    std::vector<S> aos = { { 1.0f, 2.0f } };
    std::vector<float> soa(aos.size());

    std::ranges::transform(aos, soa.begin(), &S::v1);

    std::cout << "soa value:" << soa[0] << std::endl;

    soa[0] = 3.0;

    // I want to replace this with something transform-like above
    for (std::size_t i = 0; i < soa.size(); ++i)
    {
        aos[i].v1 = soa[i];
    }

    std::cout << "aos value:" << aos[0].v1 << std::endl;
}

Demonstração

c++
  • 1 respostas
  • 101 Views
Martin Hope
Andorrax
Asked: 2024-12-04 13:10:10 +0800 CST

Por que os fluxos paralelos internos são mais rápidos com novos pools do que com o commonPool para este cenário?

  • 10

Então, recentemente executei um benchmark onde comparei o desempenho de fluxos aninhados em 3 casos:

  • Fluxo externo paralelo e fluxo interno sequencial
  • Fluxos externos e internos paralelos (usando parallelStream) - isso testa efetivamente `ForkJoinPool.commonPool()
  • Fluxos externos e internos paralelos, mas os fluxos internos criam novos fluxos ForkJoinPoolpara cada tarefa

Aqui está o código de benchmark (usei JMH):

public class NestedPerf {
  @State(Scope.Benchmark)
  public static class StateData{
    public static final List<Integer> outerLoop = IntStream.range(0, 32).boxed().toList();
    public static final List<Integer> innerLoop = IntStream.range(0, 32).boxed().toList();
  }
  private static void runInNewPool(Runnable task) {
    ForkJoinPool pool = new ForkJoinPool();
    try {
      pool.submit(task).join();
    } finally {
      pool.shutdown();
    }
  }
  private static void innerParallelLoop() {
    StateData.innerLoop.parallelStream().unordered().forEach(i -> {
      try {
        Thread.sleep(5);
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
      }
    });
  }
  private static void innerSequentialLoop() {
    StateData.innerLoop.stream().unordered().forEach(i -> {
      try {
        Thread.sleep(5);
      } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
      }
    });
  }
  @Benchmark
  public void testingNewPool(Blackhole bh){
    StateData.outerLoop.parallelStream().unordered().forEach(i -> {
      runInNewPool(ParallelPerf::innerParallelLoop);
      bh.consume(i);
    });
  }

  @Benchmark
  public void testingCommonPoolWithSequentialInner(Blackhole bh){
    StateData.outerLoop.parallelStream().unordered().forEach(i -> {
      innerSequentialLoop();
      bh.consume(i);
    });
  }
  @Benchmark
  public void testingCommonPool(Blackhole bh){
    StateData.outerLoop.parallelStream().unordered().forEach(i -> {
      innerParallelLoop();
      bh.consume(i);
    });
  }
}

E aqui está o resultado:

Benchmark                                         Mode  Cnt   Score   Error  Units
NestedPerf.testingCommonPool                     thrpt   25   1.935 ± 0.005  ops/s
NestedPerf.testingCommonPoolWithSequentialInner  thrpt   25   1.744 ± 0.007  ops/s
NestedPerf.testingNewPool                        thrpt   25  22.648 ± 0.559  ops/s

A diferença entre o método com novos Pools e o método com commonPool é surpreendente. Alguém tem uma ideia de por que criar novos pools torna as coisas cerca de 20x mais rápidas para esse benchmark?

Se ajudar, estou executando isso em um sistema Core i7 10850H com 12 CPUs disponíveis (hexcore + hyperthreading).

java
  • 2 respostas
  • 88 Views
Martin Hope
Aditya Kurrodu
Asked: 2024-12-02 16:21:02 +0800 CST

restringir qualificador em C

  • 10

O seguinte uso do qualificador restrito em C é válido ou comportamento indefinido?

#include <stdio.h>



int foo(float * restrict a) {
    float a1 = *a;
    float a2 = *(a+1);

    float * restrict c = a;
    
    *c = 1;
    *(c+1) = 2;
    
    // are compilers obliged to load a[0] and a[1] again?
    printf("%f %f\n",*a,*(a+1));
    printf("%f %f\n",a1, a2);
}

Obrigado

c
  • 2 respostas
  • 84 Views
Martin Hope
Joe Doliner
Asked: 2024-11-27 01:07:42 +0800 CST

O assembly AVX512 quebra quando chamado simultaneamente de diferentes goroutines

  • 10

Tenho uma parte personalizada do assembly golang (1.23.0) que executa operações AVX512 para acelerar um caminho de código muito comum. A função verifica se um grupo de jogadores está segurando uma mão de pôquer, representando as mãos como bitsets int64. O código se parece com isso (um CardSet é simplesmente um int64):

// func SubsetAVX512(cs []CardSet, hs []CardSet) int
// Returns 1 if any card set in cards contains any hand in hands, 0 otherwise

#include "textflag.h"

#define cs_data 0(FP)
#define cs_len  8(FP)
#define cs_cap  16(FP)
#define hs_data 24(FP)
#define hs_len  32(FP)
#define hs_cap  40(FP)
#define ret_off 48(FP)

// Define the function
TEXT ·SubsetAVX512(SB), NOSPLIT, $0-56

// Start of the function
    // Load parameters into registers
    MOVQ cs+cs_data, R8         // R8 = cards_ptr
    MOVQ cs+cs_len, R9          // R9 = cards_len

    MOVQ hs+hs_data, R10        // R10 = hands_ptr
    MOVQ hs+hs_len, R11         // R11 = hands_len

    // Check if hands_len == 0
    TESTQ R11, R11
    JE return_false

    // Check if cards_len == 0
    TESTQ R9, R9
    JE return_false

    // Initialize loop counters
    XORQ R12, R12                 // R12 = i = 0 (hands index)

    // Main loop over hands
outer_loop:
    CMPQ R12, R11                 // Compare i (R12) with hands_len (R11)
    JGE return_false              // If i >= hands_len, no match found

    // Load 8 hands into Z0 (512-bit register)
    LEAQ (R10)(R12*8), R13        // R13 = &hands[i]
    VMOVDQU64 0(R13), Z0          // Load 8 int64s from [R13] into Z0

    // Inner loop over cards
    XORQ R14, R14                 // R14 = j = 0 (cards index)
inner_loop:
    CMPQ R14, R9                  // Compare j (R14) with cards_len (R9)
    JGE next_hands_block          // If j >= cards_len, move to next hands block

    // Load cs from cards[j]
    LEAQ (R8)(R14*8), R15         // R15 = &cards[j]
    MOVQ 0(R15), AX               // AX = cards[j]

    // Broadcast cs into Z1
    VPBROADCASTQ AX, Z1           // Broadcast RAX into all lanes of Z1

    // Compute cs_vec & h_vec
    VPANDQ Z0, Z1, Z2             // Z2 = Z0 & Z1

    // Compare (cs_vec & h_vec) == h_vec
    VPCMPEQQ Z0, Z2, K1           // Compare Z0 == Z2, store result in mask K1

    // Check if any comparison is true
    KORTESTW K1, K1               // Test if any bits in K1 are set
    JNZ found_match               // If so, a match is found

    // Increment card index
    INCQ R14                      // j++
    JMP inner_loop                // Repeat inner loop

next_hands_block:
    // Increment hands index by 8
    ADDQ $8, R12                  // i += 8
    JMP outer_loop                // Repeat outer loop

found_match:
    // Match found, return 1
    MOVQ $1, AX                   // Set return value to 1 (true)
    RET

return_false:
    // No match found, return 0
    XORQ AX, AX                   // Set return value to 0 (false)
    RET

Este código funciona muito bem, desde que não seja chamado simultaneamente. Isto funciona:

type CardSet int64
func SubsetAVX512(cs, hs []CardSet) bool
func TestSubsetAVX512(t *testing.T) {
    cs := []CardSet{3, 1}
    hs := []CardSet{3, 0}
    var count int64
    for i := 0; i < 5; i++ {
        if SubsetAVX512(cs, hs) {
            atomic.AddInt64(&count, 1)
        }
    }
    require.Equal(t, int64(5), count)
}

no entanto, isso falha:

type CardSet int64
func SubsetAVX512(cs, hs []CardSet) bool
func TestSubsetAVX512(t *testing.T) {
    cs := []CardSet{3, 1}
    hs := []CardSet{3, 0}
    var count int64
    wg := sync.WaitGroup{}
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            if SubsetAVX512(cs, hs) {
                atomic.AddInt64(&count, 1)
            }
        }()
    }
    wg.Wait()
    require.Equal(t, int64(5), count)
}

Acredito que o problema tem a ver com alguns dos registros que estou usando sendo sobrescritos por goroutines concorrentes. Meu palpite é que é o registro mask K1, mas isso é apenas um palpite ligeiramente fundamentado.

go
  • 1 respostas
  • 41 Views
Martin Hope
JMNunes
Asked: 2024-11-23 06:08:04 +0800 CST

Uso de argumento nomeado na função R t.test (e algumas outras)

  • 10

Usar o argumento formula explicitamente (formula = some formula) em t.testnão está funcionando na maioria das versões do R de 3.6.3 (e talvez até antes, não testado) até a atual 4.4.2. O mesmo acontece com wilcox.test mas não com lmou oneway.test.

A página de ajuda para t.test fornece este exemplo

 t.test(extra ~ group, data = sleep)

Se digitarmos

 t.test(data = sleep,  extra ~ group)

também funciona, mas

 t.test(data = sleep, formula = extra ~ group)

não, produzindo um erro que leva a pensar em um problema de análise de argumento:

Erro em t.test.default(data = sleep, formula = extra ~ group) :

o argumento "x" está faltando, sem padrão

Esse é um comportamento esperado?

  • 1 respostas
  • 77 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve