小编Ner*_*rva的帖子

C字符串操作指针与数组表示法

为什么第一个版本会导致程序崩溃,而第二个版本却没有?他们不是一回事吗?

指针表示法

char *shift = "mondo";
shift[3] = shift[2];
Run Code Online (Sandbox Code Playgroud)

数组表示法

char shift[] = {'m', 'o', 'n', 'd', 'o', '\0'};
shift[3] = shift[2];
Run Code Online (Sandbox Code Playgroud)

MWE

int main( void )
{
    char *shift = "mondo";
    shift[3] = shift[2];

    char shift[] = {'m', 'o', 'n', 'd', 'o', '\0'};
    shift[3] = shift[2];

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

c string

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

在程序集x86_64中添加两个向量与AVX2以及技术说明

我在这做错了什么?我得到4个零而不是:

2
4
6
8
Run Code Online (Sandbox Code Playgroud)

我也想修改我的.asm函数,以便在这里运行更长的向量,因为我只使用了一个带有四个元素的向量,这样我就可以在没有带有SIMD 256位寄存器的循环的情况下对该向量求和.

的.cpp

#include <iostream>
#include <chrono>

extern "C" double *addVec(double *C, double *A, double *B, size_t &N);

int main()
{
    size_t N = 1 << 2;
    size_t reductions = N / 4;

    double *A = (double*)_aligned_malloc(N*sizeof(double), 32);
    double *B = (double*)_aligned_malloc(N*sizeof(double), 32);
    double *C = (double*)_aligned_malloc(N*sizeof(double), 32);

    for (size_t i = 0; i < N; i++)
    {
        A[i] = double(i + 1);
        B[i] = double(i + 1);
    }

    auto start = std::chrono::high_resolution_clock::now();

        double *out …
Run Code Online (Sandbox Code Playgroud)

c++ assembly simd openmp computer-architecture

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

使用cuRAND在函数内生成随机数,无需预先分配

是否可以在设备功能中生成随机数而无需预先分配所有状态?我想在"实时"中生成和使用它们.我需要将它们用于蒙特卡罗模拟最适合此目的的是什么?下面生成的数字是单精度是否可以使它们具有双精度?

#include <iostream>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <curand_kernel.h>

__global__ void cudaRand(float *d_out, unsigned long seed)
{
    int i = blockDim.x * blockIdx.x + threadIdx.x;
    curandState state;
    curand_init(seed, i, 0, &state);
    d_out[i] = curand_uniform(&state);
}

int main(int argc, char** argv)
{
    size_t N = 1 << 4;
    float *v = new float[N];

    float *d_out;
    cudaMalloc((void**)&d_out, N * sizeof(float));

    // generate random numbers
    cudaRand << < 1, N >> > (d_out, time(NULL));

    cudaMemcpy(v, d_out, N * sizeof(float), cudaMemcpyDeviceToHost);

    for (size_t i …
Run Code Online (Sandbox Code Playgroud)

random cuda

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

标签 统计

assembly ×1

c ×1

c++ ×1

computer-architecture ×1

cuda ×1

openmp ×1

random ×1

simd ×1

string ×1